当前位置:网站首页>【深度学习】今日bug(8月2)
【深度学习】今日bug(8月2)
2022-08-03 15:52:00 【阿阿阿阿锋】
前言
博主主页:阿阿阿阿锋的主页_CSDN
代码来源:《动手学深度学习》
今天遇到了一个报错提示:TypeError: 'method' object is not iterable
。
意思是:类型错误:“方法”对象不可迭代。
然后对mxnet自动求梯度的了解更清楚了一点。
一. TypeError: ‘method’ object is not iterable
1. 错误提示 && 部分代码
错误提示:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-40-9ae7d7a05a23> in <module>
4 # 从数值标签到文本标签
5 true_labels = d2l.get_fashion_mnist_labels(y.asnumpy())
----> 6 pred_labels = d2l.get_fashion_mnist_labels(net(X).argmax(axis=1).asnumpy)
7 titles = [true + '\n' + pred for true, pred in zip(true_labels, pred_labels)]
8
D:\anaconda\lib\site-packages\d2lzh\utils.py in get_fashion_mnist_labels(labels)
183 text_labels = ['t-shirt', 'trouser', 'pullover', 'dress', 'coat',
184 'sandal', 'shirt', 'sneaker', 'bag', 'ankle boot']
--> 185 return [text_labels[int(i)] for i in labels]
186
187
TypeError: 'method' object is not iterable
通常错误提示还是非常有用的,可以有效地帮助我们地定位bug的位置。
部分代码段:
for X, y in test_iter:
break
# 从数值标签到文本标签
true_labels = d2l.get_fashion_mnist_labels(y.asnumpy())
pred_labels = d2l.get_fashion_mnist_labels(net(X).argmax(axis=1).asnumpy)
titles = [true + '\n' + pred for true, pred in zip(true_labels, pred_labels)]
d2l.show_fashion_mnist(X[0:9], titles[0:9])
2. 消灭bug
我看着这个报错,当时就懵了,没看懂它啥意思。后来仔细检查代码发现,原来是调用一个函数
asnumpy
时,函数名后面的()
掉了。于是原本我想调用的函数,被认作了一个对象,作为参数传递给了另一个函数,然后进一步引发了类型错误(TypeError
)。
加上缺失的
()
后,一切正常。程序跑起来了:
二. 自动求梯度,求函数值了吗?
代码:
num_epochs = 3
lr = 0.1
# 用于训练模型
def train_ch3(net, train_iter, test_iter, loss, num_epochs, batch_size, params=None, lr=None, trainer=None):
for epoch in range(num_epochs):
train_l_sum, train_acc_sum, n = 0.0, 0.0, 0
for X, y in train_iter:
with autograd.record():
y_hat = net(X)
l = loss(y_hat, y).sum()
l.backward()
d2l.sgd(params, lr, batch_size)
y = y.astype('float32')
train_l_sum += l.asscalar()
train_acc_sum += (y_hat.argmax(axis=1) == y).sum().asscalar()
n += y.size
test_acc = evaluate_accuracy(test_iter, net)
print('epoch %d, loss %.4f, train acc %.3f, test acc %.3f' % (epoch + 1, train_l_sum / n, train_acc_sum / n, test_acc))
我对于这段代码一直有些困惑,主要在
train_l_sum += l.asscalar()
这一语句。这里使用了变量l
的值,用于计算模型在训练集上的损失。但是l
的值是哪里来的?
我们看下面这段代码:
%matplotlib inline
import d2lzh as d2l
from mxnet import gluon, autograd, nd
X = nd.array([2, 3, 4])
X.attach_grad()
with autograd.record():
y = X ** 2
# y.backward()
y, X.grad
输出:
原来在使用mxnet的自动求梯度的过程中,在
y = X ** 2
这一步,也就已经求出了y的值。它不仅仅是表示要求导的一个函数表达式,同时也是一个赋值语句。
小结
在一些小错误费上很多时间,真的划不来。
下次不要再这么马虎了啊。
经常有一些问题,想明白了之后,只感觉之前自己好傻。
边栏推荐
- 指令重排以及案例
- 【Unity入门计划】基本概念(8)-瓦片地图 TileMap 01
- How Navicat connects to MySQL on a remote server
- mysql delete 执行报错:You can‘t specify target table ‘doctor_info‘ for update in FROM clause
- ReentrantLock详解
- 开源一夏 | 阿里云物联网平台之极速体验
- 2021年12月电子学会图形化三级编程题解析含答案:分身术
- 【Unity入门计划】基本概念(7)-Input Manager&Input类
- 泰山OFFICE技术讲座:文字边框高度研究
- Small Tools(4) 整合Seata1.5.2分布式事务
猜你喜欢
聊聊这个SaaS领域爆火的话题
How Navicat connects to MySQL on a remote server
STM32的HAL和LL库区别和性能对比
NodeJs - cross domain
2021年数据泄露成本报告解读
FATFS | 中文显示 | 长文件名
The general trend, another key industry related to Sino-US competition, has reached a critical moment
devops-3:Jenkins增加静态节点
参与便有奖,《新程序员》杂志福利来袭!
用友YonSuite与旺店通数据集成对接-技术篇2
随机推荐
Ark server opening tutorial win
DC-DC 2C (40W/30W) JD6606SX2 power back application
js数组方法总结
cnpm 安装成功后提示不是内部和外部命令,也不是可运行的命令解决方案
2021年12月电子学会图形化四级编程题解析含答案:棕熊大战
袁小林:沃尔沃专注于出行的安全感,并且把它做到极致
How to prevent hacking Windows server security Settings
全新探险者以40万的产品击穿豪华SUV价格壁垒
深度学习——安装CUDA以及CUDNN实现tensorflow的GPU运行
NodeJs - cross domain
参与便有奖,《新程序员》杂志福利来袭!
STM32 GPIO LED和蜂鸣器实现【第四天】
js中的基础知识点 —— 事件
身为售后工程师的我还是觉得软件测试香,转行成功定薪11.5K,特来分享下经验。
为教育插上数字化的翅膀,网易云信发布「互联网+教育」整体解决方案
spark入门学习-1
【Unity入门计划】基本概念(8)-瓦片地图 TileMap 02
Ark server open tool, server tutorial win
指令重排以及案例
移动应用出海,你的“网络优化”拖后腿了吗?