Итак, я должен определить модель CNN следующим образом:
Один сверточный + один скрытый слой: вставьте сверточный слой в начало сети, за которым следует слой максимального пула и полностью связанный слой с 100 нейронов. Используйте 5x5 локальных рецептивных полей, шаг 1 и 2 [0 ядер. Слой максимального пула должен объединять объекты, используя пул 2x2 windows.
Входной тензор X имеет размер: torch.Size [X.size (0), 1,28,28]. Выход сверточного + пула слоев имеет форму [X.size (0), 20,12,12]. Этот вывод должен быть преобразован в 1D-тензор для каждого примера X, который будет использоваться в качестве ввода для полностью связанного слоя.
Ниже приведен мой код для модели. Я преобразую X в форму [X.size (0), 20 * 12 * 12] перед подачей его на полностью подключенный слой:
def model_2(self, X, hidden_size, class_num):
model = NN.Sequential()
model.add_module("conv1",NN.Conv2d(1,20,5,stride=1))
model.add_module("mp",NN.MaxPool2d(2))
X = model(X)
X = X.view(X.size(0), -1)
print(X.size())
n_x = X.shape[1]
model.add_module("linear1", NN.Linear(n_x, hidden_size))
model.add_module("sigmoid", NN.Sigmoid())
model.add_module("linear2", NN.Linear(hidden_size,class_num))
model.add_module("softmax", NN.LogSoftmax())
return model
Однако при работе модели я получаю следующую ошибку ( ошибка в F.nll_loss (модель (X), Y)):
Traceback (most recent call last):
File "pytorch/cnnExercise.py", line 113, in <module>
accuracy = cnn.train_and_evaluate(FLAGS, train_set, test_set)
File "/home/taiman/DL/hw04/pytorch/train_cnn.py", line 210, in train_and_evaluate
loss_func = F.nll_loss(model(X), Y)
File "/home/taiman/anaconda3/lib/python3.7/site-packages/torch/nn/modules/module.py", line 532, in __call__
result = self.forward(*input, **kwargs)
File "/home/taiman/anaconda3/lib/python3.7/site-packages/torch/nn/modules/container.py", line 100, in forward
input = module(input)
File "/home/taiman/anaconda3/lib/python3.7/site-packages/torch/nn/modules/module.py", line 532, in __call__
result = self.forward(*input, **kwargs)
File "/home/taiman/anaconda3/lib/python3.7/site-packages/torch/nn/modules/linear.py", line 87, in forward
return F.linear(input, self.weight, self.bias)
File "/home/taiman/anaconda3/lib/python3.7/site-packages/torch/nn/functional.py", line 1372, in linear
output = input.matmul(weight.t())
RuntimeError: size mismatch, m1: [2400 x 12], m2: [2880 x 100] at /opt/conda/conda-bld/pytorch_1579022060824/work/aten/src/TH/generic/THTensorMath.cpp:136
Если вы посмотрите на последнюю строку сообщения об ошибке, в input.matmul (weight.t) есть несоответствие размера тензора ()) где m1: [2400 x 12], m2: [2880 x 100]. Есть идеи, что я делаю не так ?? Заранее спасибо.