Azure Zest

[ Pytorch로 시작하는 딥러닝 ] 2_2. 신경망의 구성 요소 본문

Deep Learning

[ Pytorch로 시작하는 딥러닝 ] 2_2. 신경망의 구성 요소

LABONG_R 2020. 8. 10. 01:24
본문은 책 'pytorch로 시작하는 딥러닝'을 보면서 공부하고 정리한 글입니다.

 

1. Variable

Variable 클래스는 data, grad, creator로 구성되어있다. 이 때, grad는 여러 파라미터에 대한 오차 함수의 변화율을 나타낸다. 말 그대로 기울기라고 생각하면 되는데, 예를들어 grad가 2라면 이 변수값은 2배의 크기로 변할 것이다. 변수의 grad를 확인하고 싶다면, X(변수명).grad 로 확인할 수 있다. 또한 X.grad_fn은 변수를 생성한 함수를 참조한다. 

 

2.  오차 함수

보통 딥러닝의 경우, MSE나 Cross-Entropy 와 같은 오차 함수를 사용하게 된다. 이 오차 함수는 모델의 예측값이 실제 값과 얼마나 가까운지 평가해줄 수 있는 지표이다. 따라서 딥러닝을 어떤 용도(classification 혹은 regression ... )로 사용할지에 따라 적합한 오차 함수를 사용해야 한다. 한 가지의 예시로, SSE(Sum of Squared)를 구현하려면 다음처럼 나타낼 수 있다.

def loss_fn(y,y_pred):
	loss = (y_pred-y).pow(2).sum()  # 1
    for param in [w,b]: 
    	if not param.grad is None: param.grad.data.zero_() # 2
    loss.backward() # 3
    return loss.data[0] # 4

먼저, 1번은 모델의 예측값과 실제 값의 차이를 제곱하는 것이다. (SSE loss function)

2번은 변수의 grad가 none이 아니라면, 0으로 만들고, 3번은 backward 메서드를 호출한다. 이 때, backward는 학습 파라미터들의 grad로 계산되는데, 누적이 되기 때문에 앞에서 계산된 grad를 제거해주기 위해 2번의 코드를 써준다.

 

 

3. 신경망 최적화

임의의 가중치로 시작해서 모델의 기댓값과 실제 값의 차이로 오차를 계산했다면 이런 과정들을 반복하여 최적화를 해야한다. 전체 데이터셋에 대해 오차를 계산하고, loss 변수의 backward 함수를 호출해 기울기를 계산하는 과정을 실행하면 이것이 한 에폭(epoch)이 된다. 오차를 줄이기 위한 최적화 방법은 Adam, RmsProp, SGD와 같이 여러가지 방법들이 있다. 이 방법들은 Learning rate 등과 같은 hyper-parameterem들을 이용하여 진행된다.

 

4. 데이터 로딩

딥러닝에 입력시킬 적합한 데이터를 구성하는 것은 딥러닝의 어려움 중 하나이다. 파이토치에서는 Dataset 클래스와 DataLoader 클래스를 대표적으로 이용할 수 있다.

 

Dataset 클래스는 사용자가 정의하여 사용할 수 있는 클래스로 다음과 같이 크게 init, len, getitem 메서드로 구성되어 있다. Init 은 테이블 인덱스를 읽거나, 이미지를 읽는 등의 초기화 작업을 구현하는 곳이고, len은 데이터셋의 최대 요소 수를 반환한다. 마지막으로 getitem은 데이터셋에 idx 번째 요소를 반환해준다. 이런 메서드들을 통해 사용자가 원하는 방법으로 딥러닝에 넣을 데이터를 구성할 수 있다.

from torch.utils.data import Dataset

class 이름(Dataset):
	def __init__(self,):
   
    def __len__(self):
    
    def __getitem__(self,idx):

 

DataLoader 클래스는 파이토치의 모듈로 간편하게 데이터를 구성해준다. DataLoader 객체는 다양한 샘플러로 데이터셋 객체를 결합하여 만든다. 아래의 데이터는 32의 배치사이즈를 가지는 개와 고양이의 데이터셋이다.

dataloader = DataLoader(Dogsdset, batch_size = 32, num_worders = 2)

위와 같이 Dataset, DataLoader 객체를 이용하여 딥러닝을 위한 데이터를 준비할 수 있다.

 

Reference

Pytorch로 시작하는 딥러닝