📝개와 고양이 사진을 분류하는 딥러닝 Transfer Learning으로 해보기
Transfer Learning?
이미 학습이 완료된 인공지능을 가져다가 쓰는 것이다
= 내 데이터로 다시 재 학습(보강해서)해서 사용
MobileNetV2?
모바일이나 임베디드에서도 실시간을 작동할 수 있게 모델이 경량화 되면서도 정확도 또한 많이 떨어지지 않게하여 속도와 정확도 사이의 트레이드 오프 문제를 어느정도 해결한 네트워크
※ 트랜스퍼 러닝에 사용 가능한 모델들 참고하기
(https://www.tensorflow.org/api_docs/python/tf/keras/applications)
트랜스퍼 러닝은 학습이 잘 된 모델을 가져와서 나의 문제에 맞게 활용하는 것이므로
학습이 잘 된 모델의 베이스모델만 가져온다(헤드 모델은 빼고 가져온다)
※ MobileNet (architecture that we use) supports: (96, 96), (128, 128), (160, 160), (192, 192), (224, 224)
import tensorflow as tf
# 만들려는 모델의 인풋 이미지는 (128, 128, 3)으로 한다
IMG_SHAPE = (128, 128, 3)
base_model = tf.keras.applications.MobileNetV2(input_shape= IMG_SHAPE, include_top= False)
# include_top= False 헤드모델 빼고 가져오기
.summary() 하면 학습 가능한 파라미터(Trainable params)가 있다
가져온 모델의 베이스 모델 부분은 이미 1400만장 이상의 이미지로 학습이 잘 되어서 이미지의 특징을 뽑아내는 역할을 하므로 내 데이터로는 학습이 되지 않도록 한다
base_model.trainable = False
# Trainable params: 0 이 된다
헤드모델을 만들어준다
from keras.layers import Flatten, Dense
head_model = base_model.output
# 헤드모델 뒤에 플래튼을 붙인다
head_model = Flatten()(head_model)
# 헤드모델 뒤에 히든레이어를 붙인다
head_model = Dense(128, 'relu')(head_model)
# 헤드모델 뒤에 아웃풋레이어를 붙인다
head_model = Dense(1, 'sigmoid')(head_model)
베이스모델과 헤드모델을 하나의 모델로 만든다
from keras.models import Model
model = Model(inputs= base_model.input, outputs= head_model)
모델을 컴파일한다
※ 실무에서는 데이터 증강까지 하도록 한다
from keras.optimizers import RMSprop
model.compile( RMSprop(learning_rate=0.0001),'binary_crossentropy',['accuracy'] )
traing_datagen = ImageDataGenerator(rescale = 1/255.0, width_shift_range=0.2)
test_datagen = ImageDataGenerator(rescale = 1/255.0)
train_generator = traing_datagen.flow_from_directory(train_dir, target_size=(128, 128), class_mode= 'binary', batch_size= 128)
test_generator = test_datagen.flow_from_directory(test_dir, target_size=(128, 128), class_mode= 'binary', batch_size= 128)
학습 / 평가
epoch_history = model.fit(train_generator, epochs= 5, validation_data= (test_generator))
model.evaluate(test_generator)
+ 추가로 파인튜닝(Fine tuning)을 해봤다
'인공지능 > Deep Learning' 카테고리의 다른 글
[Deep Learning] 가장 좋은 모델과 기록을 자동 저장하기 ModelCheckPoint, CSVLogger (0) | 2023.01.02 |
---|---|
[Deep Learning] Transfer Learning Fine tuning (0) | 2023.01.02 |
[Deep Learning] 원본 파일을 train / test 파일로 분리하기 (0) | 2023.01.02 |
[Deep Learning] CNN 개와 고양이 사진을 분류하는 딥러닝 해보기 (0) | 2023.01.02 |
[Deep Learning] CNN TensorFlow 이미지 분류하는 딥러닝 해보기 (0) | 2022.12.30 |
댓글