李沐《动手学习深度学习》train_epoch_ch3问题

存疑的一段代码:(../lib/python3.9/site-packages/d2l/torch.py)

    for X, y in train_iter:
        # Compute gradients and update parameters
        y_hat = net(X)
        l = loss(y_hat, y)
        if isinstance(updater, torch.optim.Optimizer):
            # Using PyTorch in-built optimizer & loss criterion
            updater.zero_grad()
            l.mean().backward()
            updater.step()
        else:
            # Using custom built optimizer & loss criterion
            l.sum().backward()
            updater(X.shape[0])
        metric.add(float(l.sum()), accuracy(y_hat, y), y.numel())

在上面的代码中,metric存储每一个batch的loss、accuracy,在一轮(epoch)循环结束后计算平均值,在这个过程中,model参数是在不断变化的,每一批次数据也是不一样的,最后计算平均值作为整个一轮(epoch)的loss、accuracy,这个计算方面没有什么依据。并且从训练的表现上也存在差异。

在“4.1多层感知机的从零开始实现”一节中,训练图如下:

num_epochs, lr = 10, 0.1

 

 

在整个训练集上,表现并不是这么良好,这里的曲线是平均化了,看不到“震荡”现象和不稳定的现象,并且整体的loss也没有局部loss平均后的好,实际表现如下:

在第epoch=10出现震荡

在第epoch=5出现震荡

 

当 num_epochs, lr = 80, 0.01时,训练表现如下:

第一次epoch的表现

80次epoch的表现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值