Couches Dense et TimeDistributed

Traduction automatique avec Keras

Thushan Ganegedara

Data Scientist and Author

Introduction à la couche Dense

  • Prend un vecteur d'entrée et le convertit en prédiction probabiliste.
    • y = Poids.x + Biais

Poids et biais

Traduction automatique avec Keras

Comprendre la couche Dense

Définir et utiliser une couche Dense

dense = Dense(3, activation='softmax')
inp = Input(shape=(3,))
pred = dense(inp)
model = Model(inputs=inp, outputs=pred)

Définir une couche Dense avec une initialisation personnalisée

from tensorflow.keras.initializers import RandomNormal
init = RandomNormal(mean=0.0, stddev=0.05, seed=6000)
dense = Dense(3, activation='softmax', 
             kernel_initializer=init, bias_initializer=init)
Traduction automatique avec Keras

Entrées et sorties de la couche Dense

  • Couche Dense softmax
    • Prend un tableau (taille du lot, taille d'entrée)
      • p. ex. x = [[1, 6, 8], [8, 9, 10]] # un tableau 2x3
    • Produit un tableau (taille du lot, nb de classes)
      • p. ex. Nombre de classes = 4
      • p. ex. y = [[0.1, 0.3, 0.4, 0.2], [0.2, 0.5, 0.1, 0.2]] # un tableau 2x4
    • La sortie pour chaque échantillon est une distribution de probabilité sur les classes
      • Somme à 1 le long des colonnes
    • Classe de chaque échantillon via np.argmax(y, axis=-1)
      • p. ex. np.argmax(y,axis=-1) donne [2,1]
Traduction automatique avec Keras

Comprendre la couche TimeDistributed

  • Permet aux couches Dense de traiter des entrées sérielles (séries temporelles)
dense_time = TimeDistributed(Dense(3, activation='softmax'))
inp = Input(shape=(2, 3))
pred = dense_time(inp)
model = Model(inputs=inp, outputs=pred)
Traduction automatique avec Keras

Entrées et sorties de la couche TimeDistributed

  • Prend un tableau (taille du lot, longueur de séquence, taille d'entrée)
x = [[[1, 6], [8, 2], [1, 2]], 
    [[8, 9], [10, 8], [1, 0]]] # un tableau 2x3x2
  • Produit un tableau (taille du lot, longueur de séquence, nb de classes)
    • p. ex. Nombre de classes = 3
y = [[[0.1, 0.5, 0.4], [0.8, 0.1, 0.1], [0.6, 0.2, 0.2]], 
     [[0.2, 0.5, 0.3], [0.2, 0.5, 0.3], [0.2, 0.8, 0.0]]] # un tableau 2x3x3
  • La sortie pour chaque échantillon est une distribution de probabilité sur les classes
  • Classe de chaque échantillon via np.argmax(y, axis=-1)
Traduction automatique avec Keras

Découper les données selon le temps

y = [[[0.1, 0.5, 0.4], [0.8, 0.1, 0.1], [0.6, 0.2, 0.2]], 
     [[0.2, 0.5, 0.3], [0.2, 0.5, 0.3], [0.2, 0.8, 0.0]]] # un tableau 2x3x3
classes = np.argmax(y, axis=-1) # un tableau 2 x 3

Itérer sur des données réparties dans le temps

for t in range(3):
  # Obtenir la tranche temporelle t de y et classes
  for prob, c in zip(y[:,t,:], classes[:,t]):
     print("Prob: ", prob, ", Class: ", c)
Prob:  [0.1 0.5 0.4] , Class:  1
Prob:  [0.2 0.5 0.3] , Class:  1
Prob:  [0.8 0.1 0.1] , Class:  0
...
Traduction automatique avec Keras

Passons à la pratique !

Traduction automatique avec Keras

Preparing Video For Download...