【속습】Pytorch 입문②:MLP 회귀를 실장해 PyTorch의 기초를 배운다

지난번은 PyTorch의 베이스가 되는 torch의 취급 방법을 드러냈습니다.

이번에는 PyTorch에서 다층 퍼셉트론(Multilayer perceptron: MLP) 회귀를 구현함과 동시에 주요 PyTorch 패키지를 확인하고 싶습니다.

전체 흐름

모델 구현의 전체적인 흐름은 아래와 같습니다. () 안은 그 때 사용하는 PyTorch 패키지입니다.

  • 입력 데이터 세트 작성, 반복 처리(Dataset, Dataloader)
  • 신경망 정의(nn.Module)
  • 손실 계산, 기울기를 네트워크 매개 변수로 전파 (nn.Module)
  • 네트워크 가중치 업데이트(Optimaizer)

주요 PyTorch 패키지

PyTorch와 상관없이 많은 딥 러닝 프레임 워크는 구현을 단순화하기 위해 다양한 패키지를 제공합니다. PyTorch에는 주로 다음이 있습니다.

torch.tensor다차원 배열. PyTorch에서 사용하는 데이터 구조.
torch.autograd순전파·역전파를 실장한다.역전파(backward()) 등에서 Tensor에 대한 자동 미분 조작을 지원한다.
토치.utils.data입력하는 데이터와 그 라벨을 세트로 해 정리하는 「Dataset」나 Dataset로부터 미니 배치로 데이터를 꺼내 모델에 건네주는 「Dataloader」등의 유틸리티를 포함한다.
torch.nn.Module신경망을 구축하는데 사용된다.모델의 보존이나 로드, GPU로의 이동 등, 파라미터의 캡슐화를 담당한다.
토치.최적SDG나 Adam 등의 파라미터 최적화 알고리즘을 사용할 수 있도록 한다.
주요 PyTorch 패키지

모델 구현

데이터세트 만들기

이번에는 연습용 데이터로 sin(5x)에 난수를 더한 것을 numpy로 준비합니다.from_numpy()에서 torch.tensor로 변환합니다.

모델 정의

pytorch에서는 nn.Module 클래스를 상속하는 '파이썬 클래스'로 모델을 정의합니다.

class MLP(nn.Module): 정의하는 MLP라는 클래스는 부모 클래스 nn.Module를 상속
def init(): 인수를 받아 인스턴스화
super(MLP, self).init(): super 함수로 부모 클래스 상속
def forward(self, x): 인스턴스화한 후, 그 함수가 불려 갔을 때에 동작한다. forward 함수를 정의하면 backward 함수 (그래디언트 계산)도 자동으로 정의됩니다.

.parameters()에서 네트워크의 구조와 매개 변수를 얻을 수 있습니다.

손실 계산, 역 전파, 가중치 업데이트

개별 동작을 이해하기 위해 x에서 하나의 데이터를 검색하여 신경망에 입력하고 오류 계산 및 가중치 업데이트로 인한 매개변수 변화를 살펴보겠습니다.

학습 루프를 돌려보세요

위의 흐름을 배치별로 수행하여 신경망을 학습시킵니다.
Dataset는 데이터와 그에 상응하는 라벨을 한 쌍 반환하고,DataLoader는 데이터를 일괄 크기로 함께 반환하는 클래스입니다.

계산 그래프 시각화

이번에 만든 3층 MLP의 구조는 torchviz라는 파이썬 패키지를 사용하여 시각화할 수 있습니다.parameters()혼자서 부족할 때 부디.

이상, MLP 회귀의 구현을 통해 PyTorch와 그 주요 PyTorch 패키지를 확인했습니다.