Transfer Learning으로 개, 고양이 사진분류하는 인공지능 만들기
Transfer Learning이란?
: 이미 학습이 완료된 인공지능을 가져다가 내 데이터로 다시 재학습해서 사용하는 것이다
이번학습에서 사용할 모델인,
MobileNetV2 이란?
모바일이나 임베디드에서도 실시간을 작동할 수 있게 모델이 경량화 되면서도
정확도 또한 많이 떨어지지 않게하여 속도와 정확도 사이의 트레이드 오프 문제를 어느정도 해결한 네트워크이다
트랜스퍼 러닝에 사용되는 모델들은 홈페이지에서 확인이 가능하다
https://www.tensorflow.org/api_docs/python/tf/keras/applications
Module: tf.keras.applications | TensorFlow v2.16.1
DO NOT EDIT.
www.tensorflow.org
트랜스퍼 러닝하기
- 학습이 잘된 모델을 가져와서 나의 문제에 맞게 활용 해야한다
- 학습이 잘된 모델의 헤드 모델은 제외하고 베이스 모델만 가져온다
- 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)
# include_top= False 헤드모델 빼고 가져오기
base_model = tf.keras.applications.MobileNetV2(input_shape=IMG_SHAPE,
include_top=False,
weights='imagenet')
# 베이스 모델 써머리 마지막 값
base_model.summary()
>>>
=============================================
Total params: 2257984 (8.61 MB)
Trainable params: 2223872 (8.48 MB)
Non-trainable params: 34112 (133.25 KB)
______________________________________________
base_model.summary() 하면 학습 가능한 파라미터(Trainable params)가 있다
가져온 모델의 베이스 모델 부분은 이미 1400만장 이상의 이미지로 학습이 잘 되어 있어서
이미지의 특징을 뽑아내는 역할을 잘 하고 있으므로 내 데이터로는 학습이 되지 않도록 한다
base_model.trainable = False
base_model.summary()
>>>마지막
==========================================
Total params: 2257984 (8.61 MB)
Trainable params: 0 (0.00 Byte)
Non-trainable params: 2257984 (8.61 MB)
___________________________________________
헤드모델을 만들어준다
from keras.layers import Flatten, Dense
head_model = base_model.output
# ANN은 기존 시퀄셜(모델)을 만들어두고 레이어를 .add로 추가했다
# CNN은 전체구조 없이 가져와서 하는 작업이기 때문에 만드는 구조가 다르다
# 텐서플로우의 함수용 사용 방법
# 헤드모델 뒤에 플래튼을 붙인다
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(0.0001), loss='binary_crossentropy', metrics=['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=val_generator)
model.evaluate(test_generator)
'MACHINE | DEEP LEARNING > Deep Learning Project' 카테고리의 다른 글
[AI] 딥러닝 Transfer Learning _ Fine tuning (0) | 2024.04.23 |
---|---|
[AI] 딥러닝 텐서플로우 CNN 이미지 분류 인공지능 만들기 (0) | 2024.04.19 |
[AI] 딥러닝 이미지증강 ImageDataGenerator _ 이미지 파일 학습데이터로 만들기 (0) | 2024.04.19 |
[AI] 딥러닝 파이썬으로 압축 파일 풀기 _zipfile (0) | 2024.04.18 |
[AI] 딥러닝 CNN 풀링 Pooling (Downsampling) (0) | 2024.04.18 |