Размер тензора a (10) должен соответствовать размеру тензора b (9) при не синглетонном измерении 1 - PullRequest
0 голосов
/ 02 апреля 2020

Я использую MSELoss, и я также преобразовал метки в ту же форму, что и мой вывод. Но, похоже, он показывает ошибку измерения с несовпадением. Итак, я сделал ручную проверку и обнаружил, что для первых нескольких итераций код работает правильно, но после того, как эта ошибка возникает.

Input_Nodes = 784
Hidden_Node = 100
Output_Node = 10
epochs = 10
lr = 0.01

Model1 = nn.Sequential(nn.Linear(Input_Nodes,Hidden_Node),
                       nn.Sigmoid(),
                       nn.Linear(Hidden_Node,Output_Node),
                      )
print(Model1)


CostFn = nn.MSELoss()

def Train(trainloader,testloader,Model,lr,epoch):

    train_losses, test_losses = [], []

    optimizer = optim.SGD(Model.parameters(), lr=lr)

    for e in range(epoch):
        LossComputed = 0
        for data, lables in trainloader:
            data = data.view(data.shape[0],-1)
            lables = to_categorical(lables)
            lables = torch.from_numpy(lables)
            optimizer.zero_grad()
            Model_out = Model(data)
            Loss = CostFn(Model_out,lables)

            #BackPropagation
            Loss.backward()
            #Updation_Step
            optimizer.step()

            LossComputed += Loss


            Model.train() #Turning on the DropOut layer



Train(trainloader,testloader,Model1,lr,epochs)

Ошибка, которую я получаю

---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
<ipython-input-124-96b062bab7f4> in <module>
     53 
     54 
---> 55 Train(trainloader,testloader,Model1,lr,epochs)

<ipython-input-124-96b062bab7f4> in Train(trainloader, testloader, Model, lr, epoch)
     13             optimizer.zero_grad()
     14             Model_out = Model(data)
---> 15             Loss = CostFn(Model_out,lables)
     16 
     17             #BackPropagation

~/.local/lib/python3.7/site-packages/torch/nn/modules/module.py in __call__(self, *input, **kwargs)
    539             result = self._slow_forward(*input, **kwargs)
    540         else:
--> 541             result = self.forward(*input, **kwargs)
    542         for hook in self._forward_hooks.values():
    543             hook_result = hook(self, input, result)

~/.local/lib/python3.7/site-packages/torch/nn/modules/loss.py in forward(self, input, target)
    429 
    430     def forward(self, input, target):
--> 431         return F.mse_loss(input, target, reduction=self.reduction)
    432 
    433 

~/.local/lib/python3.7/site-packages/torch/nn/functional.py in mse_loss(input, target, size_average, reduce, reduction)
   2201             ret = torch.mean(ret) if reduction == 'mean' else torch.sum(ret)
   2202     else:
-> 2203         expanded_input, expanded_target = torch.broadcast_tensors(input, target)
   2204         ret = torch._C._nn.mse_loss(expanded_input, expanded_target, _Reduction.get_enum(reduction))
   2205     return ret

~/.local/lib/python3.7/site-packages/torch/functional.py in broadcast_tensors(*tensors)
     50                 [0, 1, 2]])
     51     """
---> 52     return torch._C._VariableFunctions.broadcast_tensors(tensors)
     53 
     54 

RuntimeError: The size of tensor a (10) must match the size of tensor b (9) at non-singleton dimension 1

Когда я попробуйте другой подход с logsoftmax () и NNNLoss (), все работает нормально. Я думаю, это проблема с MSELoss. Я надеюсь, что кто-то может помочь с этим вопросом.

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