より良い感情分類
この演習では、第1章で扱った感情分類の課題に戻ります。
モデルにさらに複雑さを加えて、精度を高めていきます。学習データ上で単語ベクトルを学習するために Embedding レイヤーを使い、長いテキストに対応するために 2 つの LSTM レイヤーを用います。さらに、出力の前に追加の Dense レイヤーを入れます。
もはや単純なモデルではないため、学習には時間がかかる場合があります。そのため、keras.models.Sequential クラスの .load_weights() メソッドで重みを読み込める、事前学習済みモデルを用意しています。モデルは 10 エポックで学習され、その重みは model_weights.h5 に保存されています。
環境には次のモジュールが読み込まれています: Sequential, Embedding, LSTM, Dropout, Dense。
この演習はコースの一部です
Kerasで学ぶ言語モデリングのためのRecurrent Neural Networks (RNNs)
演習の手順
- モデルの最初のレイヤーとして
Embeddingレイヤーを追加します。 - 64 ユニットでシーケンスを
returnする 2 つ目のLSTMレイヤーを追加します。 - 16 ユニットの追加の
Denseレイヤーを追加します。 - モデルを評価して、学習データに対する精度を表示します。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Build and compile the model
model = Sequential()
model.add(____(vocabulary_size, wordvec_dim, trainable=True, input_length=max_text_len))
model.add(____(64, return_sequences=____, dropout=0.2, recurrent_dropout=0.15))
model.add(LSTM(64, return_sequences=False, dropout=0.2, recurrent_dropout=0.15))
model.add(____(16))
model.add(Dropout(rate=0.25))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
# Load pre-trained weights
model.load_weights('model_weights.h5')
# Print the obtained loss and accuracy
print("Loss: {0}\nAccuracy: {1}".format(*model.____(X_test, y_test, verbose=0)))