brunch

You can make anything
by writing

C.S.Lewis

by 유윤식 May 02. 2019

Python: m.l with Keras #11

VGG16, Pre-trained Model == '전이학습'

기학습된 모델을 사용해서 나만의 모델을 만드는 일이 그리 어렵지 않다.


이 전에 얼굴인식 관련 포스트를 돌아보면,

우리는 VGG-Face.h5 가중치 정보를 통해서 얼굴의 특징을 찾고,

나만의 Input 과 Output 정보를 완전연결하는 방식으로,

꽤 괜찮은 모델을 만들었다.


이미 사전에 스터디를 마치고 다시 한 번 정리하는 과정에서

아는 내용은 아는대로 복습하고,

새롭게 발견하거나, 깨달은 부분에 대해서 언급하려고 한다.


1. 기학습된 모델(Pre-trained Model)을 사용할 때에는, 학습량 조절이 필요하다.

2. 가중치 학습에 해당하는 Param을 동결시켜 준다.

3. GPU 필수!


이전 글에서 강아지 vs. 고양이 분류 모델을 만드는 부분을 잠깐 언급했다.

사실, 코드가 너무 잘 돌아다녀서(?) 쉽게 접근하고 스스로 공부할 수 있는 환경이다.


아마도 자신들의 실력과 수준에서 이해하고 깨달은 부분들이 다를 것이라고 생각한다.


VGG16 이라는 이름의  라이브러리를 통해서

imagenet  이라는 사전 학습된 모델을 가지고와서 학습을 진행한다.

데이터는 강아지와 고양이를 보여주는 사진이다.



from keras.applications import VGG16 

vgg_model = VGG16(weights='imagenet',

                                     include_top=False,                  

                                     input_shape=(150, 150, 3))



간략하게 모델 구성을 살펴보면,

VGG16 - imagenet

보여지는 layer 층들은 사용자가 직접 바꿀 수 있지만!

난 안바꾼다. 바꿔보았지만, 성능이 썩 좋아지는 결과는 없었다.


결과적으로 vgg_model 에서 Input 과 연결하려는 Output 을 제외한

모든 layer의 trainable을 False로 해주는게 핵심이다.


이미 잘 학습되고 특징을 잘 찾을 수 있도록 설계되어 있는 상위층에 대해서

함부로 손을대는(튜닝?) 행동은 모험이다.

그 모험은 각자 해본다.


GPU 필수!


참고로 Input 에 해당하는 값은 하드코딩으로 (None, 150, 150, 3) 값을 주었다.

vgg_model 에서도 같은 값을 볼 수 있다.

몇 개의 샘플을 사용 할 지 모르니 None,

가로축의 크기를 150으로 하였으니 150,

세로축의 크기도 150으로 하였으니 150,

컬러 이미지를 사용하니 channel 을 3,


이렇게 값을 변경하여 사용한다. (None, 200, 200, 3)도 가능하다.

이미지 데이터를 전처리 하는 과정에서 가로, 세로의 길이를 맞춰서 조정한다.


학습하는 코드는 이전 글에 남겨둔 링크를 통해서 Python Notebook으로 제공 받을 수 있다.


바로 결과!

시간에 지나면서 더 많은 반복학습이 진행됨에 따라서 과적합이 발생 할 수 있다.


GPU 필수!


GPU 사용 상태를 나타낸다.

>> watch -n 1 -x nvidia-smi

명령어를 통해서 모니터링 할 수 있다.


더 많은 이야기는 책으로 확인하거나,

제공하는 Github 소스를 통해서 확인 할 수 있다.


끝.

작가의 이전글 Python: m.l with Keras #10
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari