質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

9473閲覧

Pytorchの shape '[-1, 400]' is invalid for input of size 179776のエラーを修正したい

nortordam

総合スコア25

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/12/25 09:50

pytorchで画像分類をするために下記のURLをもとに自分のローカルデータをImageFolderにいれつつ,改変したのですがタイトルのエラー「shape '[-1, 400]' is invalid for input of size 179776」が表示され原因がわかりません.
おそらくニューラルネットワークのCNNのチャンネル数が問題だとは思うのですがどう修正すればいいかわからないため質問しました,

https://pytorch.org/tutorials/beginner/blitz/cifar10_tutorial.html

該当ソースコード

import torch import torchvision import torchvision.transforms as transforms import matplotlib.pyplot as plt import numpy as np import torch.nn as nn import torch.nn.functional as F import torch.optim as optim transform = transforms.Compose( [transforms.ToTensor(), transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))]) data_transform = transforms.Compose([ transforms.RandomResizedCrop(224), transforms.RandomHorizontalFlip(), transforms.ToTensor(), #transforms.Normalize(mean=[0.485, 0.456, 0.406], # std=[0.229, 0.224, 0.225]) transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)) ] ) #rootはローカルのアドレスがあると考えてください trainset = torchvision.datasets.ImageFolder(root='4', transform=data_transform) trainloader = torch.utils.data.DataLoader(trainset, batch_size=4, shuffle=False, num_workers=2) testset = torchvision.datasets.ImageFolder(root='4', transform=data_transform) testloader = torch.utils.data.DataLoader(testset, batch_size=4, shuffle=False, num_workers=2) classes = ('1', '2', '3', '4', '5', '6', '7', '8', '9') class Net(nn.Module): def __init__(self): super(Net, self).__init__() self.conv1 = nn.Conv2d(3, 6, 5) self.pool = nn.MaxPool2d(2, 2) self.conv2 = nn.Conv2d(6, 16, 5) self.fc1 = nn.Linear(16 * 5 * 5, 120) self.fc2 = nn.Linear(120, 84) self.fc3 = nn.Linear(84, 10) def forward(self, x): x = self.pool(F.relu(self.conv1(x))) x = self.pool(F.relu(self.conv2(x))) x = x.view(-1, 16 * 5 * 5) x = F.relu(self.fc1(x)) x = F.relu(self.fc2(x)) x = self.fc3(x) return x net = Net() criterion = nn.CrossEntropyLoss() optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9) for epoch in range(2): # loop over the dataset multiple times running_loss = 0.0 for i, data in enumerate(trainloader, 0): # get the inputs inputs, labels = data # zero the parameter gradients optimizer.zero_grad() # forward + backward + optimize outputs = net(inputs) loss = criterion(outputs, labels) loss.backward() optimizer.step() # print statistics running_loss += loss.item() if i % 2000 == 1999: # print every 2000 mini-batches print('[%d, %5d] loss: %.3f' % (epoch + 1, i + 1, running_loss / 2000)) running_loss = 0.0 print('Finished Training')

エラーコード

--------------------------------------------------------------------------- RuntimeError Traceback (most recent call last) <ipython-input-11-fe85c778b0e6> in <module>() 10 11 # forward + backward + optimize ---> 12 outputs = net(inputs) 13 loss = criterion(outputs, labels) 14 loss.backward() ~/anaconda3/lib/python3.6/site-packages/torch/nn/modules/module.py in __call__(self, *input, **kwargs) 487 result = self._slow_forward(*input, **kwargs) 488 else: --> 489 result = self.forward(*input, **kwargs) 490 for hook in self._forward_hooks.values(): 491 hook_result = hook(self, input, result) <ipython-input-8-8a32bf6021ce> in forward(self, x) 14 x = self.pool(F.relu(self.conv1(x))) 15 x = self.pool(F.relu(self.conv2(x))) ---> 16 x = x.view(-1, 16 * 5 * 5) 17 x = F.relu(self.fc1(x)) 18 x = F.relu(self.fc2(x)) RuntimeError: shape '[-1, 400]' is invalid for input of size 179776 dataiter = iter(testloader) images, la

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

おそらく179776が400で割れずviewが実行できないのでエラーになっていると思われます。
ディバッグするかprint(x.size)等を行って入力のサイズを確認し
本当に5516が適切かどうか確認してみてください。

投稿2018/12/30 09:25

ko.tu

総合スコア178

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nortordam

2018/12/30 11:02

ありがとうございます。早速試してみます!
nortordam

2019/01/07 08:22

すいません,試しにいくつかやって見て,viewをx = x.view(x.size(0), 16*37*37)にすることで新たなエラーとして RuntimeError: size mismatch, m1: [4 x 21904], m2: [400 x 120] at /Users/administrator/nightlies/pytorch-1.0.0/wheel_build_dirs/conda_3.6/conda/conda-bld/pytorch_1544137972173/work/aten/src/TH/generic/THTensorMath.cpp:940 が出てきました,ここで行き詰ってしまいどうにもならない状態です.
ko.tu

2019/01/07 15:38

おそらくviewは実行できておりlinearに入力する段階でエラーをはいているのではないでしょうか? self.fc1 = nn.Linear(16 * 5 * 5, 120) と定義しているところを適切に定義すればよいと思います。 今回の形ですと self.fc1 = nn.Linear(16*37*37, 120) になるかと思います。
nortordam

2019/01/08 11:18

ありがとうございます,完全に解決できました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問