Saltar al contenido

¿Cómo funciona la capa Flatten en Keras?

Esta división ha sido probado por nuestros expertos así garantizamos la exactitud de este tutorial.

Solución:

Él Flatten() El operador desenrolla los valores que comienzan en la última dimensión (al menos para Theano, que es “canales primero”, no “canales últimos” como TF. No puedo ejecutar TensorFlow en mi entorno). Esto es equivalente a numpy.reshape con orden ‘C’:

‘C’ significa leer/escribir los elementos usando un orden de índice similar a C, con el índice del último eje cambiando más rápido, de regreso al índice del primer eje cambiando más lento.

Aquí hay un ejemplo independiente que ilustra Flatten operador con la API funcional de Keras. Debería poder adaptarse fácilmente a su entorno.

import numpy as np
from keras.layers import Input, Flatten
from keras.models import Model
inputs = Input(shape=(3,2,4))

# Define a model consisting only of the Flatten operation
prediction = Flatten()(inputs)
model = Model(inputs=inputs, outputs=prediction)

X = np.arange(0,24).reshape(1,3,2,4)
print(X)
#[[[[ 0  1  2  3]
#   [ 4  5  6  7]]
#
#  [[ 8  9 10 11]
#   [12 13 14 15]]
#
#  [[16 17 18 19]
#   [20 21 22 23]]]]
model.predict(X)
#array([[  0.,   1.,   2.,   3.,   4.,   5.,   6.,   7.,   8.,   9.,  10.,
#         11.,  12.,  13.,  14.,  15.,  16.,  17.,  18.,  19.,  20.,  21.,
#         22.,  23.]], dtype=float32)

Aplanar un tensor significa eliminar todas las dimensiones excepto una.

Una capa Flatten en Keras reforma el tensor para que tenga una forma que sea igual al número de elementos contenidos en el tensor.

Esto es lo mismo que hacer un 1d-array de elementos

Por ejemplo, en el modelo VGG16 puede que le resulte fácil de entender:

>>> model.summary()
Layer (type)                     Output Shape          Param #
================================================================
vgg16 (Model)                    (None, 4, 4, 512)     14714688
________________________________________________________________
flatten_1 (Flatten)              (None, 8192)          0
________________________________________________________________
dense_1 (Dense)                  (None, 256)           2097408
________________________________________________________________
dense_2 (Dense)                  (None, 1)             257
===============================================================

Observe cómo es la forma de la capa flatten_1 (Ninguno, 8192), donde 8192 es en realidad 4*4*512.


PD, Ninguno significa ninguna dimensión (o dimensión dinámica), pero normalmente puede leerlo como 1. Puede encontrar más detalles aquí.

Es secuencial como 24*24*32 y remodelarlo como se muestra en el siguiente código.

def batch_flatten(x):
    """Turn a nD tensor into a 2D tensor with same 0th dimension.
    In other words, it flattens each data samples of a batch.
    # Arguments
        x: A tensor or variable.
    # Returns
        A tensor.
    """
    x = tf.reshape(x, tf.stack([-1, prod(shape(x)[1:])]))
    return x

Te mostramos reseñas y calificaciones

Nos puedes añadir valor a nuestro contenido informacional dando tu veteranía en las interpretaciones.

¡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 *