Keras-LSTMRNNを使用した時系列予測

この章では、シーケンス分析を行うための単純な長短期記憶(LSTM)ベースのRNNを作成しましょう。シーケンスは、各値が特定の時間インスタンスに対応する値のセットです。文を読む簡単な例を考えてみましょう。文を読んで理解するには、与えられた順序で単語を読み、与えられた文脈で各単語とその意味を理解しようとし、最後に肯定的または否定的な感情で文を理解する必要があります。

ここでは、単語を値と見なし、最初の値が最初の単語に対応し、2番目の値が2番目の単語に対応するなど、順序が厳密に維持されます。 Sequence Analysis 与えられたテキストの感情分析を見つけるために自然言語処理で頻繁に使用されます。

LSTMモデルを作成して、IMDBの映画レビューを分析し、そのポジティブ/ネガティブな感情を見つけましょう。

配列分析のモデルは次のように表すことができます-

モデルのコア機能は次のとおりです-

  • 128の機能を備えた埋め込みレイヤーを使用した入力レイヤー。

  • 最初のレイヤーであるDenseは、通常のドロップアウトと繰り返しのドロップアウトが0.2に設定された128ユニットで構成されています。

  • 出力層、高密度は、1ユニットと「シグモイド」活性化関数で構成されています。

  • 使用する binary_crossentropy 損失関数として。

  • 使用する adam オプティマイザーとして。

  • 使用する accuracy メトリックとして。

  • バッチサイズとして32を使用します。

  • エポックとして15を使用します。

  • 単語の最大長として80を使用します。

  • 特定の文の最大単語数として2000を使用します。

ステップ1:モジュールをインポートする

必要なモジュールをインポートしましょう。

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

ステップ2:データをロードする

imdbデータセットをインポートしましょう。

(x_train, y_train), (x_test, y_test) = imdb.load_data(num_words = 2000)

ここに、

  • imdbKerasが提供するデータセットです。それは映画とそのレビューのコレクションを表しています。

  • num_words レビュー内の単語の最大数を表します。

ステップ3:データを処理する

モデルに応じてデータセットを変更し、モデルに入力できるようにします。以下のコードでデータを変更できます−

x_train = sequence.pad_sequences(x_train, maxlen=80) 
x_test = sequence.pad_sequences(x_test, maxlen=80)

ここに、

sequence.pad_sequences 入力データのリストを形状で変換し、 (data) 形状の2DNumPy配列に (data, timesteps)。基本的に、それは与えられたデータにタイムステップの概念を追加します。長さのタイムステップを生成し、maxlen

ステップ4:モデルを作成する

実際のモデルを作成してみましょう。

model = Sequential() 
model.add(Embedding(2000, 128)) 
model.add(LSTM(128, dropout = 0.2, recurrent_dropout = 0.2)) 
model.add(Dense(1, activation = 'sigmoid'))

ここに、

使用しました Embedding layer入力レイヤーとして、LSTMレイヤーを追加しました。最後に、Dense layer 出力層として使用されます。

ステップ5:モデルをコンパイルする

選択した損失関数、オプティマイザー、およびメトリックを使用してモデルをコンパイルしましょう。

model.compile(loss = 'binary_crossentropy', 
   optimizer = 'adam', metrics = ['accuracy'])

ステップ6:モデルをトレーニングする

を使用してモデルをトレーニングしましょう fit() 方法。

model.fit(
   x_train, y_train, 
   batch_size = 32, 
   epochs = 15, 
   validation_data = (x_test, y_test)
)

アプリケーションを実行すると、以下の情報が出力されます-

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

ステップ7-モデルを評価する

テストデータを使用してモデルを評価しましょう。

score, acc = model.evaluate(x_test, y_test, batch_size = 32) 
   
print('Test score:', score) 
print('Test accuracy:', acc)

上記のコードを実行すると、以下の情報が出力されます-

Test score: 1.145306069601178 
Test accuracy: 0.81292