#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, :])