PyTorch初学错误集锦

1.IndexError: invalid index of a 0-dim tensor. Use tensor.item() to convert a 0-dim tensor to a Python number

报错原因:
running_loss += loss.data[0] 是pytorch0.3版本代码,在0.4-0.5版本的pytorch会出现警告,不会报错,但是在0.5版本以上就会报错,版本更新问题。

解决方法:

# 将原语句:
running_loss += loss.data[0]
# 修改为:
running_loss += loss.item()

2. TypeError: backward() got an unexpected keyword argument ‘retain_variables’

报错原因:
在新版本的Pytorch下,原来的变量retain_variables被替换成了retain_graph。因此,在调用位置将其替换即可。

解决办法:
backward()中默认 retain_graph=False,即反向传播之后这个计算图的内存会被释放,这样就没办法进行第二次反向传播了。需要设置为 retain_graph=True,

loss.backward(retain_graph=True) 

3.TypeError: ‘int’ object is not subscriptable

报错原因:
不支持索引对象使用索引。具体来说是,不能在常量上使用索引,在一维数组上使用二维索引等。

解决办法:

# pytorch查看数据类型和维度
print(type(predict_label), predict_label.size(), list(predict_label.size()))

4.RuntimeError: output with shape [1, 28, 28] doesn’t match the broadcast shape [3, 28, 28]

报错原因:图片格式问题,灰度图只有一个channel,需要变成RGB图才可以。

解决办法1

# 将原语句:
transform = transforms.Compose([
		transforms.ToTensor(), 
		transforms.Normalize(mean=(0.5, 0.5, 0.5), std=(0.5, 0.5, 0.5))
		]) 

#修改为:
transform = transforms.Compose([
     transforms.ToTensor(),
     transforms.Lambda(lambda x: x.repeat(3,1,1)), # 修改位置,添加了此语句
     transforms.Normalize(mean=(0.5, 0.5, 0.5), std=(0.5, 0.5, 0.5))
 	])   

报错原因:这是因为mnist图像都是灰度图像,只有一个通道,而transforms.Normalize 却对三个通道都归一化了。

解决办法2

# 将原语句:
transform = transforms.Compose([
		transforms.ToTensor(), 
		transforms.Normalize(mean=(0.5, 0.5, 0.5), std=(0.5, 0.5, 0.5))
		]) 
		
# 修改为:
transform = transforms.Compose([
		transforms.ToTensor(),
	    transforms.Normalize((0.1307,), (0.3081,))
    	])

5.RuntimeError: DataLoader worker (pid(s) 27292) exited unexpectedly

解决办法:

# 将原语句:
dataloader = DataLoader(mnist, batch_size=batch_size, shuffle=True,num_workers=4)

#修改为:
dataloader = DataLoader(mnist, batch_size=batch_size, shuffle=True) # 注释子进程即可

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值