머신러닝

7-28 PyTorch Transfer Learning 예제-II

coding art 2019. 7. 8. 13:35
728x90

PyTorch Transfer Learning 예제 코드는 Fine TuningFixed Feature Extractor 2가지 기법을 포함하고 있다. Fine Tuning에서는 특정 Image Classification 알고리듬을 사용하여 ImageNet을 학습한 결과 중 Feature Extraction 학습 결과 웨이트 매트릭스를 그대로 가져다 학습을 위한 초기 값으로 사용하며 마지막 fully connected 레이어를 사용자 데이터의 클라스 값에 맞춰 Backporpagation 계산을 허용하면서 머신 러닝을 실행한다.




반면에 Fixed Feature Extractor 기법에서는 Feature Extraction 학습 결과 웨이트 매트릭스를 그대로 가져다 고정된 값으로 사용하면서 즉 Backpropagation을 허용하지 않으면서 마지막 fully connected 레이어에서만 사용자 데이터의 클라스 범위에 맞춰 이 부분만 학습을 실행시키는 기법으로 학습량이 크게 줄어들어 컴퓨팅 시간 소요가 줄어 든다.

 

PyToch Transfer Learning 예제의 왼쪽에 Finetuning Torchvision Models를 클릭해 들어가 보면 AlexNet을 비롯하여 PyTorch Models 라이브러리가 제공하는 9종의 Network 모델 사용 정보를 볼 수 있다. 여기서는 다루는 예제는 ResNet18 의 경우이지만 이 사이트를 잘 참조하면 AlexNet을 비록하여 다양한 네트워크 알고리듬에 대한 Transfer Learning을 시험해 볼 수 가 있을 것이다.

  

머신 러닝 기법 중에는 Stochastic Gradient Descent 기법이 있는데 데이터베이스 규모가 엄청나게 크거나 또는 온라인을 통해 데이타가 업데이트 되는 경우에 적합한 기법이다. 즉 일정부분 학습이 완료된 상태에서도 추가로 학습해야 할 데이터가 발생하면 기존의 학습 데이터 및 파라메터 데이터들을 활용하면서 추가연산을 할 수 있는 편리한 기법이며 Transfer Learning이 바로 이러한 기법이 요구되는 분야이다



 

PyTorch Transfer Learning 예제에서 사용하는 optim.SGD 옵티마이저가 바로 Stochastic Gradient Descent 기법에 해당한다. 이 예제에서는 optim.SGD로 처리된 ResNet18을 사용하여 사용자의 소량 이미지 데이터를 추가로 학습시키게 된다. 다음과 같이 라이브러리를 설정하면 ResNet18도 불러 쓸 수 있다.

 

from torchvision import datasets, models, transforms

 

한편 ResNet18을 사용하는 PyTorch Transfer Learning 예제에서 중요한 점을 지적해 두자. 물론 Transfer Learning 전혀 모르는 상태에서도 윈도우즈 10 아나콘다 스파이더3 편집기에서 무려 30분 이상 시간을 소요하면서 실행에는 성공했으며 구글에 로그인하여 Colabo GPU 모드에서도 Data Loader 부분을 처리 후 수분만에 성공적으로 실행을 완료했다. 하지만 ResNet18을 불러 사용하는 과정에서 Finetuning Torchvision Models 사이트를 참조하면서 예제 코드를 체크해 봤지만 까다로운 부분이 많아 일일이 세부적으로 분석해 보기로 한다.