Couches de reshaping (TimeDistributed)
Les couches TimeDistributed sont utilisées dans les réseaux de neurones pour appliquer une même opération sur chaque pas temporel d’une séquence de manière indépendante. L’objectif est de traiter chaque élément d’une séquence séparément tout en conservant la structure temporelle globale.
Le principe consiste à envelopper une autre couche (fully connected, convolutionnelle, etc.) afin que cette couche soit appliquée individuellement à chaque pas de la séquence, sans partager l’information entre les étapes. Cela permet de traiter des séquences de longueur variable ou fixe tout en gardant la cohérence temporelle.
Les couches TimeDistributed sont utilisées dans les architectures sequence-to-sequence, la classification vidéo, la reconnaissance de gestes et toute tâche nécessitant un traitement indépendant des éléments d’une séquence avant des couches récurrentes ou de pooling.
En résumé, les couches TimeDistributed permettent d’appliquer une opération de manière indépendante sur chaque pas d’une séquence, facilitant le traitement des séquences tout en conservant leur structure temporelle.
Fonctions :
-
TimeDistributed()
La couche TimeDistributed applique une couche spécifique de manière indépendante à chaque pas de temps d’une séquence d’entrée. Elle est utilisée pour traiter séquentiellement chaque élément d’une séquence, comme appliquer une couche Dense ou Conv2D sur chaque frame d’une séquence vidéo.
Importation :
from tensorflow.keras.models import Sequential from tensorflow.keras.layers import TimeDistributed, Dense import numpy as npAttributs :
Paramètre Type Description Valeur par défaut layerLayer Couche à appliquer indépendamment à chaque pas de temps. — Exemple de code :
from tensorflow.keras.models import Sequential from tensorflow.keras.layers import TimeDistributed, Dense import numpy as np # Données simulées : batch de 2 séquences, chacune de longueur 3, vecteurs de taille 4 X = np.random.rand(2, 3, 4) # Modèle avec TimeDistributed appliquant une couche Dense à chaque pas de temps model = Sequential() model.add(TimeDistributed(Dense(5), input_shape=(3, 4))) # Passage des données dans la couche output = model.predict(X) print("Shape avant :", X.shape) # (2, 3, 4) print("Shape après :", output.shape) # (2, 3, 5)
Explication du code :
Importation des bibliothèques
On importe la couche `TimeDistributed`, la couche `Dense` ainsi que les modules nécessaires.Création des données
Les données sont un batch de 2 séquences, chaque séquence contient 3 vecteurs de taille 4.Définition du modèle
La couche `TimeDistributed` applique une couche Dense de sortie 5 à chaque vecteur de la séquence indépendamment.Exécution
Le tenseur passe d’une forme (2, 3, 4) à (2, 3, 5), la couche Dense étant appliquée à chaque pas de temps.