pbj0812의 코딩 일기

[PYTORCH] 06_pytorch with examples (nn module) 본문

인공지능 & 머신러닝/PYTORCH

[PYTORCH] 06_pytorch with examples (nn module)

pbj0812 2019. 6. 16. 23:22

Pytorch with examples (autograd 재정의) 코드 분석

- 아래 글은 파이토치 튜토리얼 중 nn module을 사용하는 부분을 재구성한 글입니다.

- 학습하기 위해 코드를 잘라서 설명하였기 때문에 전체 코드는 깃허브나 아래 링크 참조 바랍니다.

 

원본링크 : https://pytorch.org/tutorials/beginner/pytorch_with_examples.html

nn module

- PyTorch의 autograd 기능은 복잡한 연산자를 정의하고 유도해내는데 편하지만, 큰 뉴럴 네트워크에서는 구성하는데 어려움이 많다.

- TensorFlow에서는 이러한 어려움을 극복하기 위해 Keras, TensorFlow-Slim, TFLearn등을 사용한다.

- PyTorch에서는 동일한 기능을 위해 nn module를 구현하였다.

코드 프리뷰

하이퍼 파라미터 세팅

N, D_in, H, D_out = 64, 1000, 100, 10
x = torch.randn(N, D_in)
y = torch.randn(N, D_out)
learning_rate = 1e-4

- 하이퍼 파라미터 세팅 부분이다.

- x와 y, learning_rate를 정의하였다.

시퀀스 모델 구성(nn module 사용)

model = torch.nn.Sequential(
    torch.nn.Linear(D_in, H),
    torch.nn.ReLU(),
    torch.nn.Linear(H, D_out),
                   )

- torch.nn.Sequential 함수를 통해 모델을 구성하였다.

 1) D_in의 데이터가 입력으로 들어와 H로 변환

 2) H에 ReLU 적용

 3) H를 입력으로 받고 출력물로 D_out 생성

loss 함수 정의

loss_fn = torch.nn.MSELoss(reduction='sum')

- loss 함수로는 MSE(Mean Squared Error)를 사용하였고, 출력값은 다 더하였다.(reduction='sum')

예측값 정의

y_pred = model(x)

- y_pred에 예측값을 지정해준다.

loss 계산

loss = loss_fn(y_pred, y)

- 위에서 정의한 loss 함수(loss_fn)에 입력값으로 y와 예측된 y(y_pred)를 주어 loss를 계산한다. 

모델 초기화

model.zero_grad()

- 모델을 돌리기 전에 gradient를 초기화 하는 부분이다.

backward 진행

loss.backward()

- loss에 대한 backward를 진행한다.

gradient 갱신

with torch.no_grad():
	for param in model.parameters():
		param -= learning_rate * param.grad

- torch.no_grad()를 사용하여 연산의 추적을 피한다.

- 계산된 parameter들의 loss의 gradient에 learning_rate를 곱한 값을 현재의 가중치에서 빼줌으로 학습을 진행한다.

Comments