import tensorflow as tf
from tensorflow import keras
import os
import matplotlib.pyplot as plt
url = 'https://storage.googleapis.com/mledu-datasets/cats_and_dogs_filtered.zip'
path_to_zip = keras.utils.get_file(fname='cats_and_dogs_filtered.zip',
origin=url, extract=True,
cache_dir='/content')
train_dir = '/content/datasets/cats_and_dogs_filtered/train'
validation_dir = '/content/datasets/cats_and_dogs_filtered/validation'
from tensorflow.keras.preprocessing.image import ImageDataGenerator
# 모든 이미지를 1/255로 스케일을 조정합니다
train_datagen = ImageDataGenerator(rescale=1./255)
validation_datagen = ImageDataGenerator(rescale=1./255)
train_generator = train_datagen.flow_from_directory(
directory=train_dir,
target_size=(150, 150),
batch_size=20,
shuffle=True,
class_mode='binary'
)
validation_generator = validation_datagen.flow_from_directory(
directory=validation_dir,
target_size=(150, 150),
batch_size=20,
class_mode='binary'
)
# CNN 모델 디자인 및 학습 정보 설정
from tensorflow.keras import models, layers
model = models.Sequential()
model.add(layers.Conv2D(filters=32, kernel_size=(3, 3),
activation='relu',
input_shape=(150, 150, 3)))
model.add(layers.MaxPool2D(pool_size=(2, 2)))
model.add(layers.Conv2D(filters=64, kernel_size=(3, 3),
activation='relu'))
model.add(layers.MaxPool2D(pool_size=(2, 2)))
model.add(layers.Conv2D(filters=128, kernel_size=(3, 3),
activation='relu'))
model.add(layers.MaxPool2D(pool_size=(2, 2)))
model.add(layers.Conv2D(filters=128, kernel_size=(3, 3),
activation='relu'))
model.add(layers.MaxPool2D(pool_size=(2, 2)))
model.add(layers.Flatten())
model.add(layers.Dense(units=512, activation='relu'))
model.add(layers.Dropout(0.3))
model.add(layers.Dense(units=1, activation='sigmoid'))
model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['accuracy'])
# 모델에 데이터 generator 연결 후 학습
history = model.fit(train_generator,
steps_per_epoch=len(train_generator),
epochs=20,
validation_data=validation_generator,
validation_steps=len(validation_generator))
# 모델의 학습과정 시각화
acc = history.history['accuracy']
val_acc = history.history['val_accuracy']
loss = history.history['loss']
val_loss = history.history['val_loss']
epochs = range(len(acc))
plt.plot(epochs, acc, 'bo', label='Training acc')
plt.plot(epochs, val_acc, 'b', label='Validation acc')
plt.title('Training and Validation Accuracy')
plt.legend()
plt.show()
plt.plot(epochs, loss, 'bo', label='Training loss')
plt.plot(epochs, val_loss, 'b', label='Validation loss')
plt.title('Training and Validation Loss')
plt.legend()
plt.show()
# 테스트 데이터셋을 통한 모델의 성능 평가
val_loss, val_accuracy = model.evaluate(validation_generator)
'프로젝트 > 코드프레소 체험단' 카테고리의 다른 글
이미지 데이터 처리를 위한 CNN 완벽 가이드 - DataAugmentation (0) | 2022.03.14 |
---|---|
이미지 데이터 처리를 위한 CNN 완벽 가이드 - 가위바위보 데이터셋 분류 CNN 모델 구현 (0) | 2022.03.14 |
이미지 데이터 처리를 위한 CNN 완벽 가이드 - ImageDataGenerator API (0) | 2022.03.08 |
이미지 데이터 처리를 위한 CNN 완벽 가이드 - CIFAR-10-codepresso 분류 CNN 모델 구현 (0) | 2022.03.07 |
이미지 데이터 처리를 위한 CNN 완벽 가이드 - CIFAR-10 분류 CNN 모델 구현 (0) | 2022.03.07 |