Transfer learning from the inception model
이번 포스팅에서는 Transfer learning을 수행하는 방법에 대해서 알아보고자 한다. fig.1와 같이 ImageNet으로 학습한 가중치를 이용해 이미지 분류를 수행하는 여러 모델들이 존재한다.
이 중에 InceptionV3 모델을 로드하여 transfer learning을 설명하고자 한다.
InceptionV3를 import하고 include_top parameter가 False를 지정해줬는데 Include_top이 fig.3,4와 같이 True이면 fc계층이 존재하고 False로 하면 fc계층이 없어짐을 확인 할 수 있다.
다음으로 가중치를 불러온 후에 Convolutional Layer를 Freeze를 해준다. 이는 훈련중 가중치가 업데이트되지 않게 막는 작업으로 안해주면 Pre-trained 표현이 변경되서 쓸모 없게 된다.
Fine Tuning을 하기 위해 일부 네트워크를 동결 해제하여 사용할 수도 있다. 하위 층으로 갈수록 미세 조정에 대한 효과가 감소하기 때문에 보통 상위 계층에 대해서 일부 해제를 적용한다.
fig.4를 보면 하단 레이어가 3 x 3으로 convolved 된 것을 볼 수 있다. 하지만 좀 더 많은 정보가 있는 것을 사용하고 싶어서 모델 설명을 이동하여 mixed7을 사용하려고 한다.
mixed7 layer 를 기준으로 하단에 Fc를 추가해주고 overfitting 방지 하기 위한 하나의 방안으로 Dropout layer를 추가했다.
model compile 시 optimizer는 RMSprop를 사용했고 learing rate는 0.001로 설정했다. 이는 pre training이 모델의 가중치를 가져다가 사용했기 때문에 천천히 학습을 진행해 나가 원하는 metric에 도달하기 위함이다.