PyTorch Tutorial 02. Cost Function

‎yeon·2023년 2월 22일
1
post-thumbnail
이 글은 한빛미디어의 '김기현의 딥러닝 부트캠프 with 파이토치'를 읽고 정리한 것입니다.

PyTorch로 MSE 구현하기

다음 소개 하는 3가지 경우에서 모두 yyy^\hat{y} (ypredy_{pred})는 같은 shape을 가지고 있어야합니다.

1) MSE를 함수로 정의하여 구현하기

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)

2) torch.nn.functional 사용하기

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.]])

3) torch.nn 사용하기

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처럼 취급할 수 있습니다.

0개의 댓글