梯度消失问题
另一类可能出现的梯度问题是梯度消失,也就是梯度趋近于 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.____()