96 votes

Quel est le rôle de la couche TimeDistributed dans Keras ?

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

Je comprends que TimeDistributed "applique une couche à chaque tranche temporelle d'une entrée".

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

En bref, en ce qui concerne la couche LSTM, les couches TimeDistributed et Dense seulement 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 obtenu une forme de sortie de (Aucun, 10, 1) .

Quelqu'un peut-il expliquer la différence entre la couche TimeDistributed et la couche Dense après une couche RNN ?

2 votes

Il ne semble pas y avoir de différence actuellement, aquí une discussion à ce sujet. Je pense que l'intention initiale était de faire une distinction entre les Dense couche aplatissant l'entrée puis la remodelant, ce qui permet de relier différents pas de temps et d'avoir plus de paramètres, et TimeDistributed garder les pas de temps séparés (donc avoir moins de paramètres). Dans votre cas Dense aurait dû avoir 500 paramètres, TimeDistributed seulement 50

0 votes

@gionni Non, il y a le même nombre de paramètres (tous les deux 6). Il n'y a donc pratiquement aucune différence à l'heure actuelle ?

0 votes

Oui exactement, c'est le nombre de paramètres qu'ils auraient s'il y avait une différence. Pour le moment, il n'y en a pas.

98voto

Marcin Możejko Points 19602

Sur keras - alors que la construction 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 time dimension. Cela signifie que si, par exemple, vos données sont 5-dim con (sample, time, width, length, channel) vous pouvez appliquer une couche convolutive en utilisant TimeDistributed (qui s'applique à 4-dim con (sample, width, length, channel) ) le long d'une dimension temporelle (en appliquant la même couche à chaque tranche de temps) afin d'obtenir 5-d sortie.

Le cas avec Dense est qu'en keras à partir de la version 2.0 Dense est appliquée par défaut à la dernière dimension seulement (par exemple, si vous appliquez la méthode Dense(10) à saisir avec la forme (n, m, o, p) vous obtiendrez un résultat avec une forme (n, m, o, 10) ) donc dans votre cas Dense y TimeDistributed(Dense) sont équivalentes.

3 votes

Il y a un exemple d'utilisation de TimeDistributed enveloppant le modèle lui-même. Lorsque cela est appliqué à un Input est-ce que cela fait une différence par rapport à la simple utilisation d'un map du modèle appliqué à une liste qui contient chaque tranche de la Input ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X