728x90
반응형
Training
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
(객관적 평가를 할 수 있는 유일한 지표)
- optimizer.zero_grad()
- loss= criterion(outputs, labels)
- loss.backward()
- optimizer.step()
만약 큰 batch_size를 작은 GPU에서 돌려야 할 때 optimizer.step()를 매번 돌릴 것이 아니라 몇 번마다 돌려서 사용하면 효율적으로 돌릴 수 있다.(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() 등을 막지는 않느다.
추론과정에 Validation set이 들어가면 그것이 검증이다.
훈련하면서 좋은 결과물들을 저장할 때 보통 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 |
댓글