이 글에서는 사전 훈련된 네트워크에서 Transfer Learning(전이 학습)을 사용하여 이미지를 분류하는 방법을 다룬다.
IMG_SHAPE = (128, 128, 3)
base_model = tf.keras.applications.MobileNetV2(input_shape = IMG_SHAPE, include_top = False)
이미 만들어져서 학습이 완료된 모델을 가져오되, 헤드모델은 제외한 베이스모델만 가져온다.
base_model.trainable = False
우리가 가져온 모델의 베이스모델 부분은특징을 잡아내는 역활을 하므로, 학습이 되지 않도록 한다.
head_model = base_model.output
head_model = tf.keras.layers.GlobalAveragePooling2D()(head_model)
head_model = tf.keras.layers.Dense(128, 'relu')(head_model)
head_model = tf.keras.layers.Dense(1, 'sigmoid')(head_model)
head_model을 정의해준다.
model = tf.keras.models.Model(inputs = base_model.input, outputs = head_model)
model.compile(tf.keras.optimizers.RMSprop(0.0001), 'binary_crossentropy', ['accuracy'])
베이스 모델과 헤드모델을 합쳐서, 하나의 모델으로 변수로 만들어 준다.
이후 model.fit을 하면 된다.
'인공지능 > 텐서플로우' 카테고리의 다른 글
에포크시 콜백함수 ModelCheckpoint CSVLogger 사용방법 (0) | 2022.06.16 |
---|---|
Fine Tuning을 하기위한 코드와 설명 (0) | 2022.06.16 |
파일을, training과 test 디렉토리로 나눠서 저장하는 방법 (0) | 2022.06.15 |
ImageDataGenerator를 이용해서 데이터 증강 하는 방법 (0) | 2022.06.15 |
이미지 파일을, 학습데이터로 만드는 방법 (텐서플로우의 ImageDataGenerator) (0) | 2022.06.15 |