본문 바로가기
딥러닝 머신러닝 데이터 분석/BoostCampAITech

[ BoostCamp ] Day-18 학습로그( PyTorch pretrained model )

by SteadyForDeep 2021. 8. 20.
반응형

1) 강의 복습 내용

 

최근에는 MLOps 같은 내용들이 부각되면서

이미 잘 나와있는 좋은 모델들을 어떻게 하면 더 잘 쓸 수 있을까를 고민하는 시대가 왔다.

거기의 중심에는 pretrained model이 있고

이 모델들을 내 데이터에 맞게 fine tunning 하여서 원하는 성능을 끌어내는

그런 작업이 굉장히 널리 쓰이는 중이다.

 

테스크를 설계하고 데이터를 처리하고 모델을 트레이닝하고 하이퍼파라미터를 조정하는 일은

굉장히 고통스러운 일이기 때문에.. 이런 과정들을 최대한 줄이고

거기서 발생하는 리스크도 통제가 가능하다는 것이 fine tunning의 큰 장점이다.


PyTorch에서는 모델을 저장하는 방법을 2가지 정도 제공한다.

첫번째는 모델의 파라미터만을 저장하는 방식이고

이 경우에는 파라미터의 사용자가 모델의 구조를 정확하게 알고 있고 재현까지 가능하다는 것을 깔고간다.

모델을 그대로 복원하여서 거기에 파라미터를 덧입히는 방식으로 불러오기 때문에

모델의 구조를 알고있어야만 사용이 가능한 방법이다.

 

두번째 방법은 모델의 architecture를 함께 저장하는 방법인데

이 경우는 그냥 모델을 슥 꺼내오기만 하면 바로 사용할 수 있다.

이게 더 좋아보이지만 사실 코드를 공유하는 것은 간단한 일이라서

보안상의 이유로 모델의 구조를 숨겨야하는 경우가 아니면

그렇게 권장되는 스타일은 아니다.


모델을 훈련해서 최종적인 결과물을 저장하는 것도 좋은 방법이지만

논문을 쓰거나 새로운 모델을 개발해야한다면 checkpoints 기능을 반드시 사용해야한다.

모델의 모든 정보와 state를 dict 형식으로 저장하고 꺼내쓸 수 있는 아주 좋은 기능이라

자는 동안 모델이 돌아가고 결국 overffiting 까지 갔다면 최적으로 학습된 순간을 불러올 수 있어서 좋은 기능이다.


충격적이게도 tensorboard를 PyTorch에서 정식지원한지가 꽤 되었다.

그리고 TensorFlow 보다 더 쉽게 쓸 수 있다.... ㅎㄷㄷ

디테일은 공식문서 참조

https://pytorch.org/docs/stable/tensorboard.html

 

torch.utils.tensorboard — PyTorch 1.9.0 documentation

torch.utils.tensorboard Before going further, more details on TensorBoard can be found at https://www.tensorflow.org/tensorboard/ Once you’ve installed TensorBoard, these utilities let you log PyTorch models and metrics into a directory for visualization

pytorch.org

 

 

 

2) 과제 수행 과정 / 결과물 정리

 

이미 학습된 모델을 가져와서 fine tunning 한다.

 

말이 너무 쉬워서 그냥 받아들이게 되는 정도다.

항상 느끼는 것이지만 이런 말들이 가장 위험하다.

뭔가 알고있다고 느끼게 하기 때문에 막상 코드를 짜려면 엄청 헤매게 된다.

 

그래서 역시 과제를 풀어보는게 엄청난 자산이다.

 

과제는 이미 ImageNet으로 잘 학습된 ResNet18을 이용하여

hand-writing MNIST와 Fashion MNIST에 성능을 내는 모델을 만드는 것이었다.

convolution의 특성상 입력데이터의 spatial dimension의 영향을 받지 않기 때문에

입력은 어찌어찌 넣을 수 있을것 같았으나 두 MNIST데이터는 모두 gray scale 이기 때문에

채널을 3으로 늘려주는 작업이 필요했다.

앞단에 conv를 한번 더 할수도 있으나 여기서는

모델의 conv 레이어를 채널 1짜리 conv 레이어로 바꿔주는 작업을 한다.

이 층에 대해서만 initialize도 한번 해준다.

동적 계산 그래프를 지향하는 PyTorch의 저력이 한번더 발휘되는 순간이다.

이걸 session으로 하려고 생각하면 머리가 지끈거린다.

 

그리고 ImageNet 보다 MNIST는 class의 수가 현저히 적다.

따라서 마지막 fully-connected 층을 nn.Linear로 재선언하여

원하는 만큼의 output node를 가지도록 해준다.

 

이렇게 하고 훈련을 하면 되는 것인데

훈련을 할때 hyper parameter search를 실습해보도록 자료를 제공해 주셨다.

ray 라는 패키지를 이용하여서 여러개의 모델을 계속해서 돌려보고

최적의 hp를 찾는 방식이었는데 역시 오래걸리긴 오래걸린다.

 

이 부분은 더 공부를 하고 포스팅을 따로 하겠다.

 

3) 피어세션 정리

 

 

4) 학습 회고

 

반응형

댓글