python tensorflow machine-learning keras keras-layer

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



tensorflow machine-learning (1)

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 .

Actualizar. Aquí hay una ilustración visual del ejemplo anterior:

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:

<tf.Tensor ''dense_2/add:0'' shape=(?, 2, 4) dtype=float32>

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?