“ RuntimeError:预期用于4维权重32 3 3的4维输入,但是却得到了大小为[3,224,224]的3维输入”?

时间:2019-07-28 01:52:50

标签: python machine-learning computer-vision pytorch torchvision

我正在尝试使用预先训练的模型。这是发生问题的地方

模型不是应该采用简单的彩色图像吗?为什么要输入4维?

extends Model

哪里

extends object

2 个答案:

答案 0 :(得分:4)

在卷积层上的Pytorch documentation中,Conv2d层期望输入的形状为

(n samples, channels, height, width) # e.g., (1000, 1, 224, 224)

以常规格式( 224,224 )传递灰度图像不起作用。

要获得正确的形状,您将需要添加通道尺寸。您可以按照以下步骤进行操作:

x = np.expand_dims(x, 1)      # if numpy array
tensor = tensor.unsqueeze(1)  # if torch tensor

对于彩色图片,这会稍微复杂一些。假设您使用

格式
(n samples, height, width, channels) # e.g., (1000, 224, 224, 3)

您将需要在高度和宽度之前放置最后一个尺寸(通道)。

x = x.transpose(0, 3, 1, 2)           # if numpy array
tensor = tensor.permute(0, 3, 1, 2)   # if torch tensor

您将获得正确的格式,例如( 1000、3、224、224 )。

答案 1 :(得分:0)

正如Usman Ali在他的评论中所写,pytorch(和大多数其他DL工具箱)期望图像的批处理作为输入。因此,您需要致电

return

在输入import re films = ["The.Eternal.Evil.of.Asia.1995.DVDRip.x264.AC3", "Guzoo.1986.VHSDVDRiP.x264.AC3.HS.ES-SHAG"] for film in films: print(re.sub(r'(.*)VHSDVDRiP.*|DVDRip.*', r'\1', film)) 中插入单例“批量”维度。

请注意,您使用的模型可能会期望输入尺寸(3x229x229)而不是3x224x224。