【속습】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 등의 파라미터 최적화 알고리즘을 사용할 수 있도록 한다. |
모델 구현
데이터세트 만들기
이번에는 연습용 데이터로 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 패키지를 확인했습니다.
토론
코멘트 목록
아직 코멘트가 없습니다.