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

博客讨论了《动手学习深度学习》书中train_epoch_ch3部分的代码,指出其中metric计算平均loss和accuracy的方法可能缺乏明确依据。作者观察到训练过程中模型参数的变化和批次数据的差异可能导致结果的不准确。文章通过对比实际训练过程中的波动现象,揭示了模型在不同epoch的震荡行为,特别是在设置num_epochs=80, lr=0.01时,训练表现出现明显震荡,这与书中平均化的描述不符。" 132970067,19974230,ESP32与DS18B20温度监测与微信告警系统,"['微控制器', '温度监测', '物联网应用', '硬件连接', '传感器']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

存疑的一段代码:(../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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值