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

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/12/30 11:02
2019/01/07 08:22
2019/01/07 15:38
2019/01/08 11:18