데이터셋 다운 받기
!wget --no-check-certificate \
https://storage.googleapis.com/mledu-datasets/cats_and_dogs_filtered.zip \
-O /tmp/cats_and_dogs_filtered.zip
데이터셋 경로 지정하기
import os
base_dir = 'C:/dev/ai/tmp/cats_and_dogs_filtered'
train_dir = os.path.join(base_dir, 'train')
validation_dir = os.path.join(base_dir, 'validation')
# 훈련에 사용되는 고양이/개 이미지 경로
train_cats_dir = os.path.join(train_dir, 'cats')
train_dogs_dir = os.path.join(train_dir, 'dogs')
print(train_cats_dir)
print(train_dogs_dir)
# 테스트에 사용되는 고양이/개 이미지 경로
validation_cats_dir = os.path.join(validation_dir, 'cats')
validation_dogs_dir = os.path.join(validation_dir, 'dogs')
print(validation_cats_dir)
print(validation_dogs_dir)
모델 구성하기
#합성곱신경망(CNN)
import tensorflow as tf
model = tf.keras.models.Sequential([
tf.keras.layers.Conv2D(16, (3,3), activation='relu', input_shape=(150, 150, 3)),
tf.keras.layers.MaxPooling2D(2,2),
tf.keras.layers.Conv2D(32, (3,3), activation='relu'),
tf.keras.layers.MaxPooling2D(2,2),
tf.keras.layers.Conv2D(64, (3,3), activation='relu'),
tf.keras.layers.MaxPooling2D(2,2),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(512, activation='relu'),
tf.keras.layers.Dense(1, activation='sigmoid')
])
model.summary() #신경망 구조를 확인할 수 있음
합성 곱 신경망(CNN, Convolutional neural network)이란?
컴퓨터 과학의 일종으로 시각적 이미지를 분석하는데 쓰이는 인공 신경망의 한 종류수동으로 특징을 추출할 필요 없이 데이터로부터 직접 학습하는 딥러닝을 위한 신경망 아키텍처
모델 컴파일하기
from tensorflow.keras.optimizers import RMSprop #RMSprop는 훈련 과정 중에 학습률을 적절하게 변화시킨다
model.compile(optimizer=RMSprop(lr=0.001),
loss='binary_crossentropy',
metrics = ['accuracy'])
이미지 전처리하기
from tensorflow.keras.preprocessing.image import ImageDataGenerator
train_datagen = ImageDataGenerator( rescale = 1.0/255. )
test_datagen = ImageDataGenerator( rescale = 1.0/255. )
#훈련에 사용할 데이터
train_generator = train_datagen.flow_from_directory(train_dir, #이미지가 위치한 경로
batch_size=20, #이미지의 크기를 조정함
class_mode='binary',
target_size=(150, 150))
#테스트에 사용할 데이터
validation_generator = test_datagen.flow_from_directory(validation_dir,
batch_size=20,
class_mode = 'binary',
target_size = (150, 150))
모델 훈련하기
history = model.fit(train_generator,
validation_data=validation_generator,
steps_per_epoch=100, #한 훈련당 100개 이미지 보여줌
epochs=100, #백번 훈련
validation_steps=50, #한 훈련당 50번 테스트함
verbose=2)
모델 저장하기
model.save("model.h5")
저장된 모델 불러오기
from tensorflow.keras.models import load_model
model = load_model("model.h5")
정확도 및 손실 확인하기
import matplotlib.pyplot as plt
acc = history.history['acc']
val_acc = history.history['val_acc']
loss = history.history['loss']
val_loss = history.history['val_loss']
epochs = range(len(acc))
plt.plot(epochs, acc, 'bo', label='Training accuracy')
plt.plot(epochs, val_acc, 'b', label='Validation accuracy')
plt.title('Training and validation accuracy')
plt.legend()
plt.figure()
plt.plot(epochs, loss, 'go', label='Training Loss')
plt.plot(epochs, val_loss, 'g', label='Validation Loss')
plt.title('Training and validation loss')
plt.legend()
plt.show()


과대적합
아무리 훈련해도 정확도가 70퍼센트정도로 유지되는 것 . 이 예제 따라할 때 과적합이발생했다.
모델 테스트하기
from tensorflow.keras.preprocessing import image
img = image.load_img('./dog.jpg', target_size=(150, 150)) #인터넷에서 다운받은 개 이미지
#2차원 배열을 3차원으로 바꿔주기
#모델은 3차원 데이터만 분류가능함
x=image.img_to_array(img)
x=np.expand_dims(x, axis=0)
images = np.vstack([x])
classes = model.predict(images, batch_size=10)
if classes[0]>0:
print("Image is a dog")
else:
print("Image is a cat")
참고
https://codetorial.net/tensorflow/classifying_the_cats_and_dogs.html
12. 고양이와 개 이미지 분류하기 - Codetorial
12. 고양이와 개 이미지 분류하기 이전의 예제에서 다루었던 MNIST, Fashion MNIST 데이터셋은 이미지 패턴이 비교적 단순하며 흑백의 색상을 가지고, 이미지가 모두 같은 크기를 가지기 때문에 상대
codetorial.net
'AI' 카테고리의 다른 글
| [이미지전처리] 외곽선 검출 알고리즘 논문 리뷰 (0) | 2024.05.23 |
|---|---|
| Novelty 이상탐지 토튜리얼 (2) | 2024.04.24 |
| [colab] yolov6 커스텀 데이터 셋으로 훈련시키기 (2) | 2023.07.21 |
| yolov6 토튜리얼 따라하기 (1) | 2023.07.17 |