问题: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())