본문 바로가기
AI-Tech 부스트캠프

[PyTorch] Training, Inference 과정

by Alan_Kim 2021. 8. 27.
728x90
반응형

모델 학습에 관한 내용이다.

Training

Training하는데 필요한 3가지 요소

Loss

  • Error Backpropagation (Backpropagation을 통해 얻은 값을 통해 가중치(weight)를 수정할 수 있다.)
  • Loss in nn.Module Family
  • loss.backward() 실행시 required_grad='false'인 파라미터만 빼고 grad 값이 업데이트
  • Focal Loss, Label Smoothing Loss

 

Optimizer

  • LR scheduler -Learning rate를 동적으로 조절
  • StepLR - 특정 Step마다 LR 감소 (scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=2, gamma=0.1)
  • CosineAnnealingLR - Cosine 함수형태로 LR 급격히 변경(scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=10m eta_min=0)
  • ReduceLROnPlateau - 더이상 성능 향상이 없을 때 LR 감소(scheduler = torch.optim.lr_scheduler.ReduceLROnPlateau(optimizer, 'min')

 

Metric

(객관적 평가를 할 수 있는 유일한 지표)

 

 

Training 준비 - 한 번 학습하기 위해 지금까지 거쳐온 과정
training 과정

  1. optimizer.zero_grad()
  2. loss= criterion(outputs, labels)
  3. loss.backward()
  4. optimizer.step() 

 

만약 큰 batch_size를 작은 GPU에서 돌려야 할 때 optimizer.step()를 매번 돌릴 것이 아니라 몇 번마다 돌려서 사용하면 효율적으로 돌릴 수 있다.(optimizer step()을 사용을 안해서 optimizer.zero_grad()도 사용을 안함)

optimizer.step()과 optimizer.zero_grad()가 매번 작동하지 않는다.

Inference Process

model.eval() = self.train(False)

 

with torch.no_grad()

 evluation은 단순히 검증하고 test만 하면 되는데 parameter를 업데이트하면 문제가 될 수 있다. (우리는 훈련하면서 weight를 다 설정했기 때문이다!)

with torch.no_grad()는 set_grad_enabled(False) 를 사용하는데 이는 모든 parameter를 업데이트하는 것을 막는다.

그렇다고 dropout(), batch_normalize() 등을 막지는 않느다.

with torch.no_grad()

추론과정에 Validation set이 들어가면 그것이 검증이다.

validation code
check point

훈련하면서 좋은 결과물들을 저장할 때 보통 validation 에서 좋은 것을 check point 저장한다.

torch.save(model.state_dict()) 모델 저장.

 

이제는 train 과정과 inference 과정을 완료해서 submission을 만들 수 있다. 

 

## 피어세션

[피어세션](https://www.notion.so/2021-08-26-4cfe07cbab664173bddaacb414bedd66)

728x90
반응형

'AI-Tech 부스트캠프' 카테고리의 다른 글

2021_08_31_(화)  (0) 2021.08.31
Ensemble(앙상블)  (0) 2021.08.27
[PyTorch] 기본 모델링 과정  (0) 2021.08.27
Data Augmentation  (0) 2021.08.27
대회 참여하기  (0) 2021.08.24

댓글