用 dropout 对抗过拟合
神经网络的一个常见问题是倾向于对训练数据过拟合。也就是说,训练集上的评分指标(如 R\(^2\) 或准确率)很高,但在测试集和验证集上很低,模型实际上在拟合训练数据中的噪声。
我们可以通过使用 dropout 来预防过拟合。训练阶段会随机"丢弃"部分神经元,从而避免网络去拟合训练数据中的噪声。keras 提供了可用的 Dropout 层。需要设置 dropout 比例,即训练时被丢弃连接的比例。在 Dropout() 层中,这个比例用 0 到 1 之间的小数表示。
本模型将回到使用均方误差损失函数。
本练习是课程的一部分
Python 金融机器学习
练习说明
- 在模型的第一个 Dense 层之后添加一个 dropout 层(
Dropout()),dropout 比例设为 20%(0.2)。 - 在
.compile()中使用adam优化器和mse损失函数。 - 将模型拟合到
scaled_train_features和train_targets,训练 25 个 epoch。
交互式实操练习
通过完成这段示例代码来试试这个练习。
from keras.layers import Dropout
# Create model with dropout
model_3 = Sequential()
model_3.add(Dense(100, input_dim=scaled_train_features.shape[1], activation='relu'))
model_3.add(____)
model_3.add(Dense(20, activation='relu'))
model_3.add(Dense(1, activation='linear'))
# Fit model with mean squared error loss function
model_3.compile(optimizer=____, loss=____)
history = model_3.fit(____, ____, epochs=____)
plt.plot(history.history['loss'])
plt.title('loss:' + str(round(history.history['loss'][-1], 6)))
plt.show()