Сверточная нейронная сеть с одним полностью связанным слоем - PullRequest
0 голосов
/ 14 марта 2020

Итак, я должен определить модель 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]. Есть идеи, что я делаю не так ?? Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...