J'essaie de comprendre ce que fait le wrapper TimeDistributed dans Keras.
Je comprends que TimeDistributed "applique un calque à chaque tranche temporelle d'une entrée".
Mais j'ai expérimenté et obtenu des résultats incompréhensibles.
En bref, en ce qui concerne la couche LSTM, les couches TimeDistributed et Just Dense produisent les mêmes résultats.
model = Sequential()
model.add(LSTM(5, input_shape = (10, 20), return_sequences = True))
model.add(TimeDistributed(Dense(1)))
print(model.output_shape)
model = Sequential()
model.add(LSTM(5, input_shape = (10, 20), return_sequences = True))
model.add((Dense(1)))
print(model.output_shape)
Pour les deux modèles, j'ai obtenu une forme de sortie de (Aucun, 10, 1).
Quelqu'un peut-il expliquer la différence entre les couches TimeDistributed et Dense après une couche RNN?
Dans keras
- lors de la création d'un modèle séquentiel - généralement la deuxième dimension (une après la dimension de l'échantillon) - est liée à une dimension time
. Cela signifie que si, par exemple, vos données sont 5-dim
Avec (sample, time, width, length, channel)
, Vous pouvez appliquer une couche convolutionnelle à l'aide de TimeDistributed
(applicable à 4-dim
Avec (sample, width, length, channel)
) Le long d'une dimension temporelle (en appliquant le même calque à chaque tranche temporelle) afin d'obtenir une sortie 5-d
.
Le cas de Dense
est que, dans keras
à partir de la version 2.0, Dense
s’applique par défaut à la dernière dimension uniquement (par exemple, si vous appliquez Dense(10)
à la saisie avec shape (n, m, o, p)
vous obtiendrez une sortie avec shape (n, m, o, 10)
), donc dans votre cas Dense
et TimeDistributed(Dense)
sont équivalents.