Saltar al contenido

¿Cuál es la diferencia entre Flatten () y GlobalAveragePooling2D () en keras?

Solución:

Que ambos parezcan funcionar no significa que hagan lo mismo.

Flatten tomará un tensor de cualquier forma y lo transformará en un tensor unidimensional (más la dimensión de las muestras) pero manteniendo todos los valores en el tensor. Por ejemplo, un tensor (muestras, 10, 20, 1) se acoplará a (muestras, 10 * 20 * 1).

GlobalAveragePooling2D hace algo diferente. Aplica la agrupación promedio en las dimensiones espaciales hasta que cada dimensión espacial es una y deja las demás dimensiones sin cambios. En este caso, los valores no se mantienen a medida que se promedian. Por ejemplo, un tensor (muestras, 10, 20, 1) se generaría como (muestras, 1, 1, 1), suponiendo que la segunda y la tercera dimensión fueran espaciales (los canales al final).

El aplanamiento es obvio y simplemente convierte un objeto multidimensional en unidimensional reorganizando los elementos.

Mientras que GlobalAveragePooling es una metodología utilizada para una mejor representación de su vector. Puede ser 1D / 2D / 3D. Utiliza una ventana de analizador que se mueve a través del objeto y agrupa los datos promediando (GlobalAveragePooling) o seleccionando el valor máximo (GlobalMaxPooling). Esencialmente, se requiere relleno para tener los casos de las esquinas en la cuenta.

Ambos se utilizan para tener en cuenta el efecto de la secuenciación de una forma más sencilla.

Puedes probar la diferencia entre Flatten y GlobalPooling por su cuenta haciendo una comparación con numpy, si tiene más confianza

Hacemos una demostración utilizando, como entrada, un lote de imágenes con esta forma. (batch_dim, height, width, n_channel)

import numpy as np
from tensorflow.keras.layers import *

batch_dim, H, W, n_channels = 32, 5, 5, 3
X = np.random.uniform(0,1, (batch_dim,H,W,n_channels)).astype('float32')
  • Flatten acepta como tensor de entrada de al menos 3D. Opera una remodelación de la entrada en 2D con este formato (batch_dim, all the rest). En nuestro caso de 4D, opera una remodelación en este formato (batch_dim, H*W*n_channels).

    np_flatten = X.reshape(batch_dim, -1) # (batch_dim, H*W*n_channels)
    tf_flatten = Flatten()(X).numpy() # (batch_dim, H*W*n_channels)
    
    (tf_flatten == np_flatten).all() # True
    
  • GlobalAveragePooling2D acepta como entrada tensor 4D. Opera la media de las dimensionalidades de altura y ancho para todos los canales. La dimensionalidad resultante es 2D (batch_dim, n_channels). GlobalMaxPooling2D hace lo mismo pero con un funcionamiento máximo.

    np_GlobalAvgPool2D = X.mean(axis=(1,2)) # (batch_dim, n_channels)
    tf_GlobalAvgPool2D = GlobalAveragePooling2D()(X).numpy() # (batch_dim, n_channels)
    
    (tf_GlobalAvgPool2D == np_GlobalAvgPool2D).all() # True
    
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *