Я экспериментирую с нейронной сетью (PyTorch) и получаю эту ошибку.
RuntimeError: неверный аргумент 2: размер '[32 x 9216]' недопустим для ввода с 8192 элементами в/pytorch/aten/src/TH/THStorage.cpp:84
Моя задача заключается в классификации изображений с AlexNet, и я отследил ошибку, чтобы быть размером изображений, передаваемых в нейронную сеть.Мой вопрос, учитывая сетевую архитектуру с ее параметрами, как определить правильный размер изображения, требуемый сетью?
В соответствии с моим кодом, приведенным ниже, я сначала преобразовываю обучающие изображения перед подачей в нейронную сеть.Но я заметил, что нейронная сеть может принимать только размер 224
и, иначе, выдает ошибку выше.Например, мой инстинкт должен был применить transforms.RandomResizedCrop
размера 64, но, очевидно, это неправильно.Есть ли формула для определения необходимого размера?
Код
# transformation to be done on images
transform_train = transforms.Compose([
transforms.RandomResizedCrop(64),
transforms.RandomHorizontalFlip(),
transforms.ToTensor(),
transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
])
class AlexNet(nn.Module):
def __init__(self, num_classes=1000):
super(AlexNet, self).__init__()
self.features = nn.Sequential(
nn.Conv2d(3, 64, kernel_size=11, stride=4, padding=2),
nn.ReLU(inplace=True),
nn.MaxPool2d(kernel_size=3, stride=2),
nn.Conv2d(64, 192, kernel_size=5, padding=2),
nn.ReLU(inplace=True),
nn.MaxPool2d(kernel_size=3, stride=2),
nn.Conv2d(192, 384, kernel_size=3, padding=1),
nn.ReLU(inplace=True),
nn.Conv2d(384, 256, kernel_size=3, padding=1),
nn.ReLU(inplace=True),
nn.Conv2d(256, 256, kernel_size=3, padding=1),
nn.ReLU(inplace=True),
nn.MaxPool2d(kernel_size=3, stride=2),
)
self.classifier = nn.Sequential(
nn.Dropout(),
nn.Linear(256 * 6 * 6, 4096),
nn.ReLU(inplace=True),
nn.Dropout(),
nn.Linear(4096, 4096),
nn.ReLU(inplace=True),
nn.Linear(4096, num_classes),
)
def forward(self, x):
x = self.features(x)
x = x.view(x.size(0), 256 * 6 * 6)
x = self.classifier(x)
return x