다음 소개 하는 3가지 경우에서 모두 와 ()는 같은 shape을 가지고 있어야합니다.
def mse(y, y_pred):
return ((y-y_pred)**2).mean()
import torch
y = torch.FloatTensor([[1, 1],
[2, 2]])
y_pred = torch.FloatTensor([[0, 0],
[0, 0]])
print(mse(y, y_pred))
[out] tensor(2.5000)
import torch
import torch.nn.functional as F
y = torch.FloatTensor([[1, 1],
[2, 2]])
y_pred = torch.FloatTensor([[0, 0],
[0, 0]])
F.mse_loss(y, y_pred)
[out] tensor(2.5000)
해당 함수는 reduction
인자를 이용하여 차원 감소 연산에 대한 설정이 가능합니다. 기본값은 reduction = 'mean'
입니다.
import torch
import torch.nn.functional as F
y = torch.FloatTensor([[1, 1],
[2, 2]])
y_pred = torch.FloatTensor([[0, 0],
[0, 0]])
print(F.mse_loss(y, y_pred, reduction = 'mean'))
print(F.mse_loss(y, y_pred, reduction = 'sum'))
print(F.mse_loss(y, y_pred, reduction = 'none'))
tensor(2.5000)
tensor(10.)
tensor([[1., 1.],
[4., 4.]])
torch.nn.MSELoss(size_average=None, reduce=None, reduction='mean')
import torch
import torch.nn as nn
y = torch.FloatTensor([[1, 1],
[2, 2]])
y_pred = torch.FloatTensor([[0, 0],
[0, 0]])
criterion = nn.MSELoss()
criterion(y, y_pred)
[out] tensor(2.5000)
torch.nn.functional의 mse_loss
를 이용한 방법과 torch.nn의 MSELoss
를 이용한 방법의 차이는 거의 없습니다. 단, torch.nn의 MSELoss
를 사용하면 nn.Module의 하위 클래스 내부에 선언하기 때문에 하나의 layer처럼 취급할 수 있습니다.