이번 시간에는 파이토치를 사용하여 선형 회귀를 구현해보도록 하겠다.
파이토치를 사용하는 법은 위와 같다. 먼저 모델을 클래스와 Variable을 사용해서 만든다. 그 다음 손실함수를 정의하고, 최적화한다. 세번째는 forward, backward, update과정을 거쳐 모델을 제대로 학습한다.
먼저 torch를 import한 뒤 Variable을 import한다. 그 후 입력 데이터와 정답 데이터들을 정의한다.
그 다음 위와 같이 model class를 만든다. class에 반드시 들어가야할 함수는 모델을 초기화하는 함수와 forward를 수행하는 함수이다. 초기화함수 __init__에서는 super을 통해 호출하고, 입력과 출력의 개수를 결정해준다.
forward함수는 x를 입력으로 받아서 y를 출력으로 한다.
두번째는 loss를 API 중 올바르게 선택하는 단계이다. 이미 라이브러리에 구현되어 있는 MSELoss를 사용하고 SGD를 사용해서 최적화한다. 학습률도 정하는데 이 예시에는 가장 무난한 0.01로 설정했다.
그 이후 forward, loss, backward, step을 실행하는 training 단계를 구현한다.
이전의 예시에서는 위와 같은 형식이었기 때문에 데이터의 개수만큼 하나하나 for문을 돌려야했고, 만약 데이터의 개수가 매우 많았다면 문제가 생길 수도 있다. 하지만 파이토치 라이브러리에 있는 SGD를 사용하면 배치 단위로 수행할 수 있다.
데이터 training이 끝나면 이제 모델의 성능을 테스트해야한다. training 뒤에 test를 하니 정답인 8과 가까이 나와서 알맞은 예측을 하는 모델이 됐음을 알 수 있다. test할 때는 forward만 쓰면 된다.
더 복잡한 일을 위의 과정으로 할 수 있다. 이 예시에서는 cross entropy loss를 사용했다.
위에서 쓰인 예시 외에도 다양한 optimizer가 존재하니 사용하는 연습을 해보자.
어떤 것은 SGD보다 더 낫다고 한다.
오늘 배운 내용에 대한 더 많은 pytorch 예들은
http://pytorch.org/tutorials/beginner/pytorch_with_examples.html
에서 확인할 수 있다.
다음 시간에는 logistic regression에 대해 배우도록 하겠다.
'AI > PyTorchZeroToAll by Sung Kim' 카테고리의 다른 글
[PyTorchZeroToAll] 7. Wide and Deep (0) | 2020.01.27 |
---|---|
[PyTorchZeroToAll] 6. Logistic Regression (0) | 2020.01.23 |
[PyTorchToAll] 4. Back-propagation (0) | 2020.01.22 |
[PyTorchZeroToAll] 3. Gradient Descent (0) | 2020.01.21 |
[PytorchZeroToAll] 2. Linear Model (0) | 2020.01.21 |