데이터 제너레이터를 통해 이미지를 증강한다.
train_datagen = ImageDataGenerator(
rotation_range=40,
width_shift_range=0.2,
height_shift_range=0.2,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True,
fill_mode='nearest')
이미지 증강만 하고, 드랍아웃 없이 해본다. 오버핏팅 됨을 확인하라.
!wget --no-check-certificate \
-O /tmp/cats_and_dogs_filtered.zip
import os
import zipfile
filename = '/tmp/cats_and_dogs_filtered.zip'
zip_ref = zipfile.ZipFile(filename, 'r')
zip_ref.extractall('/tmp/cats_and_dogs_filtered')
zip_ref.close()
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPool2D, Flatten, Dense
from tensorflow.keras.optimizers import RMSprop, Adam, Adagrad, Adadelta
def build_model():
model = Sequential()
model.add(Conv2D(filters=16, kernel_size=(3,3), activation='relu', input_shape=(150,150, 3) ))
model.add(MaxPool2D(pool_size=(2,2), strides=2))
model.add(Conv2D(filters=32, kernel_size=(3,3), activation='relu'))
model.add(MaxPool2D(pool_size=(2,2), strides=2))
model.add(Conv2D(filters=64, kernel_size=(3,3), activation='relu'))
model.add(MaxPool2D(pool_size=(2,2), strides=2))
model.add(Flatten())
model.add(Dense(units=512, activation='relu'))
model.add(Dense(units=1, activation='sigmoid'))
model.compile(optimizer=RMSprop(learning_rate =0.001),
loss='binary_crossentropy', metrics=['accuracy'])
(또는 model.compile(optimizer='rmsprop' ,
loss='binary_crossentropy', metrics=['accuracy'])
return model
model = build_model()
from tensorflow.keras.preprocessing.image import ImageDataGenerator
# 학습데이터가 인공지능의 성능을 좌우하기 때문에
# 원본 이미지를 다양하게 변형시켜서 학습을 해야 성능이 좋아진다.
train_datagen = ImageDataGenerator(rescale= 1/255.0, rotation_range= 40,
width_shift_range=0.2, height_shift_range=0.2, shear_range=0.2, zoom_range=0.2,
horizontal_flip= True)
# 테스트 데이터는 이미지 증강을 해도 되고, 안해도 된다. 상황에 맞게 하면 된다.
test_datagen = ImageDataGenerator(rescale=1/255.0)
train_generator = train_datagen.flow_from_directory('/tmp/cats_and_dogs_filtered/
cats_and_dogs_filtered/train',
target_size=(150, 150), class_mode='binary')
Found 2000 images belonging to 2 classes.
test_generator = test_datagen.flow_from_directory ('/tmp/cats_and_dogs_filtered/
cats_and_dogs_filtered/validation', target_size=(150,150), class_mode = 'binary')
Found 1000 images belonging to 2 classes.
epoch_history = model.fit(train_generator, epochs=10, validation_data= test_generator)
반응형
'AI 이론 > 딥러닝 이론' 카테고리의 다른 글
데이터분리하여 이미지증강 코딩 (0) | 2021.12.06 |
---|---|
[이론] 파라미터 값(value)을 구하는 방법 (0) | 2021.12.06 |
[Learning_rate] (0) | 2021.12.02 |
[이미지 딥러닝 모델링] zipfile, optimizers, ImageDataGenerator (0) | 2021.12.02 |
[컨볼루션] Improving Computer Vision Accuracy using Convolutions (0) | 2021.12.01 |