[已解决]-常见d2l.train_ch3报错:AttributeError: model ‘d2l.torch‘ has no attribute ‘train_ch3‘-动手学深度学习

目录

0. 我的环境:

Python版本:

只装了以下三个包:

关于调环境

1. 顺藤摸瓜

2. 改源码

3. 输出

4. 原因分析


本方法同样适用遇到以下报错(d2l-0.17.0)):RuntimeError: grad can be implicitly created only for scalar outputs

0. 我的环境:

Python版本:

d10b04191336489c8e3cd170df162278.png

只装了以下三个包:

8725e0a235cb4707b54f529fcedc54eb.png

都是本地pip install装上的

关于调环境

  • 其他版本的d2l也会遇到报错,推荐删除其他版本的d2l包,pip安装对应版本(d2l-0.17.0),亲测有效

可参考:《动手学深度学习》笔记1——Pytorch虚拟环境搭建-CSDN博客

tips:删除包可以使用pip uninstall package-name,不一定非得用conda remove package-name

1. 顺藤摸瓜

e4905a0188a04042b999d38904ff17db.png

ec1aa02272424bc6bc63388d43ad857d.png

这和咱的代码不一样:

510d5545ede2411b988d4d2779b56e38.png

少了个mean求均值,下面也有错,咱直接改源码,整块复制粘贴过去:

12626a605903488898d43eae2eb6bd52.png

for X, y in train_iter:  # 扫一遍数据
        # 计算梯度并更新参数
        y_hat = net(X)
        l = loss(y_hat, y)
        if isinstance(updater, torch.optim.Optimizer):  # 检查变量updater是否是torch.optim.Optimizer的实例
            # 使用PyTorch内置的优化器和损失函数
            updater.zero_grad()  # 先把梯度设成零
            l.mean().backward()  # 计算梯度
            updater.step()       # 更新参数
        else:
            # 使用定制的优化器和损失函数(也就是咱这里从头开始实现的情况)
            l.sum().backward()
            updater(X.shape[0])  # X.shape[0] 给出当前批次的样本数量
        metric.add(float(l.sum()), accuracy(y_hat, y), y.numel())  # (训练损失总和、训练准确度总和、样本数)

2. 改源码

拿上面的替换下面(源码里)的:(默认路径如下)

anaconda3 >envs > d2l-1 > Lib > site-packages >d21> torch.py

  • (这里的 “d2l-1” 是环境名称,应该换成咱想要调的环境)

813500adecee40e1abb6f5c57b14bda8.png

运行看看,成功啦!看看输出↓

3. 输出

8646d9a7677447adb997d4a8053df2df.png

4. 原因分析

  • 咱看的视频课程还是2021年版本的,jupyter代码是新下载的(是正确的),而d2l包的源代码还是21年老版本的,有很多问题还没改过来
  • 当然还有一种可能,这个train_epoch_ch3()函数在后面用不到,后面会从新定义更泛用的train_epoch()函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值