강의확인
training과 inference1
- Loss
- Optimizer
- loss를 어떻게 업데이트를 할지?
- lr 스케줄러(학습할때 lerning rate를 조절하는것)
torch.optim.lr_scheduler.StepLR()
torch.optim.lr_scheduler.ConsineAnnealingLR()
torch.optim.lr_scheduler.ReduceLROnPlateau()
- Metric
- 학습에 영향을 미치진 않는다.
- 모델의 평가
- accuracy,f1-score,precision,recall
- MAE,MSE
- MRR,NDCG,MAP
- competition에서는 정해주지만 실무에서는 직접 선택해야한다.
- 어떤 metric을 사용해야할지를 알아야한다.
training
model.train()
optimizer.zero_grad()
- 배치마다 grad를 초기화
- 이전 배치에서 사용된 grad를 안쓰기위해 사용
loss = criterion(outputs,labels)
criterion = torch.nn.CrossEntropyLoss()
- 모델에 input을 넣고 forward를 진행하였을때, 각 각 연결된 모듈에 있는 grad_fn이 적용되면서 chain이 적용된다.
loss.backward()
는 이러한 grad_fn이 체인되어있는것을 거쳐가면서 계산을 진행한다.
- loss는 grad를 업데이트하기만한다. 이를 파라메터를 적용하진않는다.
optimizer.step()
- gradient accumulation
- 매번 배치마다 업데이트하기엔 부담이될때
- 하나의 배치에서 loss를 계산하고 optimizer.step과 optimizer.zero_grad를 안한다.
- 다음 배치에서 loss를 계산, step을 진행하면 중첩적으로 계산하게된다. 이후 zero_grad로 초기화해준다.
- 이렇게하면 2번의 배치마다 업데이트가 적용된다.
inference
model.eval()
with torch.no.grad():
- 검증에서는 계산과 업데이트가 필요없다.
- 조건문처럼 감싸서 진행
- 그외에 저장을 원하면 torch.save를 한다.
pytorch lightning
- 간단하게 사용하려고 만든거?
- 어느정도 머신러닝 프로세스를 알고서 해야 좋을것이다!
피어세션
- 데이터를 분리해서 모델을 따로 학습해서 앙상블할지 고민한다.
- 3개로나누기
- 3개로 나누면 확장성면에서 문제가 있지않을까 생각하심
- 데이터 불균형은?
- 부족한건 augmentation적용하려고한다.
- mnasnet,shufflenet,inception이 좋았다.
- 다들 너무 잘해서 뭘 말할게 없었다…
오피스아워
- 설정바꾸는 백그라운드필요
- 모델,loss, optimizer, loging등을 바로 바꿔서 바로 볼 수 있도록 베이스라인이 필요
- label smoothing, mixup과 같은 데이터 변형해보기
오늘 한일
어떻게 했는지
- 오늘 배운 과정을 한번 확인해보기위해 함수를 적용하여 학습을 해보았다.
- train을 위해 optimizer와 loss를 사용하여 epoch마다 계산되도록 적용
- 이전에 작성한 dataset과 model을 사용해보았다.
좋았던 점
- 피어세션에서 다들 고민하던 부분을 하는 것을 알 수 있었다.
아쉬운 점
- 피어세션에서도 데이터 분석이 더 중요하게 보였다.
- 아직 데이터부분을 제대로 다루지 못해서 일단 집중적으로 진행해야겠다고 생각했다.
- 데이터를 보는것과, augmentation하는것, 불균형을 해결하기위해 어떤 전략을 할지가 부족하다.
- 다들 학습하는것을 잘 다루는데 나는 못해서 피어세션에 끼지 못하였다.