본문 바로가기
IT 프로그래밍 관련/딥러닝

CNN ImageDataGenerator 활용 (모델링)

by 지나는행인 2021. 3. 2.
728x90

ImageDataGenerator를 활용하여, 사진파일을 간편하게 전처리 할 수 있다.

 

라이브러리

import tensorflow.keras
from keras.models import Sequential
from keras.layers import Dense,Flatten,Conv2D, MaxPooling2D, Dropout

 

모델링

model = tf.keras.models.Sequential()

# Adding first CNN layer
model.add( Conv2D ( 32, ( 3,3 ), activation= 'relu', padding='same', input_shape=( 32,32, 3 )  ))

# Adding maxpool layer
model.add( MaxPooling2D( 2, 2 ))

# adding second CNN layer and maxpool layer
model.add( Conv2D( 63, (3,3), activation='relu', padding='same' ) )
model.add( MaxPooling2D( 2, 2 ) )

# Adding Flattening layer
model.add(Flatten() )

# Adding the dropout layer
model.add(Dropout(0.4))

# Adding fully connected layer
model.add( Dense( 128, activation='relu' ) )

# Adding output layer
model. add (Dense ( 1, activation='sigmoid' ) )

 

 크기가 32 X 32 인 간단한 모델.

 

 

컴파일

model.compile( optimizer='adam', loss= 'binary_crossentropy', metrics=['accuracy'])

optimizer는 'adam'  ,

두가지의 분류의 문제이기 때문에

loss함수는 'binary_crossentropy'를 사용하고, 위에 activation함수로 'sigmoid'를 사용

정확도를 보기위한 metrics의 'accuracy'

 

 

ImageGenerator로 trainining_set, test_set 만들기.

from tensorflow.keras.preprocessing.image import ImageDataGenerator

training_data_dir =  '/content/training_set/training_set'
test_data_dir =  '/content/test_set/test_set'

train_datagen = ImageDataGenerator(rescale= 1 / 255.0, rotation_range=40, width_shift_range=0.2, height_shift_range=0.4, shear_range = 0.2, zoom_range=0.2, horizontal_flip=True, vertical_flip=True, fill_mode='nearest')
test_datagen = ImageDataGenerator( rescale=1/255.0)

train_generator = train_datagen.flow_from_directory( training_data_dir, target_size=(150, 150), batch_size=20, class_mode='binary' )
test_generator = test_datagen.flow_from_directory( test_data_dir, target_size=(150, 150), batch_size=20, class_mode='binary' )

model.fit(train_generator, steps_per_epoch=100, epochs=100, validation_data=test_generator, validation_steps=50)

ImageDataGenerator를 만들때 여러가지의 파라미터를 설정해줌으로, 전처리를 할 수 있다.

( rescale , rotation_range, width_shift_range, height_shift_range, shear_range, zoom_range, horizontal_flip, 

vertical_flip, fill_mode )

flow_from_directory method로  ImageDataGenerator를 씌워준다.  ( 설정된 경로에 , 설정된 전처리를 함.)

 

마지막으로 fit 해준다.

( test_set은 하지 않았다.)

 

 

댓글