在深度学习模型训练中,随着模型参数的迭代,损失函数也会不断变化。此时可画出图像以了解变化趋势。以Kaggle比赛狗的品种识别为例,针对动手学深度学习9.13.5的代码段,进行如下修改,略去重复代码:
def train(net, train_iter, valid_iter, num_epochs, lr, wd, ctx, lr_period,
lr_decay):
'''略去'''
# 记录训练误差和验证误差
ts = []
vs = []
for epoch in range(num_epochs):
'''略去'''
for batch_i, (X, y) in enumerate(train_iter): # 修改以获取当前样本数
'''略去'''
if (batch_i + 1) * batch_size % 20 == 0:
ts.append(train_l_sum / n) # 每20个样本记录下当前误差
if valid_iter is not None:
vs.append(evaluate_loss(valid_iter, net, ctx))
'''略去'''
# 画出训练误差和验证误差曲线
d2l.set_figsize()
d2l.plt.plot(np.linspace(0, num_epochs, len(ls)), ls, label='train loss')
if vs:
d2l.plt.plot(np.linspace(0, num_epochs, len(vs)), vs, label='valid loss')
d2l.plt.xlabel('epoch')
d2l.plt.ylabel('loss')
d2l.plt.legend()
d2l.plt.show()
设置num_epochs为2,即可得出针对验证集的曲线图: