7-30 PyTorch Transfer Learning 예제-IV : Fine Tuning 모델 준비

in #kr5 years ago

실제로 필요한 모델은 아래와 같이 Fine Tunnuing 영역에서 라이브러리 models 가 제공하는 ResNet18을 호출하여 model_ft 로 둔다. _ft 는 fine tinning 의 약자인 듯하다. 아울러 model_ft.fc.in_features 는 결국 ResNet18에서 제공하는 in_features 값인 셈이다. 물론 ResNet 말고도 AlexNet을 사용하더라도 마찬가지로 model_ft.fc.in_features에 의해 fully connected 에 입력되는 데이터 수 값을 넘겨받아야 할 것이다.
ImageNet 이 다루는 classification 종류가 1000 임에 반해 이 Transfer Learning 예제 문제에서는 개미(ants) 와 벌(bees) 2종을 식별하는 문제이다. 물론 ResNet18 의 fully connected 레이어에서 다루는 네트워크 규모는 model_ft.fc.in_features X 1000 즉 num_ftrs X 1000 이지만 Transfer Learning 예제에서는 num_ftrs X 2로 변경해야 할 것이다.

noname01.png

model_ft = model_ft.to(device)는 cpu 나 GPU에 model_ft를 써 넣는 명령이다. Loss 함수를 뜻하는 criterion 은 CrossEntropy 형을 사용한다. 즉 TensorFlow 로 치자면 Softmax를 사용한다는 의미일 것이다.

옵티마이저는 Stochastic Gradient Descent 즉 optim.SGD를 사용하기로 한다. optim.SGD 에 넣어주는 model_ft.parameters() 는 결국 ResNet18의 feature extraction 부분의 전체 웨이트 매트릭스를 뜻한다. 아울러 옵티마이저 사용에 있어서 학습 횟수가 증가함에 따라 어댑티브한 lr_scheduler 를 사용하기로 한다.
Fine Tuning 코드가 완료되면 Fixed Feature Extractor 코드가 이어진다.

코드 구조를 상펴 보면 Fine Tuning 과 거의 유사하지만 model_conv 의 파라메터들 즉 웨이트 매트릭스를 뽑아내어 reuires_grad를 False 로 선언해 두어야 고정된 상수 값이 되어 Backpropagation 계산이 금지된다.

noname02.png

PyTorch Transfer Learning 예제를 실행시키기 위해서 필요로 하는 모든 라이브러리들을 모두 한 번에 불러들이자. 아울러 런타임 유형변경에서 GPU를 미리 설정 연결해 두도록 한다. 한편 헤더 영역에 라이브러리를 불러 선언하는 것이 첫 번째 작업이긴 하지만 이어지는 데이터 로딩을 위해서는 Colabo 에서 data 폴더를 준비하는 작업이 선행되어야 하며 단순 작업이긴 하지만 시간이 소요된다.

PyTorch Transfer Learning Tutorial 예제에서는 CIFAR-1-처럼 자동적으로 데이터 로딩이 이루어지지 않는다. 다음과 같이 Colabo의 업로딩 기능을 사용하면서 간단한 리눅스 명령들을 사용하여 Colabo 내에 data 디렉토리를 형성해 주어야 한다. 주의할 점은 Colabo 와의 연결이 단절되면 준비해 둔 데이터들이 사라질 수도 있으므로 유의해야 한다. 한번 연결되면 24 시간 유효하다고 하므로 당일 실행해 보는데 아무런 문제는 없을 것이다.

noname03.png

IV 로 계속 예정

마나마인로고.png

Coin Marketplace

STEEM 0.27
TRX 0.13
JST 0.032
BTC 61562.85
ETH 2891.34
USDT 1.00
SBD 3.43