Трудности с вычислением среднеквадратичной ошибки между 2 тензорами

#python #machine-learning #neural-network #pytorch #loss-function

#python #машинное обучение #нейронная сеть #pytorch #потеря-функция

Вопрос:

Я пытаюсь создать функцию потерь, которая вычислит среднеквадратичную ошибку 2 тензоров одинакового размера. Другими словами, мне нужна функция, которая вычисляет разницу между каждыми 2 ячейками (с одной и той же строкой и столбцом) в ячейках матрицы A и матрицы B, возводит ее в квадрат и вычисляет среднее значение различий.

Насколько я понимаю, nn.MSELoss должен делать именно это.

Когда я передаю 2 тензора в nn.MSELoss, я получаю следующее сообщение об ошибке:

 RuntimeError: Boolean value of Tensor with more than one value is ambiguous
  

Вот мой код

 nn.MSELoss(stack_3[0,:],stack_7[0,:])
  

Тензоры представляют собой числа с плавающей точкой одинаковой формы.

 stack_3.shape, stack_7.shape
(torch.Size([6131, 784]), torch.Size([6131, 784]))
  

Ответ №1:

nn.MSELoss это вызываемый класс, а не функция. Сначала вам нужно определить экземпляр nn.MSELoss , затем вы можете его вызвать. В качестве альтернативы вы можете напрямую использовать torch.nn.functional.mse_loss .

 from torch import nn
criterion = nn.MSELoss()
loss = criterion(stack_3[0, :], stack_7[0, :])
  

или

 import torch.nn.functional as F
loss = F.mse_loss(stack_3[0, :], stack_7[0, :])