web-dev-qa-db-ja.com

「RuntimeError:期待される4次元の入力は4次元の重み32 3 3ですが、代わりにサイズ[3、224、224]の3次元の入力を取得しました」

事前トレーニング済みのモデルを使用しようとしています。ここで問題が発生します

モデルは単純なカラー画像を取り込むことを想定していませんか?なぜ4次元の入力を期待しているのですか?

RuntimeError                              Traceback (most recent call last)
<ipython-input-51-d7abe3ef1355> in <module>()
     33 
     34 # Forward pass the data through the model
---> 35 output = model(data)
     36 init_pred = output.max(1, keepdim=True)[1] # get the index of the max log-probability
     37 

5 frames
/usr/local/lib/python3.6/dist-packages/torch/nn/modules/conv.py in forward(self, input)
    336                             _pair(0), self.dilation, self.groups)
    337         return F.conv2d(input, self.weight, self.bias, self.stride,
--> 338                         self.padding, self.dilation, self.groups)
    339 
    340 

RuntimeError: Expected 4-dimensional input for 4-dimensional weight 32 3 3, but got 3-dimensional input of size [3, 224, 224] instead

どこ

inception = models.inception_v3()
model = inception.to(device)
3
Goldname

documentation から、Conv2dレイヤーは形状を持つ入力を期待しています

(n samples, channels, height, width)

通常のように整形された画像(224、224、3)を渡しても機能しません。

カラー画像(3チャネル)の場合、次のように入力を再形成する必要があります。

x = x.reshape(-1, 3, 224, 224)     # if numpy array
x = x.view(-1, 3, 224, 224)        # if torch tensor

グレースケール(白黒)画像の場合:

x = x.reshape(-1, 1, 224, 224)     # if numpy array
x = x.view(-1, 1, 224, 224)        # if torch tensor

これに加えて、それがConv2dレイヤーに適合することを確認してください。

self.conv1 = nn.Conv2d(channels, _, _) # 1 or 3
1
Nicolas Gervais