La entrada de la capa densa de Keras no se aplana.

Este es mi código de prueba:

from keras import layers input1 = layers.Input((2,3)) output = layers.Dense(4)(input1) print(output) 

La salida es:

  

Pero, ¿qué pasa?

La documentación dice:

Nota: si la entrada a la capa tiene un rango mayor que 2, entonces se aplana antes del producto de punto inicial con el kernel.

¿Mientras que la salida se remodela?

Actualmente, al contrario de lo que se ha indicado en la documentación, la capa Dense se aplica en el último eje del tensor de entrada :

Contrariamente a la documentación, en realidad no la aplanamos. Se aplica en el último eje de forma independiente.

En otras palabras, si se aplica una capa Dense con m unidades en un tensor de forma de entrada (n_dim1, n_dim2, ..., n_dimk) tendría una forma de salida de (n_dim1, n_dim2, ..., m) .


Como nota al margen: esto hace que TimeDistributed(Dense(...)) y Dense(...) equivalentes entre sí.


Otra nota al margen: tenga en cuenta que esto tiene el efecto de pesos compartidos. Por ejemplo, considera esta red de juguetes:

 model = Sequential() model.add(Dense(10, input_shape=(20, 5))) model.summary() 

El resumen del modelo:

 _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= dense_1 (Dense) (None, 20, 10) 60 ================================================================= Total params: 60 Trainable params: 60 Non-trainable params: 0 _________________________________________________________________ 

Como puedes ver, la capa Dense tiene solo 60 parámetros. ¿Cómo? Cada unidad en la capa Dense está conectada a los 5 elementos de cada fila en la entrada con los mismos pesos , por lo tanto, 10 * 5 + 10 (bias params per unit) = 60 .