1. ホーム
  2. python

[解決済み] kerasのFlatten()とGlobalAveragePooling2D()の違いは何ですか?

2022-02-09 19:57:34

質問

KerasのDense LayerにConvLSTMとConv2Dの出力を渡したいのですが、グローバル平均プーリングとフラットネスの違いは何ですか? 私の場合、どちらも動作しています。

model.add(ConvLSTM2D(filters=256,kernel_size=(3,3)))
model.add(Flatten())
# or model.add(GlobalAveragePooling2D())
model.add(Dense(256,activation='relu'))

解決方法は?

どちらも動作するように見えても、同じように動作するとは限りません。

Flatten は任意の形状のテンソルを受け取り、1次元のテンソル(+サンプル次元)に変換するが、テンソルのすべての値は維持される。例えば、テンソル (samples, 10, 20, 1) は (samples, 10 * 20 * 1) に平坦化される。

GlobalAveragePooling2Dは異なることをします。これは、各空間次元が1になるまで空間次元に平均プーリングを適用し、他の次元は変更しない。この場合、値は平均化されたまま保持されない。例えば、テンソル (samples, 10, 20, 1) は、2次元と3次元が空間的であると仮定して (samples, 1, 1, 1) と出力されます (チャンネルは最後)。