-> 이미지 학습, 예측에 사용
Feature Extraction
convolution(특징 뽑아내기, Image개수 증가)
pooling(Image 개개의 size를 축소)
학습(DNN)
Data 량이 많아야 된다.
정제가 잘 된 Data의 경우, Data 량이 적어도 학습이 잘 되기도 한다.
Feature의 수가 작아야 한다.
결국,
기학습 네트워크 (이미 학습된 네트워크)
Google -> Inception(convolution 45개, pooling 20개)
모델을 만든다.
Data는 Imagenet
MS -> ResNet(규모가 Inception의 3배)
그 외에도 EfficientNet, VGG, MobileNet,... 종류가 많다.
keras 에서 쉽게 사용 가능하다. 근데 모데이 워낙 크기 때문에 바로 사용은 어렵다. 다운로드를 해야 한다.
colab에서 활용해보자.
어제 만들었던 cat_dog_small
폴더의 데이터를 활용하자.
# 전이학습 모델로 VGG16 사용할 예정
# VGG16 : 전이학습 모델 중 가장 심플한 모델
# 누군가 이미 만들어놓은 VGG16 이라는 이름의 CNN 모델을 이용하자.
from tensorflow.keras.applications import VGG16
model_base = VGG16(weights='imagenet',
include_top=False,
input_shape=(150, 150, 3))
# weights='imagenet'
# imagenet의 데이터들을 가지고,
# VGG16모델을 거쳐서 나온 값들을 weights에 저장해서 가져오라는 의미
# include_top=False
# Top 부분은 우리가 직접 개, 고양이 데이터를 넣어야 하므로,
# Top 데이터는 가져올 필요 없다.
print(model_base.summary())
# 출력
# Total params: 14,714,688
# Trainable params: 14,714,688
# Non-trainable params: 0
# 학습되어있는 데이터 1400만개 보유하게 됨
최초 다운로드
출력
import os
import numpy as np
from tensorflow.keras.preprocessing.image import ImageDataGenerator
base_dir = '/content/drive/MyDrive/한국SW산업협회 교육-Java 과정/파이썬 실습/cat_dog_small'
train_dir = os.path.join(base_dir, 'train')
validation_dir = os.path.join(base_dir, 'validation')
test_dir = os.path.join(base_dir, 'test')
datagen = ImageDataGenerator(rescale=1/255)
batch_size=20
def extract_feature(directory, sample_count):
features = np.zeros(shape=(sample_count,4,4,512))
labels = np.zeros(shape=(sample_count,))
generator = datagen.flow_from_directory(
directory,
target_size=(150,150),
batch_size=batch_size,
class_mode='binary')
i = 0
for x_data_batch, t_data_batch in generator:
feature_batch = model_base.predict(x_data_batch)
features[i*batch_size:(i+1)*batch_size] = feature_batch
labels[i*batch_size:(i+1)*batch_size] = t_data_batch
i += 1
if i * batch_size >= sample_count:
break;
return features, labels
train_features, train_labels = extract_feature(train_dir,2000)
validation_features, validation_labels = extract_feature(validation_dir,1000)
test_features, test_labels = extract_feature(test_dir,1000)
수행시간 약 7분
# 위에서 이미지의 특징을 뽑아내서 학습할 데이터 생성
train_features = np.reshape(train_features, (2000,4 * 4 * 512))
validation_features = np.reshape(validation_features, (1000,4 * 4 * 512))
test_features = np.reshape(test_features, (1000,4 * 4 * 512))
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout
from tensorflow.keras.optimizers import RMSprop
model = Sequential()
model.add(Dense(256,
activation='relu',
input_shape=(4 * 4 * 512,)))
model.add(Dropout(0.5))
model.add(Dense(1,
activation='sigmoid'))
model.compile(optimizer=RMSprop(learning_rate=2e-5),
loss='binary_crossentropy',
metrics=['accuracy'])
history = model.fit(train_features,
train_labels,
epochs=30,
batch_size=20,
validation_data=(validation_features, validation_labels))
수행시간 15초
만약 25,000장의 데이터로 시작하면, 정확도가 96%정도까지 올라갈 수 있다.
Regression
Deep Learning(비정형)
Vision
NLP (자연어처리)