web-dev-qa-db-fra.com

quelle est la différence entre Flatten () et GlobalAveragePooling2D () en keras

Je veux passer la sortie de ConvLSTM et Conv2D à une couche dense dans Keras, quelle est la différence entre l'utilisation de la mise en commun moyenne globale et l'aplatissement des deux fonctionne dans mon cas.

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

Que les deux semblent fonctionner ne signifie pas qu'ils font de même.

Aplatir prendra un tenseur de n'importe quelle forme et le transformera en un tenseur unidimensionnel (plus la dimension des échantillons) mais en conservant toutes les valeurs dans le tenseur. Par exemple, un tenseur (échantillons, 10, 20, 1) sera aplati en (échantillons, 10 * 20 * 1).

GlobalAveragePooling2D fait quelque chose de différent. Il applique la mise en commun moyenne sur les dimensions spatiales jusqu'à ce que chaque dimension spatiale soit une et laisse les autres dimensions inchangées. Dans ce cas, les valeurs ne sont pas conservées car elles sont moyennées. Par exemple, un tenseur (échantillons, 10, 20, 1) serait sorti comme (échantillons, 1, 1, 1), en supposant que les 2e et 3e dimensions étaient spatiales (les canaux en dernier).

20
Matias Valdenegro

L'aplatissement est une évidence et il convertit simplement un objet multidimensionnel en unidimensionnel en réorganisant les éléments.

Alors que GlobalAveragePooling est une méthodologie utilisée pour une meilleure représentation de votre vecteur. Il peut s'agir de 1D/2D/3D. Il utilise une fenêtre d'analyseur qui se déplace sur l'objet et regroupe les données en faisant la moyenne (GlobalAveragePooling) ou en sélectionnant la valeur maximale (GlobalMaxPooling). Le rembourrage est essentiellement nécessaire pour prendre les cas d'angle dans le compte.

Les deux sont utilisés pour prendre en compte le séquençage de manière plus simple.

0
The Free Soul