Pytorch 6~7강
6강 : AutoGrad & Optimizer
- 신경망
- 여러 layer들이 합쳐져 하나의 network를 만든다.
- 여기서 똑같은 layer들이 반복되기도 한다. <- 이러한 점이 layer와 레고 블록과 비슷하다.
- 이러한 layer는 torch에서 torch.nn.Module을 이용하여 만들 수 있다.
torch.nn.Module
- 딥러닝을 구성하는 Layer의 base class이다.
- Input, Output, Forward, Backward 정의
- 학습의 대상이 되는 parameter(tensor) 정의
nn.Parameter
- Tensor 객체의 상속 객체
- nn.Module 내에 attribute가 될 때는 required_grad=True로 지정되어 학습 대상이 되는 Tensor
- 우리가 직접 지정할 일은 잘 없다. <- 대붑분의 layer에는 weights값들이 지정되어 있다.
Module의 forward & backward
forward
- 모듈 instance를 만들고 거기에 input을 주게 되면 자동으로 foward가 실행이 된다.
-forward 전후에 hook을 집어 넣을 수 있다.
backward
- Layer에 있는 Parameter들의 미분을 수행한다.
- Forward의 결과값(model의 output=에측치)과 실제값간의 차이에 대해 미분을 수행한다.
- 해당 값으로 Parameter 업데이트
- step()함수로 Parameter 업데이트
7강 : Dataset & Dataloader
개요
- 데이터를 모으고 전처리하면 학습을 위한 Data가 만들어 집니다.
- Dataset 클래스에서 데이터에 대한 init, len, getitem등의 매직 메서드를 정의해줍니다.
- DataLoader 클래스에서 데이터를 어떤식으로 가져올지 정합니다.
- Dataset 혹은 DataLoader 부분에서 data를 transforms 클래스를 통해서 tensor로 바꿔줍니다.
- Model에 데이터를 전달하여 학습을 합니다.
- 클래스에서 getitem ()은 하나의 데이터를 어떻게 반환을 해줄지에 대해서 정의되어 있는 매직 메소드입니다.
- Dataset 클래스
- 데이터 입력 형태를 정의하는 클래스
- 데이터를 입력하는 방식의 표준화
- Image, Text, Audio 등에 따른 다른 입력정의
- init : 초기 데이터 생성 방법을 지정
- lend : 데이터의 전체 길이 지정
- getitem : index 값을 주었을 때 반환되는 데이터의 형태 정의
- Dataset 틀래스 생성시 유의점
- 데이터 형태에 따라 각 함수를 다르게 정의해야 한다.
- 모든 것을 데이터 생성 시점에 처리할 필요는 없다 : image의 Tensor 변화는 학습에 필요한 시점에 변환해도 상관없다
- 데이터 셋에 대한 표준화된 처리방법을 제공해야 한다.
- 후속 연구자 도는 동료에게 많은 도움이 된다.
- 최근에는 HuggingFace 등 표준화된 라이브러리 사용함