Keras - Prédiction de séries temporelles à l'aide de LSTM RNN
Dans ce chapitre, écrivons un RNN simple basé sur la mémoire à long court terme (LSTM) pour effectuer l'analyse de séquence. Une séquence est un ensemble de valeurs où chaque valeur correspond à une instance particulière de temps. Prenons un exemple simple de lecture d'une phrase. Lire et comprendre une phrase implique de lire le mot dans l'ordre donné et d'essayer de comprendre chaque mot et sa signification dans le contexte donné et enfin de comprendre la phrase dans un sentiment positif ou négatif.
Ici, les mots sont considérés comme des valeurs, et la première valeur correspond au premier mot, la seconde valeur correspond au second mot, etc., et l'ordre sera strictement maintenu. Sequence Analysis est fréquemment utilisé dans le traitement du langage naturel pour trouver l'analyse des sentiments du texte donné.
Créons un modèle LSTM pour analyser les critiques de films IMDB et trouver son sentiment positif / négatif.
Le modèle pour l'analyse de séquence peut être représenté comme ci-dessous -
Les principales caractéristiques du modèle sont les suivantes -
Couche d'entrée utilisant la couche d'incorporation avec 128 fonctionnalités.
La première couche, Dense se compose de 128 unités avec un décrochage normal et un décrochage récurrent réglé à 0,2.
Couche de sortie, Dense se compose d'une unité et d'une fonction d'activation «sigmoïde».
Utilisation binary_crossentropy comme fonction de perte.
Utilisation adam comme Optimizer.
Utilisation accuracy comme métriques.
Utilisez 32 comme taille de lot.
Utilisez 15 comme époques.
Utilisez 80 comme longueur maximale du mot.
Utilisez 2000 comme nombre maximum de mots dans une phrase donnée.
Étape 1: Importez les modules
Importons les modules nécessaires.
from keras.preprocessing import sequence
from keras.models import Sequential
from keras.layers import Dense, Embedding
from keras.layers import LSTM
from keras.datasets import imdb
Étape 2: charger les données
Importons le jeu de données imdb.
(x_train, y_train), (x_test, y_test) = imdb.load_data(num_words = 2000)
Ici,
imdbest un ensemble de données fourni par Keras. Il représente une collection de films et ses critiques.
num_words représentent le nombre maximum de mots dans la critique.
Étape 3: Traitez les données
Modifions l'ensemble de données en fonction de notre modèle, afin qu'il puisse être introduit dans notre modèle. Les données peuvent être modifiées en utilisant le code ci-dessous -
x_train = sequence.pad_sequences(x_train, maxlen=80)
x_test = sequence.pad_sequences(x_test, maxlen=80)
Ici,
sequence.pad_sequences convertir la liste des données d'entrée avec forme, (data) en tableau 2D NumPy de forme (data, timesteps). Fondamentalement, il ajoute un concept de pas de temps dans les données données. Il génère les pas temporels de longueur,maxlen.
Étape 4: créer le modèle
Créons le modèle actuel.
model = Sequential()
model.add(Embedding(2000, 128))
model.add(LSTM(128, dropout = 0.2, recurrent_dropout = 0.2))
model.add(Dense(1, activation = 'sigmoid'))
Ici,
Nous avons utilisé Embedding layercomme couche d'entrée, puis ajouté la couche LSTM. Enfin, unDense layer est utilisé comme couche de sortie.
Étape 5: Compilez le modèle
Compilons le modèle en utilisant la fonction de perte, l'optimiseur et les métriques sélectionnés.
model.compile(loss = 'binary_crossentropy',
optimizer = 'adam', metrics = ['accuracy'])
Étape 6: Former le modèle
LLentraînons le modèle en utilisant fit() méthode.
model.fit(
x_train, y_train,
batch_size = 32,
epochs = 15,
validation_data = (x_test, y_test)
)
L'exécution de l'application produira les informations ci-dessous -
Epoch 1/15 2019-09-24 01:19:01.151247: I
tensorflow/core/platform/cpu_feature_guard.cc:142]
Your CPU supports instructions that this
TensorFlow binary was not co mpiled to use: AVX2
25000/25000 [==============================] - 101s 4ms/step - loss: 0.4707
- acc: 0.7716 - val_loss: 0.3769 - val_acc: 0.8349 Epoch 2/15
25000/25000 [==============================] - 95s 4ms/step - loss: 0.3058
- acc: 0.8756 - val_loss: 0.3763 - val_acc: 0.8350 Epoch 3/15
25000/25000 [==============================] - 91s 4ms/step - loss: 0.2100
- acc: 0.9178 - val_loss: 0.5065 - val_acc: 0.8110 Epoch 4/15
25000/25000 [==============================] - 90s 4ms/step - loss: 0.1394
- acc: 0.9495 - val_loss: 0.6046 - val_acc: 0.8146 Epoch 5/15
25000/25000 [==============================] - 90s 4ms/step - loss: 0.0973
- acc: 0.9652 - val_loss: 0.5969 - val_acc: 0.8147 Epoch 6/15
25000/25000 [==============================] - 98s 4ms/step - loss: 0.0759
- acc: 0.9730 - val_loss: 0.6368 - val_acc: 0.8208 Epoch 7/15
25000/25000 [==============================] - 95s 4ms/step - loss: 0.0578
- acc: 0.9811 - val_loss: 0.6657 - val_acc: 0.8184 Epoch 8/15
25000/25000 [==============================] - 97s 4ms/step - loss: 0.0448
- acc: 0.9850 - val_loss: 0.7452 - val_acc: 0.8136 Epoch 9/15
25000/25000 [==============================] - 95s 4ms/step - loss: 0.0324
- acc: 0.9894 - val_loss: 0.7616 - val_acc: 0.8162Epoch 10/15
25000/25000 [==============================] - 100s 4ms/step - loss: 0.0247
- acc: 0.9922 - val_loss: 0.9654 - val_acc: 0.8148 Epoch 11/15
25000/25000 [==============================] - 99s 4ms/step - loss: 0.0169
- acc: 0.9946 - val_loss: 1.0013 - val_acc: 0.8104 Epoch 12/15
25000/25000 [==============================] - 90s 4ms/step - loss: 0.0154
- acc: 0.9948 - val_loss: 1.0316 - val_acc: 0.8100 Epoch 13/15
25000/25000 [==============================] - 89s 4ms/step - loss: 0.0113
- acc: 0.9963 - val_loss: 1.1138 - val_acc: 0.8108 Epoch 14/15
25000/25000 [==============================] - 89s 4ms/step - loss: 0.0106
- acc: 0.9971 - val_loss: 1.0538 - val_acc: 0.8102 Epoch 15/15
25000/25000 [==============================] - 89s 4ms/step - loss: 0.0090
- acc: 0.9972 - val_loss: 1.1453 - val_acc: 0.8129
25000/25000 [==============================] - 10s 390us/step
Étape 7 - Évaluer le modèle
Évaluons le modèle à l'aide de données de test.
score, acc = model.evaluate(x_test, y_test, batch_size = 32)
print('Test score:', score)
print('Test accuracy:', acc)
L'exécution du code ci-dessus produira les informations ci-dessous -
Test score: 1.145306069601178
Test accuracy: 0.81292