Add RNN and GRU

Gated Recurrent Units est bien expliqué dans la vidéo ci-dessous :

Cette vidéo a été reprise dans un article en français Comprendre le fonctionnement d’un LSTM et d’un GRU en schémas.

GRU est un LSTM simplifié.

TensorFlow a une couche spécialisée tf.keras.layers.GRU qu’on appelle de la même façon que LSTM.

Laurence Moroney qui présente le cours en ligne, Natural Language Processing in TensorFlow sur la plateforme deeplearning.ai propose un notebook GCP qui illustre GRU. Voir : Course 3 – Week 3 – Lesson 2d.ipynb.

Ce notebook montre que GRU, du point de vue du code, est identique aux autres solutions (LSTM ou convolutions).

Avec GRU

model = tf.keras.Sequential([
    tf.keras.layers.Embedding(vocab_size, embedding_dim, input_length=max_length),
    tf.keras.layers.Bidirectional(tf.keras.layers.GRU(32)),
    tf.keras.layers.Dense(6, activation='relu'),
    tf.keras.layers.Dense(1, activation='sigmoid')
])
model.compile(loss='binary_crossentropy',optimizer='adam',metrics=['accuracy'])
model.summary()

Avec LSTM

# Model Definition with LSTM
model = tf.keras.Sequential([
    tf.keras.layers.Embedding(vocab_size, embedding_dim, input_length=max_length),
    tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(32)),
    tf.keras.layers.Dense(6, activation='relu'),
    tf.keras.layers.Dense(1, activation='sigmoid')
])
model.compile(loss='binary_crossentropy',optimizer='adam',metrics=['accuracy'])
model.summary()

Avec Conv1D

# Model Definition with Conv1D
model = tf.keras.Sequential([
    tf.keras.layers.Embedding(vocab_size, embedding_dim, input_length=max_length),
    tf.keras.layers.Conv1D(128, 5, activation='relu'),
    tf.keras.layers.GlobalAveragePooling1D(),
    tf.keras.layers.Dense(6, activation='relu'),
    tf.keras.layers.Dense(1, activation='sigmoid')
])
model.compile(loss='binary_crossentropy',optimizer='adam',metrics=['accuracy'])
model.summary()