Deepラーニングのメモです
2405 views
普通のMaxPoolingは以下のように、カーネルサイズに該当する値から最大値を抽出する。
一方、globalPoolingは、全体から最大値を得る。
これが何の役に立つのかというと、レイヤ―の終盤、コンボリューションの出力サイズが7×7くらいになる。このとき、MaxPoolingのカーネルサイズを7×7にすれば同じことっぽい。
全結合で改めて計算し直さなくても、各セルの最大値だけ使って全結合チックにできる。
下は全結合。
下はglobalAverageを使ったとき(MaxPoolingじゃないけど)
識別率に特に影響はないらしい。省エネが目的か?
https://qiita.com/mine820/items/1e49bca6d215ce88594aを参考にさせていただきました。
kerasにglobalMaxPoolingがあるが、pytorchにはない。
自分で作れとのこと。
import torch.nn.functional as F
F.max_pool2d(x, kernel_size=x.size()[2:])
または
F.adaptive_max_pool2d(x, (1, 1))
https://www.xn--ebkc7kqd.com/entry/pytorch-poolingを参考にさせていただきました。
ちなみにkerasだと次のプログラムでMaxpooling2Dの挙動を確認できる。
import numpy as np
from keras import models
from keras import layers
if __name__ == '__main__':
virtual_img = [
[
[
[0,0,0],
[0,1,0],
[0,0,0]
],
[
[0,0,0],
[1,0,0],
[0,0,0]
],
[
[0,1,0],
[0,0,0],
[0,0,0]
],
]
]
virtual_img = np.array(virtual_img)
print(virtual_img.shape)
model = models.Sequential()
model.add(layers.Conv2D(2, (3, 3),padding='same', input_shape=(3,3,3)))
#model.add(layers.MaxPooling2D((2, 2), strides=(1, 1)))
model.add(layers.GlobalMaxPooling2D())
y = model.predict(virtual_img)
print(y)
Page 12 of 33.
すぺぺぺ
本サイトの作成者。
プログラムは趣味と勉強を兼ねて、のんびり本サイトを作っています。
フレームワークはdjango。
ChatGPTで自動プログラム作成に取り組み中。
https://www.osumoi-stdio.com/novel/