本文用于记录所在pytorch所遇到过的运行时错误,持续更新。
- 变量所在设备(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)
一下~
- 在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()
来说,它要求的输入的形状是四维的
,其中四个变量分别代表batch数、channel数、图像高度和图像宽度。当你从一个dataset中取出单幅图片时容易发生丢掉batch维度这个问题,即
的tensor变成了
的tensor,这时候我们只需要对这个tensor(设为x
)执行x = x.unsqueeze(0)
增加一维就行了。
原因二:
上面说的是最可能的情况,如果你发现图片已经是四维的却还有这个报错,请检查你Conv2d()的输入参数。
例如,如果你把stride设置为一维的[3]
而不是二维3
(注意3
会被自动处理成[3, 3]
),同时padding为二维的0
。
pytorch发现stride是一维的,而padding却是二维的,就会报错。