Pytorch中常见的报错解决方案

版权声明:本文为博主原创文章,转载请注明: blog.csdn.net/gdymind https://blog.csdn.net/gdymind/article/details/82933534

本文用于记录所在pytorch所遇到过的运行时错误,持续更新

  1. 变量所在设备(CPU,GPU)不一致问题

RuntimeError: Input type (torch.cuda.FloatTensor) and weight type (torch.FloatTensor) should be the same

可能原因:现在假设代码要在GPU上运行,并且你已经进行my_model.to(device)操作了。注意只有my_model中的属性(也就是self.开头的变量)才会进行.to(device)。如果出现这个错误,可能是有的中间变量需要手动再显式地.to(device)一下~

  1. 在Conv2d中padding或stride的参数个数错误的问题

RuntimeError: expected padding to be a single integer value or a list of 1 values to match the convolution dimensions, but got padding=[0, 0]

原因一:
对于一张二维图片来说,它的padding也是二维的,即横、纵方向上都需要设置padding(当然这两个数字一般是一样的)。现在为什么提示我们padding应该是一维的呢?一定是输入数据维度不对

对于Conv2d()来说,它要求的输入的形状是四维的 ( N , C i n , H , W ) (N,C_{in},H,W) ,其中四个变量分别代表batch数、channel数、图像高度和图像宽度。当你从一个dataset中取出单幅图片时容易发生丢掉batch维度这个问题,即 ( 1 , C i n , H , W ) (1,C_{in},H,W) 的tensor变成了 ( C i n , H , W ) (C_{in},H,W) 的tensor,这时候我们只需要对这个tensor(设为x)执行x = x.unsqueeze(0)增加一维就行了。
原因二:
上面说的是最可能的情况,如果你发现图片已经是四维的却还有这个报错,请检查你Conv2d()的输入参数
例如,如果你把stride设置为一维的[3]而不是二维3(注意3会被自动处理成[3, 3]),同时padding为二维的0
pytorch发现stride是一维的,而padding却是二维的,就会报错。

猜你喜欢

转载自blog.csdn.net/gdymind/article/details/82933534