Quel est le rôle de la couche distribuée dans le temps dans Keras?

j'essaie de comprendre ce que fait TimeDistributed wrapper dans Keras.

- je obtenir TimeDistributed "s'applique une couche à chaque tranche temporelle d'une entrée."

mais j'ai fait quelques expériences et j'ai obtenu les résultats que je ne peux pas comprendre.

en bref, en relation avec la couche LSTM, la couche distribuée dans le temps et la couche juste Dense donnent 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 la forme de sortie de (Aucun, 10, 1).

Peut quelqu'un explique-t-il la différence entre la couche distribuée dans le temps et la couche Dense après une couche RNN?

20
demandé sur Marcin Możejko 2017-11-15 13:57:45

1 réponses

keras - lors de la construction d'un modèle séquentiel - habituellement la deuxième dimension (une après la dimension de l'échantillon) - est liée à un time dimension. Cela signifie que si par exemple, vos données sont 5-dim(sample, time, width, length, channel) vous pouvez appliquer une couche de convolution en utilisant TimeDistributed (qui s'applique à 4-dim(sample, width, length, channel)) le long d'une dimension de temps (en appliquant la même couche à chaque tranche de temps) afin d'obtenir 5-d sortie.

L'affaire Dense que keras à partir de la version 2.0 Dense est par défaut appliqué uniquement à la dernière dimension (par exemple si vous appliquez Dense(10) à l'entrée de la forme (n, m, o, p) vous obtiendrez de sortie avec la forme (n, m, o, 10)) donc dans ton cas Dense et TimeDistributed(Dense) sont équivalents.

20
répondu Marcin Możejko 2017-11-15 14:04:00