目录

0. 我的环境:

Python版本:

只装了以下三个包:

关于调环境

1. 顺藤摸瓜

2. 改源码

3. 输出

4. 原因分析


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

0. 我的环境:

Python版本:

 

只装了以下三个包:

都是本地pip install装上的

 

关于调环境

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

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

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

 

1. 顺藤摸瓜

这和咱的代码不一样:

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

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” 是环境名称,应该换成咱想要调的环境)

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

 

3. 输出

 

4. 原因分析

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

 

 

 

更多推荐