Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Pretrained network #10

Open
xown3197 opened this issue May 30, 2019 · 0 comments
Open

Pretrained network #10

xown3197 opened this issue May 30, 2019 · 0 comments
Labels
data image data preprocessing

Comments

@xown3197
Copy link
Collaborator

xown3197 commented May 30, 2019

feature extraction(특성 추출)

  • 미리 학습된 모델에서 fully-connected layer(완전 연결 층) 네트워크 이전까지, 즉 convolution layer(합성곱 층)까지의 가중치들을 그대로 가져옵니다. ~ convolution layer는 freezing(동결)시킵니다.
  • 케라스 코드 ~
    keras.applications.모델명(weight='사전 학습할 데이터셋', include_top='False or True', input_shape=(input shape))
 모델명(ex VGG16, Inception V3, Xception, ResNet50, MobileNet 등)
 weight : 주로 'imagenet' 을 사용
 include_top : fully-connected layer을 포함시킬지 결정, False는 미포함, True 포함

현재 프로젝트에서는 tensorflow hub를 이용하여 학습된 모델을 불러옴.
이에 관련된 예제코드 https://www.tensorflow.org/tutorials/images/hub_with_keras

  • 새로운 데이터들을 모델과 연결한 뒤, fully-connect layers 층을 쌓은 후 결과 값을 출력
    현 프로젝트에서는 keras.models.Sequential() //단일 계층을 쌓기위한 포문을 사용
  • 미리 학습된 모델에서 전체를 사용하지 않거나, 합성곱 층을 사용하고 완전 연결 층은 사용하지 않는 이유에는 완전 연결 층은 객체의 클래스 분류에 특화되어 있고, 합성곱 층(컨브넷)은 깊어 질수록 층마다 데이터의 특성(하위 층(에지, 색깔, 질감등), 상위층(눈, 귀, 의자등))을 필터링하는 것에 특화가 됩니다. 이러한 층들의 특화때문에 사전에 학습된 데이터셋과 다른 종류의 데이터를 입력할 때, 완전 연결 층은 데이터에 맞는 클래스 분류가 주류이기에 다른 클래스를 가진 다른 종류의 데이터에는 쓸모가 없고, 합성곱 층은 특성을 필터링하는 능력이 다른 데이터에도 적용이 되어 유용한 역할을 합니다. 단, 합성곱층이 깊이에 따라 재사용성은 크게 비례합니다.

fine tuning(미세 조정)

  • fine tuning은 feature extraction에서 합성곱 층의 상위 몇 개의 층을 freezing(동결)을 푼 방법입니다.
  • 모델을 재사용함에 있어, 합성공 상위 층의 가중치를 새로운 데이터에 맞게 학습하여 데이터에 조금 더 적합한 모델을 만드는 방법입니다.
  • 합성곱 층에서 하위 층들은 조금 더 일반적인 특성을 가진 층이라면, 상위 층들은 데이터에 특화된 특성을 필터를 가지고 있기 때문에, 상위에서 하위층을 가중치를 새롭게 학습할수록 효과가 감소합니다. 그렇기 때문에 상위 층 2 ~ 3개만 새롭게 학습하는 것이 좋습니다.
  • 주의 할 점은 동결을 풀지 않은 층이 학습이 되지 않도록 다시 잘 동결해줘야합니다.

ps. 주로 ImageNet 데이터 셋(1,400만개의 레이블된 이미지와 1,000개의 클래스)으로 학습된 모델이 많이 쓰임

참고

  • tensorflow hub https://tfhub.dev/
  • 케라스 창시자에게 배우는 딥러닝(저자:프랑소와 숄레)
@sorachin sorachin added the data image data preprocessing label May 30, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
data image data preprocessing
Projects
None yet
Development

No branches or pull requests

2 participants