-
전이학습 Transfer learningpytorch & tensorflow 2021. 6. 7. 08:28
전이 학습(Transfer learning)
데이터가 부족한 경우 훌륭하게 학습된 유사한 모델들을 재 학습하는 기법!!
CNN모델을 주로 사용한다 (Resnet, Inception, VGG)를 주로 사용
CNN(분류) 모델은 크게 봐서 2가지 모듈이 있다.
1. Feature extraction
CNN계층이 있는 칸으로 합성곱 연산을 통해 나온 가중치를 계산하는 곳이다.
계층이 깊어질 깊어질수록 세부적은 특징들을 학습 할 수 있다!!
2. Classifier
분류기 합성곱 연산으로 나온 가중치 값을 활용하여 이미지를 분류함.
각각 클래스의 점수로 나오고 가장 높은 값을 선택한다.
단순하게 입력받은 이미지를 다양한 필터를 통해 나온 값으로 최종적으로 클래스에 맞게 분류한다고 보면 된다.
전이학습이 유사한 모델을 빌려와서 재 학습 시키는 것은 알겠지만 어디를 어떻게 바꾸는지는 아직 알지 못한다.
전이학습에는 크게 3가지 전략이 있다.
1. 전체 모델을 학습 한다.
2. CNN layer, 분류기를 재 학습 한다.
3. 분류기만 재 학습 한다.
3가지 방법이 있고 3가지 내가 학습하고자 하는 방향과 처한 상황에 맞게 전략을 선택 하면 된다.
1. 전체 모델 학습
학습된 모델이 아니라 형태만 가져와서 내가 분류할 이미지를 가져와서 학습한다.
이런 경우에는 모델을 처음부터 재 학습 하는 것이기 때문에 높은 정확성을 위해 많은 데이터 양을 필요로 한다.
2. CNN layer일부 분류기 학습.
세부 조정으로 상위 계층은 그대로 두고 하위 계층을 재학습한다. 하위 계층은 문제에 독립적인 특징을 추출하고 상위 계층은 종속적인 특징을 추출한다. 내가 가진 데이터셋이 작다면 복잡한 많은 계층을 학습할 경우 오버피팅이 발생 할 수 있다. 내가 선택하여 어디 까지 학습하고 하지 않을지 정해야 한다.
3.분류기 학습
내가 분류하고자 하는 문제와 기능이 매우 유사하다면 분류기만 새로 학습하여 정확도를 개선 할 수 있다.
주의점으로는 learning rate를 작게 해야한다는 점이 있는대 재학습 하는 과정에서 이전에 학습 했던 내용들을 잊을 수 있기 때문이다.
결과 (CNN 일부 분류기 학습)
파이토치 예제에는 계층만 재학습 하는 예제는 없고 전부 혹은 분류기만 재학습 하는 코드만 제공하고 있다.
for param in model_conv.layer4.parameters(): param.requires_grad = True
를 추가하여 layer4번에도 학습이 가능하게 하자.
4에폭에서 학습이 이상하게 됐다가 다시 정상적으로 돌아온다.
'pytorch & tensorflow' 카테고리의 다른 글
VGG-16, VGG-19 Tensorflow 구현 (0) 2021.09.29 Pytorch mobile (0) 2021.06.07 Cycle gan webcam (0) 2021.06.07 Mask rcnn 빠르게 사용하기 (0) 2021.04.18 파이토치 Image segmentation (0) 2021.04.17