pytorch报错记录

1.BUG:

RuntimeError: one of the variables needed for gradient computation has been modified by an inplace operation.

        什么是inplace operation:in-place operation在pytorch中是指改变一个tensor的值的时候,不经过复制操作,而是直接在原来的内存上改变它的值。可以把它成为原地操作符。

        pytorch中,通常加后缀“_”来表示原地运算符,例如.add_(),或者python中的 “+=”。

 

2.Bug:

RuntimeError: Expected object of backend CPU but got backend CUDA for argument #2 'weight'

这种情况通常是数据还在cpu上,又要用到gpu上计算导致的,可以尝试数据后面加上.cuda()。

cpu上的tensor和gpu上的tensor是太一样的:PyTorch中的数据类型为Tensor,Tensor与Numpy中的ndarray类似,同样可以用于标量,向量,矩阵乃至更高维度上面的计算。PyTorch中的tensor又包括CPU上的数据类型和GPU上的数据类型,一般GPU上的Tensor是CPU上的Tensor加cuda()函数得到。通过使用Type函数可以查看变量类型。系统默认的torch.Tensor是torch.FloatTensor类型。例如data = torch.Tensor(2,3)是一个2*3的张量,类型为FloatTensor; data.cuda()就将其转换为GPU的张量类型,torch.cuda.FloatTensor类型。

3.Bug:

xxxxxx is not implemented for type torch.LongTensor

尝试将torch.LongTensor转换为:torch.FolatTensor类型。

 

4.Bug:

bool value of Tensor with more than one value is ambiguous

函数或者可调用对象使用时候没有加括号。

 

5.注意:关于减少时间消耗

(1)只要是用到for循环都是在cpu上进行的,会消耗巨量的时间

(2)只要是用到生成矩阵这种操作都是在cpu上进行的,会很消耗时间。

(3)数据往cuda()上搬运会比较消耗时间,也就是说 .cuda()会比较消耗时间,能去掉就去掉。

(4)在服务器上,如果可以在一块gpu上运行就不要采用net = nn.DataParallel(net),这种gpu并行方式比单个gpu要耗时。

6. pytorch debug :断点调试 和 打印可能出错步的结果 真的可以很快的找到错误所在的地方

关于断点调试:pycharm单步调试 - qq_33485434的博客 - CSDN博客


7.UserWarning: To copy construct from a tensor

x= torch.tensor(x)  ------>    x= x.clone()

8.RuntimeError: Expected object of scalar type Long but got scalar type Float for argument #2 'mat2'(期望对象为标量类型长,但得到标量类型浮点数)

这个好奇怪,对于x= torch.matmul(x,one_hot_copy), 只要提前把x和one_hot_copy后面加上.float()就可以解决。

 

9. 张量乘法(未定):

二维张量相乘: 二维矩阵相乘 A*B: A.mm(B), 多维矩阵相乘 A*B: A.matmul(B), 注意需要long()数据类型。tensor.mul(tensor)

10.CUDA error: device-side assert triggered

检查Label是不是从0开始的

如果使用了Embedding层,检查参数

在算loss时计算机发现类别数目不对

详见https://blog.csdn.net/Geek_of_CSDN/article/details/86527107

        https://blog.csdn.net/qq_31049727/article/details/90671689

11.CUDNN_STATUS_MAPPING_ERROR

model = model.cuda()

见https://blog.csdn.net/u011394059/article/details/78425682

12.invalid argument 0: Sizes of tensors must match except in dimension 0. Got 182 and 360 in dimension 2 at /pytorch/aten/src/TH/generic/THTensorMath.c:3586
见https://blog.csdn.net/qq_38156052/article/details/81293412

13.AttributeError: 'dict' object has no attribute 'seek'. You can only torch.load from a file that is seekable. Please pre-load the data into a buffer like io.BytesIO and try to load from it instead.
https://blog.csdn.net/qq_34789262/article/details/83376374

14.'DataParallel' object has no attribute 'copy' 

https://blog.csdn.net/chris_zhangrx/article/details/86619834

你可能感兴趣的:(pytorch报错记录)