어떻게 딥러닝 모델을 만들까?
- 단순하게 기능만 나열한다면 보기도 힘들고 수정도 힘들 것이다
- PyTorch에는 모델을 만들기 위한 기능들을 모아 놓은 클래스를 제공한다, 이것이 바로 nn.Module이다 ! 아래의 Documents를 통해 다양한 설명을 볼 수 있다
- [Pytorch 공식 Documents](https://pytorch.org/docs/stable/generated/torch.nn.Module.html?highlight=nn%20module#torch.nn.Module)
nn.Module
- 딥러닝 모델의 Layer의 기본적인 class
- Input, Output, Forward, Backward같이 모델에 필요한 것들을 정의
- 학습의 대상이되는 parameter(tensor) 정의
레이어를 쌓는다는 것(모델 제작)은 마치 블럭을 잘조립해 무엇가를 만드는 것과 비슷하다. 똑같은 기능을 하는 레고들을 여러개 조립한 후 크게 만들 수도 있고 여러개를 무작정 섞은 채로 무언가를 만들 수도 있다.
즉, 레고를 어떻게 조립하냐에 따라 멋진 성이 될 수도 엉망진창 와진창이 될 수도 있다.
- 이때 nn.Module을 어떻게 사용/모아 놓느냐에 따라 다른 의미를 가진다
1. nn.Module에 기능들을 모아놓은 경우 basic building block이라 한다.
2. nn.Module에 basic building block인 nn.Module을 모아 놓은경우 딥러닝 모델이라 한다.
3. 2번을 모아놓으면 더욱 큰 딥러닝 모델이다.
Auto Grad
epoch이 돌아가는 과정을 살펴보자!(모델 학습을 시키는 과정)
- 모델을 학습시에는 크게 4가지 단계를 거쳐야한다
- 이전 gradient의 영향을 받지않기 위해 그레디언트를 초기화 해준다
- 모델에 input을 넣어 output을 계산한다
- loss func을 통해 output과 label의 차이를 얻고 backward를 통해서 gradients를 얻는다
- 파라미터를 업데이트 해나간다(weight update)
여기서 볼 수 있듯, 학습을 시키면서 파라미터를 수정해나가는 과정은 아!주! 중요하다
그 과정을 알아보자
- 모델을 학습시킬 때 Forward의 결과값(output)과 label(실제값)의 차이(loss)에 대해 미분을 수행하며 해당 값으로 파라미터를 업데이트 시켜야한다
- pytorch는 backward함수를 통해 자동 미분을 지원한다!
반응형
'⌨Programming > Pytorch' 카테고리의 다른 글
[pytorch]모델저장&불러오기 (0) | 2022.01.27 |
---|---|
[pytorch]Pytorch란 ? (0) | 2022.01.25 |