네이버 AI 부스트캠프 4기 P-stage : Classification 6

nask·2022년 11월 8일

CV 기초대회 8강 - Training & Inference 2 - Process

Train process

Model.train()

  • Dropout, BatchNorm 등의 함수의 상태별 적용을 위해 model을 train 상태로 변경함

optimizer.zero_grad()

  • 기존의 존재하는 grad 값을 0으로 초기화

loss = crierion(outputs, labels)

loss.backward()

  • 한 번의 backward() 실행으로 트리 구조로 연결되어 있는 next_functions 들을 모두 역전파

  • grad 업데이트(파라미터에 적용은 optimizer가 함)

optimizer.step()

  • 실제 파라미터에 업데이트된 grad을 적용

More : Gradient Accumulation

  • gpu 성능에 제한을 받지 않고 large barch size와 같은 효과를 내기 위해 사용

  • batch마다 optimizer.zero_grad()를 하지 않고 grad를 정해진 구간만큼 accumulate함

Inference process

model.eval()

  • 모델을 evaluation 상태로 만듦

  • = .train(False)

with torch.no_grad()

  • wrapper로 감싼 부분은 grad 업데이트 X

Validation check

  • 단순히 Inference process에 validation set을 넣으면 됨

  • 일반화 성능 확인 위해 validation 결과를 저장

submission

  • 최종 sumission spec을 확인 후 변환하여 제출

Pytorch Lightning

  • Keras 코드처럼 짧은 코드로 train, inference 수행(trainer.fit)

  • 생산성 측면에서 유리

  • 충분한 학습 process 이해 이후 사용 권장

0개의 댓글