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?