消失勾配問題
もう一つの勾配の問題は、勾配が消失してゼロに近づく場合です。これは検出が難しいため、解決もより困難です。損失関数が各ステップで改善しないとき、それは勾配がゼロになって重みが更新されなかったからでしょうか? それともモデル自体が学習できていないからでしょうか?
この問題は、長い記憶(長い文)を必要とする場合、RNN モデルでより頻繁に発生します。
この演習では、長めの文を選んだ IMDB データでこの問題を観察します。データは X と y 変数に読み込まれており、Sequential、SimpleRNN、Dense クラスと、matplotlib.pyplot は plt として用意されています。モデルは 100 エポックで事前学習されており、その重みと学習履歴はファイル model_weights.h5 と変数 history に保存されています。
この演習はコースの一部です
Kerasで学ぶ言語モデリングのためのRecurrent Neural Networks (RNNs)
演習の手順
- モデルに
SimpleRNNレイヤーを追加します。 .load_weights()メソッドを使って、事前学習済みの重みをモデルに読み込みます。- 学習データの精度(属性
'acc'にあります)をプロットに追加します。 .show()メソッドを使ってプロットを表示します。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Create the model
model = Sequential()
model.add(____(units=600, input_shape=(None, 1)))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='sgd', metrics=['accuracy'])
# Load pre-trained weights
model.____('model_weights.h5')
# Plot the accuracy x epoch graph
plt.plot(history.history[____])
plt.plot(history.history['val_acc'])
plt.legend(['train', 'val'], loc='upper left')
plt.____()