Pytorch 训练常见问题

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

loss += criterion(preds, labels).data[0]

一般是torch版本的不同造成的。将 “data[0]” 改为 “data” 即可。

 

问题:Implicit dimension choice for softmax has been deprecated. Change the call to include dim=X

出错代码 :

softmax_out = softmax_layer(outputs)

python 版本问题,python3 中 softmax的隐式维度选择已经被弃用,需要手动指定维度dim = X。解决如下:

softmax_out = softmax_layer(outputs, dim=1)

 

问题:RuntimeError: CUDA error: device-side assert triggered

pytorch中运行分类任务时,报如下错误:

/pytorch/aten/src/THCUNN/SpatialClassNLLCriterion.cu:103: void cunn_SpatialClassNLLCriterion_updateOutput_kernel(T *, T *, T *, long *, T *, int, int, int, int, int, long) [with T = float, AccumT = float]: block: [34,0,0], thread: [853,0,0] Assertion `t >= 0 && t < n_classes` failed.

因为torch在算损失的时候,设定的类别数目与数据实际的类别数目不相符。也就是说,要么是类别数目出错,要么是数据缺少了某些类别的数据。

 

问题:AttributeError: module 'torchvision.transforms' has no attribute 'RandomResizedCrop'

跑transforms.RandomResizedCrop(crop_size) 时报错,

版本问题,将RandomResizedCrop 改成 transforms.RandomSizedCrop 即可

 

问题:训练准确率一直为 0%

acc = acc /  len(data_loader.dataset) 

因为 acc 和 len(data_loader.dataset)  都是整数且前者小于后者,即结果小于1,所以结果变为0。解决方法:

acc = float(acc) /  len(data_loader.dataset) ,把分子变为float类型。

 

问题:训练准确率一直很高 98%~99%,严重偏离预期值

原因1可能是标签泄露了,检查下代码。

原因2可能只读了一小部分数据,而这小部分的数据标签正好是一样的,所以无论如何训练都是很高。

 

问题:RuntimeError: cuda runtime error (11) : invalid argument at /pytorch/aten/src/THC/THCGeneral.cpp:405

cudnn.benchmark = True

将 True 改为 False 即可。

 

问题:NameError:name ‘xrange’ is not defined

原因: Python 2 才有 xrange。而在Python 3中,range()与xrange()合并为range( )。

解决办法: 将xrange( )函数全部换为range( )。

 

问题:"nn criterions don't compute the gradient w.r.t. targets - please " \

def cycleLoss(a, a_):
	loss = L1Loss(a, a_)
	return loss

跑上述代码时报错,分析是梯度问题:

loss = criterion(output ,target)

target 默认是不能设置为自动求梯度。因此,如果输入的target变量设为自动求梯度的话,则会报上述错误。

解决方法:

loss = criterion(output ,target.detach())
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值