00. 들어가며

최근에 많은 딥러닝 라이브러리들이 나오고 있다. Tensorflow를 선두로 하여 Caffe, Keras등이 있지만 Facebook에서 개발하여 상당히 파이써닉한 문법을 보여주고 GPU 메모리를 내가 (편하게)조절할 수 있는 PyTorch를 선택하기로 했다. Keras의 심플함도 맘에 들었지만….

우선은 PyTorch로 Linear Regression을 진행해보자 한다. Linear Regression의 대한 설명보다는 PyTorch의 코드 예시를 보여주는 형태로 정리하려한다.

01. PyTorch Linear Regression

import torch
import torch.nn as nn        # Neural Network
import torch.optim as optim  # Optimizer
import torch.nn.init as init # Initializer

필요한 라이브러리를 import한다.

num_data = 1000  # Data의 개수
num_epoch = 500  # epoch 횟수

x = init.uniform_(torch.Tensor(num_data, 1), -10, 10) # input data 초기화
noise = init.normal_(torch.FloatTensor(num_data, 1), std=1) # noise 생성
y = 2*x + 3
y_noise = 2*(x+noise)+3

하이퍼 파라메터(Hyper Parameter)와 사용할 변수들을 초기화한다.

model = nn.Linear(1, 1) # input 1, output 1

loss_func = nn.L1Loss() # 모델의 예측값 평가 방식으로는 L1 Loss를 사용
optimizer = optim.SGD(model.parameters(), lr=0.01) # 경사하강법의 최적화 방식으론 SGD

input이 1개, output이 1개인 선형회귀모델을 생성하였다. 그리고 예측한 결과 값의 평가방식으로는 L1 Losss는 \(loss\left(x, y\right)=\frac{1}{n}\sum{\|x_i-y_i\|}\)를 사용하였다. L1 Loss는 차이의 절대값의 평균을 의미한다. 최적화 함수(Optimization Function)으로는 Stochastic Gradient Descent(SGD)의 방식을 사용하였다.

learning_rate = [] # Learning Rate 저장용

for i in range(num_epoch):
    optimizer.zero_grad()  # optimizer 초기화
    output = model(x)      # 결과 생성

    loss = loss_func(output, label) # 결과값의 평가
    loss.backward()       # backpropagation
    optimizer.step()      # 기울기에 학습률을 곱한다.

    learning_rate.append(loss.data)

앞에 설정한 하이퍼 파라메터와 모델을싱행하는 코드이다.

learning rate

result