minhui study

Pytorch - Optimizer 및 Training / Evaluating & Predicting 본문

딥러닝,인공지능

Pytorch - Optimizer 및 Training / Evaluating & Predicting

minhui 2021. 1. 12. 21:58

PyTorch : Optimization & Training 

 

 

 

 

* 랜덤 생성에 사용되는 시드(seed)torch.manual_seed() 명령으로 설정

* batch size : 한 번의 batch(데이터셋)마다 주는 데이터 샘플의 size

* iteration : epoch를 나누어서 실행하는 횟수

 

 

 

 

 

 

 

 

Preprocess

파이토치에서는 데이터를 좀 더 쉽게 다룰 수 있도록 유용한 도구로서 데이터셋(Dataset) 데이터로더(DataLoader)를 제공한다. 이를 사용하면 미니 배치 학습, 데이터 셔플(shuffle), 병렬 처리까지 간단히 수행할 수 있다. 기본적인 사용 방법은 Dataset을 정의하고, 이를 DataLoader에 전달하는 것이다.

 

 

Model

 

- nn.Module은 신경망 모듈로 매개변수를 캡슐화하는 간편한 방법이다.

- Convolution이란 이미지 위에서 stride값만큼 filter를 이동시키면서 겹쳐지는 부분의 각 원소 값을 곱해서 모두 더한 값을 출력하는 연산이다.

- nn.Conv2Din_channels, out_channels, kernel_size 이외에는 디폴트값이 설정되어 있다.

  • in_channels: 받게 될 channel의 갯수
  • out_channels: 보내고 싶은 channel의 갯수
  • kernel_size: 만들고 싶은 kernel(weights)의 사이즈

- Linear Module은 선형 함수를 사용하려 입려으로부터 출력을 계산하고 내부 Tensor에 가중치와 편향을 저장한다.

- forward()는 모델이 학습데이터를 입력받아서 forward propagation을 진행시키는 함수이고, 반드시 forward라는 이름의 함수여야 한다.

    * forward함수만 정의하고 나면 (변화도를 계산하는)backward함수는 autograd를 사용하여 자동으로 정의된다.

 

 

 

 

Optimization

  • ModelOptimization 설정
    - Optimizer를 정의하는데 이때  SGD 생성자에 model.parameters()를 이용하여 W와 b를 전달한다.

 

 

 

 

Before Training

  • 학습하기 전에 Model이 Train할 수 있도록 Train Mode로 변환
  • Convolution 또는 Linear 뿐만 아니라, DropOut과 추후에 배우게 될 Batch Normalization과 같이 parameter를 가진 Layer들도 학습하기 위해 준비

 

  • 모델에 넣기 위한 첫 Batch 데이터 추출

 

 

  • 추출한 Batch 데이터를 cpu 또는 gpu와 같은 device에 compile

 

 

  • gradients(기울기)를 clear해서 새로운 최적화 값을 찾기 위해 준비하고 준비한 데이터를 model에 input으로 넣어 output을 얻는다.

 

 

  • Model에서 예측한 결과를 Loss Function에 넣는다. 여기서는 Negative Log-Likelihood Loss라는 Loss Function을 사용한다.
  • Back Propagation을 통해 Gradients를 계산한다.
    * Back Propagation이란? 뽑고자 하는 target값과 실제 모델이 계산한 output이 얼마나 차이가 나는지 구한 후 그 오차값을 다시 뒤로 전파해가면서 각 노드가 가지고 있는 변수들을 갱신하는 알고리즘이다.
  • 계산된 Gradients는 계산된 걸로 끝이 아니라 Parameter에 Update

 

 

 

Start Training

→ 위의 최적화 과정을 반복하여 학습 시작

 

 

 

Evaluating & Predicting

  • 앞에서 model train()모드로 변한 것처럼 평가할 때는 model.eval()로 설정
  • Batch Normalization이나 Drop Out 같은 Layer들을 잠금

 

  • autograd engine, 즉 backpropagation이나 gradient 계산 등을 꺼서 memory usage를 줄이고 속도를 높인다.

 

Comments