with tutorial programming machine learning guide for examples machine-learning tensorflow neural-network deep-learning keras

machine-learning - tutorial - tensorflow programming



Papel de "aplanar" en Keras (3)

si lee una documentación de Dense aquí verá que:

Dense(16, input_shape=(5,3))

daría como resultado una red Dense con 3 entradas y 16 salidas que se aplicarían independientemente para cada uno de los 5 pasos. Entonces, si D(x) transforma el vector tridimensional en un vector de 16 d, lo que obtendrá como salida de su capa sería una secuencia de vectores: [D(x[0,:], D(x[1,:],..., D(x[4,:]] con forma (5, 16) . Para tener el comportamiento que especifique, primero puede Flatten su entrada a un vector de 15-d y luego aplicar Dense :

model = Sequential() model.add(Flatten(input_shape=(3, 2))) model.add(Dense(16)) model.add(Activation(''relu'')) model.add(Dense(4)) model.compile(loss=''mean_squared_error'', optimizer=''SGD'')

EDITAR: como algunas personas lucharon por entender, aquí tienes una imagen explicativa:

Estoy tratando de entender el papel de la función Flatten en Keras. A continuación se muestra mi código, que es una red simple de dos capas. Toma datos de forma bidimensionales (3, 2) y genera datos de forma unidimensionales (1, 4):

model = Sequential() model.add(Dense(16, input_shape=(3, 2))) model.add(Activation(''relu'')) model.add(Flatten()) model.add(Dense(4)) model.compile(loss=''mean_squared_error'', optimizer=''SGD'') x = np.array([[[1, 2], [3, 4], [5, 6]]]) y = model.predict(x) print y.shape

Esto imprime que y tiene forma (1, 4). Sin embargo, si Flatten línea Flatten , imprime que y tiene forma (1, 3, 4).

No entiendo esto Desde mi comprensión de las redes neuronales, la función model.add(Dense(16, input_shape=(3, 2))) está creando una capa oculta completamente conectada, con 16 nodos. Cada uno de estos nodos está conectado a cada uno de los elementos de entrada 3x2. Por lo tanto, los 16 nodos en la salida de esta primera capa ya son "planos". Entonces, la forma de salida de la primera capa debe ser (1, 16). Luego, la segunda capa toma esto como una entrada y genera datos de forma (1, 4).

Entonces, si la salida de la primera capa ya es "plana" y tiene forma (1, 16), ¿por qué necesito aplanarla aún más?

¡Gracias!


Así es como funciona Flatten convirtiendo Matrix a matriz única.


lectura corta:

Aplanar un tensor significa eliminar todas las dimensiones excepto una. Esto es exactamente lo que hace la capa Flatten.

larga lectura:

Si tomamos en consideración el modelo original (con la capa Flatten) creado, podemos obtener el siguiente resumen del modelo:

Layer (type) Output Shape Param # ================================================================= D16 (Dense) (None, 3, 16) 48 _________________________________________________________________ A (Activation) (None, 3, 16) 0 _________________________________________________________________ F (Flatten) (None, 48) 0 _________________________________________________________________ D4 (Dense) (None, 4) 196 ================================================================= Total params: 244 Trainable params: 244 Non-trainable params: 0

Para este resumen, la siguiente imagen tendrá un poco más de sentido en los tamaños de entrada y salida para cada capa.

La forma de salida para la capa Flatten como puede leer es (None, 48) . Aquí está el consejo. Debe leerlo (1, 48) o (2, 48) o ... o (16, 48) ... o (32, 48) , ...

De hecho, None en esa posición significa cualquier tamaño de lote. Para las entradas a recuperar, la primera dimensión significa el tamaño del lote y la segunda significa el número de características de entrada.

El papel de la capa Flatten en Keras es súper simple:

Una operación de aplanamiento en un tensor da nueva forma al tensor para que tenga la forma que sea igual al número de elementos contenidos en el tensor sin incluir la dimensión del lote .

Nota: Utilicé el método model.summary() para proporcionar la forma de salida y los detalles de los parámetros.