Я использую 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. Я надеюсь, что кто-то может помочь с этим вопросом.