AI 이론/딥러닝 이론

[Image Augmentation] 이미지 데이터 증강하는 코드 작성법

jasonshin 2021. 12. 2. 17:49

데이터 제너레이터를 통해 이미지를 증강한다.

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,1503) ))
    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.0rotation_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=(150150), 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)
 

 

반응형