El uso de AveragePooling2D en lugar de GlobalAveragePooling 2D para reemplazar las capas Densas después de un FCN para la clasificación

0

Pregunta

¿Puedo usar un AveragePooling2D capa con la pool_size igual al tamaño de la función de mapa en lugar de un GlobalAveragePooling2D capa? el propósito de esto es para sustituir una densa capa después de un FCN. ES GlobalAveragePooling2D un caso especial de AveragePooling2D??

deep-learning keras tensorflow
2021-11-22 13:35:20
2

Mejor respuesta

2

GlobalAveragePooling2D le baje la frecuencia de entrada al tomar el valor promedio a lo largo de las dimensiones espaciales y el retorno de una 1D salida por defecto, a menos que establezca keepdims= True. AveragePooling2D también downsamples una entrada, pero se toma el valor promedio a través de una ventana de entrada de datos definidos por el pool_size parámetro. Así, devolverá una salida de 3D:

import tensorflow as tf
x = tf.constant([[1., 2., 3.],
                 [4., 5., 6.],
                 [7., 8., 9.]])

x = tf.reshape(x, [1, 3, 3, 1]) # Add batch dimension

avg_pool_2d = tf.keras.layers.AveragePooling2D(pool_size=(2, 2),
   strides=(1, 1), padding='valid')
avg_global_2d = tf.keras.layers.GlobalAveragePooling2D()
print(avg_pool_2d(x).shape)
print(avg_global_2d(x).shape)
(1, 2, 2, 1)
(1, 1)

Usted probablemente tendrá que acoplar a su salida de la AveragePooling2D capa si queremos alimentar a una Dense capa después:

import tensorflow as tf
x = tf.constant([[1., 2., 3.],
                 [4., 5., 6.],
                 [7., 8., 9.]])

x = tf.reshape(x, [1, 3, 3, 1]) # Add batch dimension

avg_pool_2d = tf.keras.layers.AveragePooling2D(pool_size=(2, 2),
   strides=(1, 1), padding='valid')
avg_global_2d = tf.keras.layers.GlobalAveragePooling2D()
print(tf.keras.layers.Flatten()(avg_pool_2d(x)).shape)
print(avg_global_2d(x).shape)
(1, 4)
(1, 1)

Si ese no es el caso, usted puede simplemente dejarlo como está.

Actualización: GlobalAveragePooling2D y AveragePooling2D a veces puede comportarse de manera similar si el ajuste de la strides y pool_size los parámetros de acuerdo a:

import tensorflow as tf
x = tf.constant([[1., 2., 3.],
                 [4., 5., 6.],
                 [7., 8., 9.]])

x = tf.reshape(x, [1, 3, 3, 1]) # Add batch dimension

avg_pool_2d = tf.keras.layers.AveragePooling2D(pool_size=(2, 2),
   strides=(3, 3), padding='valid')
avg_global_2d = tf.keras.layers.GlobalAveragePooling2D()

print(avg_pool_2d(x))
print(avg_global_2d(x))
tf.Tensor([[[[3.]]]], shape=(1, 1, 1, 1), dtype=float32)
tf.Tensor([[5.]], shape=(1, 1), dtype=float32)

O

avg_pool_2d = tf.keras.layers.AveragePooling2D(pool_size=(3, 3),
   strides=(2, 2), padding='valid')
avg_global_2d = tf.keras.layers.GlobalAveragePooling2D()
tf.Tensor([[[[5.]]]], shape=(1, 1, 1, 1), dtype=float32)
tf.Tensor([[5.]], shape=(1, 1), dtype=float32)
2021-11-22 14:51:04

'x = Input(shape=(128,128,3))' después de muchas más LAS capas I get a : 'a = Conv2D(200 ,(1,1), relleno = 'mismo' , la activación='softmax', data_format = 'channels_last')(output_of_the_layer_before)' es la última convolucional de la capa, a continuación, hago 'b = Lambda(lambda x: apriete(x, eje=2))(AveragePooling2D(pool_size=(1, 128))(a)
DSPinterested

Esto funciona perfectamente bien para la tarea específica que tengo, que me hizo pensar que el uso de GlobalaveragePooling2D podría no ser la única opción disponible para la colocación de las capas densas... también con GlobalAveragePooling2D usted tiene la opción de 'keepdims= True' o 'keepdims= False' , no puedo compartir mi código, espero que esto tenía sentido para usted
DSPinterested

Sí, para mí, tiene sentido.. pero ¿cuál es exactamente tu pregunta ahora o lo que no tiene entendimiento?
AloneTogether

Cómo mediante el uso de la AveragePooling2D capa como se ha descrito anteriormente conduce a casi la misma clasificación de resultados como GlobalAveragePooling2D! Generalmente en la literatura casi siempre tengo visto GlobalAveragePooling2D como un reemplazo para las capas Densas en la FCN, pero nunca se vio AveragePooling2D que se usan en lugar de una capa Densa
DSPinterested

Respuesta actualizada, pero no se pudo reproducir el código añadido en los comentarios.. por favor, actualice su pregunta con el código correspondiente, el resultado, y su pregunta.
AloneTogether

El promedio mundial de la agrupación no es nada especial. Usted puede utilizar el promedio de la agrupación con filtro de tamaño igual al tamaño de entrada y válido relleno, entonces es exactamente el mismo. Incluso se podría usar funciones como tf.reduce_mean. La razón por la que nadie hace esto es que es el camino más fácil para el uso global de la agrupación directamente...
xdurch0

@xdurch0 , tiene sentido!
DSPinterested
0

Agregar a la respuesta anterior, el promedio mundial de la agrupación puede ser utilizado para tomar la variable de tamaño de imágenes como entradas. Si la entrada de forma global antes de la agrupación es (N,H,W,C) entonces la salida será (N,1,1,C) para cuando keras keepdims=True. Esto hace que la salida de imágenes con diferentes (H,W) producir de forma similar a las salidas.

Referencias:

2021-11-22 13:59:40

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................