일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- python3
- 백준
- dfs
- 구현
- 주간회고
- 단계별문제풀이
- 부스트캠프_AITech3기
- 알고리즘_스터디
- ODQA
- 기술면접
- 이진탐색
- 그래프이론
- dp
- 이코테
- 프로그래머스
- 다시보기
- 정렬
- Level2_PStage
- 파이썬 3
- 개인회고
- 알고리즘스터디
- 최단경로
- Level1
- 백트랙킹
- Level2
- 부스트캠프_AITech_3기
- 그리디
- mrc
- 다이나믹프로그래밍
- U_stage
- Today
- Total
국문과 유목민
[일일 리포트] Day 28 (Level1_PStage_2) 본문
해당 일일리포트에서는 네이버 커넥트에서 진행하는 '부스트캠프 AI Tech 3기'에서 배운 내용을 다루고 있습니다. 저작권 이슈 때문에 관련 자료를 올릴 수는 없기에 핵심 이론과 코드를 요약해서 올리고 있기에 내용이 부족할 수 있습니다.
▶ Today I Learned (핵심 요약 정리)
AutoML 구현
NNI를 이용해서 HyperParameter를 구현하고자 했다. 하이퍼 파라미터 튜닝의 경우 어떻게 하느냐에 따라서 모델의 성능에 영향을 미칠 수 있다. 물론 그 효과가 다이나믹하지는 않을 것 같지만, 최적의 모델을 찾는 과정에서 하이퍼 파라미터 값에 신경이 많이 쓰이기에 미리 구현하면 실험에 편리할 것 같다는 생각에 먼저 구현을 하고자 했다. 설치는 그렇게 어렵지 않다.
- 설치
python3 -m pip install --upgrade nni
- 예제코드 실행
nnictl create --config nni/examples/trials/mnist-pytorch/config.yml
- 자신의 코드의 이식
예제코드 내 nni를 import하는 부분만 내 코드에 이식하면 됨
# nni/examples/trials/mnist-pytorch/mnist.py
import nni
from nni.utils import merge_parameter
...
# report intermediate result
nni.report_intermediate_result(test_acc)
logger.debug('test accuracy %g', test_acc)
logger.debug('Pipe send intermediate result done.')
# report final result
nni.report_final_result(test_acc)
logger.debug('Final result is %g', test_acc)
logger.debug('Send final result done.')
...
if __name__ == '__main__':
try:
# get parameters form tuner
tuner_params = nni.get_next_parameter()
logger.debug(tuner_params)
params = vars(merge_parameter(get_params(), tuner_params))
...
특강 시간에 멘토님께서 설명해주신대로 강의를 다시 보면서 초기 설정은 쉽게 할 수 있었다. 하지만 강의대로 진행했는데 작업을 하려고 하니 문제가 생겨서 한 2시간 넘게 찾은 끝에 변수 설정을 잘못 했다는 것을 확인할 수 있었다. 강의에서도 맨 끝부분에 오류를 추가적으로 디버깅하는 부분이 있었다는 것을 오류를 찾고서야 알았다.
아무튼 해당 라이브러리를 이용해서 모델 3개와 2개의 하이퍼파라미터 튜닝을 시도했는데, 어떻게 잘 될지 모르겠다. 내일 아침에 일어나서 한 번 확인해봐야겠다.
CoAtNet구현
링크1: CoAtNet practice: use CoAtNet to classify plant seedlings (pytorch)
링크2: CoAtNet Git
논문: https://arxiv.org/abs/2106.04803
ImageClassfication의 SOTA모델이라고 하는 CoAtNet을 사용해서 Classification을 진행해봤다. batchsize와 learning_rate, optimiezer, lr_scheduler를 변경하면서 실험을 진행했. 우선 결론부터 말하자면, test_accuracy와 f1score의 최고 점수는 각각 (0.706, 0.711)로 높지 않았으며, 제출 시에도 f1score_0.4557, accuracy_53.2857이 나왔다. 이전에 EfficientNet한 것보다는 높게 나왔는데 여전히 아쉽다.
- CoAtNet은 모델의 크기에 따라서 0~4까지 있는데, 0 모델과 3 모델을 돌려봤다. 3모델의 경우 파라미터 수가 0모델보다 훨씬 많아 학습 속도가 많이 느렸다. (참고로 ImageClassification SOTA모델은 CoAtNet7이다.)
- CoAtNet은 https://programmer.ink/think/coatnet-practice-use-coatnet-to-classify-plant-seedlings-pytorch.html에서 참고한대로 하이퍼파라미터 값을 기본으로 주고 학습을 진행했다.
- batch size 32와 16으로 돌렸을 때 16이 그나마 성능이 더 괜찮아서 16으로 해서 주로 실험을 진행했다. batchsize가 작기에 lr도 1e4로 설정했다. Optimizer도 다양하게 변경해서 Adam, SGD, AdamW를 활용했다. SGD의 경우 학습 속도도 너무 느렸으며, 30Epoch 정도에서 EarlyStop되었고, Adam과 AdamW의 경우 3 Epoch부터 과적합되기 시작하더니 loss가 상승하는 문제가 발생했다.
여기까지 실험하면서 내가 모델을 잘못 사용하고 있는 것 같다는 생각이 드는 것 같다. 우선 여기까지 하고 조금 더 튜닝하기 쉬운 모델로 넘어가서 모델을 돌려봐야 할 것 같다. 우리가 하려는 Task에 어울리지 않는 모델이었을 수도 있을 것 같다는 생각을 했다. 내일 만약에 하게 된다면, https://github.com/xmu-xiaoma666/External-Attention-pytorch 해당 포스팅을 추가로 참고해서 해봐야겠다.
▶ Review (생각)
오늘은 진짜 모델링만 했던 하루라고 얘기할 수 있을 것 같다. 주말동안에는 EfficientNet에 빠져서 계속 하고, 오늘은 CoAtNet에 빠져서 파라미터 값을 변경하면서 계속해서 실험을 한 것 같다. 그런데 뭔가 의미있는 성과를 얻지 못한 것 같아서 아쉽다. 애초에 너무 큰 모델을 하려고 마음 먹은게 패착이었을 수도 있을 것 같아서 Resnet과 같은 비교적 간단한 모델로 학습을 진행해보려고 한다.
AutoML을 구현하는데도 꽤나 애를 먹었는데 사용하는 순간까지도 애를 먹고 있다...밤 동안에 모델을 학습시키고 싶어서 server에서 구동하려고 하는데, 서버에서 구동하고자 하니 왜인지 모르지만 Fail이 뜨고 이 조차도 서버 내 localhost로 켜져서 확인도 안 된다...진짜 어지럽다 어지럽다 하니까 오늘 또 머리까지 아파서 시간도 제대로 못 썼다. 끼니 거르지 말고 너무 스트레스 받지 말고 해야겠다. 내일은 ResNet을 돌려봐야겠다
(AutoML구현 안 했으면 모델 다 돌려봤겠네...)
'IT 견문록 > 2022_부스트캠프 AITech 3기(100일)' 카테고리의 다른 글
[일일리포트] Day 30 (Level1_PStage_4) (0) | 2022.03.02 |
---|---|
[일일리포트] Day 29 (Level1_PStage_3) (2) | 2022.03.01 |
[6주차] 개인 회고 (0) | 2022.02.25 |
[일일 리포트] Day 27 (Level1_PStage_1) (0) | 2022.02.25 |
[일일 리포트] Day 26 (0) | 2022.02.24 |