梯度消失問題
另一種可能的梯度問題是梯度消失,也就是趨近於 0。這個問題更難解,因為不容易偵測。如果損失函式沒有在每一步都改善,是因為梯度變成 0、權重因此沒有更新?還是因為模型本身學不到東西?
這個問題在需要長期記憶(較長句子)的 RNN 模型中更常見。
在本練習中,你會在較長句子的 IMDB 資料上觀察這個問題。資料已載入到變數 X 與 y,並且類別 Sequential、SimpleRNN、Dense 以及 matplotlib.pyplot(命名為 plt)也已可用。模型已預先訓練 100 個 epoch,權重與訓練歷程分別儲存在檔案 model_weights.h5 與變數 history 中。
本練習屬於課程
使用 Keras 建立語言模型的循環神經網路(RNN)
練習說明
- 在模型中加入一個
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.____()