1 RuntimeError: invalid argument 0: Sizes of tensors must match except in dimension 0
RuntimeError: invalid argument 0: Sizes of tensors must match except in dimension 0. Got 337 and 336 in dimension 3 at /opt/conda/conda-bld/pytorch_1565272279342/work/aten/src/TH/generic/THTensor.cpp:689
解决方法:
这是因为输入的大小不匹配,跟数据集有关,也跟数据预处理中的函数相关:
该函数是按比例缩放,可能是因为该数据集的分辨率不同,所以出来的结果不是(224,224)的,解决办法是改为使用:
即可
参考资料:
1 pytorch数据预处理错误的解决
2 RuntimeError: one of the variables needed for gradient computation has been modified by an inplace operation: [torch.cuda.HalfTensor [16, 256, 20, 20]], which is output 0 of ReluBackward1, is at version 2; expected version 1 instead.
解决方法:
有些时候,往往会遇到比如 Adam 就没有 nan 而 SGD 就会出现 nan,这种通常都是 Loss 设得太大,可以调低学习率试试。
其他可能产生 nan 的地方可以尝试定位下:
1、脏数据,输入有 NaN
2、设置 clip gradient
3、更换初始化参数方法
参考资料:
1 关于 pytorch inplace operation, 需要知道的几件事
2 PyTorch 常见问题整理
3 Expected more than 1 value per channel when training
一个可能的原因是出现了输入 batch_size = 1 的情况
解决方法:
- 可以考虑在 DataLoader 属性加上 drop_last=True 解决,它会抛弃掉不够一个 batch size 的情况。
- 如果需要 batch_size = 1 的训练方式,还可以考虑把网络中的 BatchNorm 换成 InstanceNorm,或者直接去掉报错位置的BatchNorm 。
参考资料:
1 PyTorch 常见问题整理
4 Can’t call numpy() on Variable that requires grad. Use var.detach().numpy() instead
解决方法:
通常有两种情况:
1) 这个变量是含有训练参数的,需要反向传播,则使用 var.detach().numpy() 获取。
2) 如果这个变量是不进行训练的不需要反向传播,则将相关的代码用(with torch.no_grad())修饰即可
参考资料:
1 PyTorch 常见问题整理
5 TypeError: ToTensor() takes no arguments
类需要实例化
将
改为
参考资料:
1 TypeError: ToTensor() takes no arguments
6
检查三个地方:
a. 标签类别数;
b. 标签中类别的表示,是不是 从 0 到 类别数-1 (最大概率)
c. 网络中输出的类别数
一般如果数据确定没问题,那就是网络输出的问题。
参考资料:
1 BUG解决:SpatialClassNLLCriterion.cu:103:void cunn_SpatialClassNLLCriterion_updateOutput_kernel