728x90
딥러닝 기술이 급속도로 발전하면서, 이미지 분류는 다양한 분야에서 중요한 역할을 수행하게 되었습니다. 오늘은 TensorFlow를 사용하여 꽃 이미지를 분류하는 간단한 컨볼루션 신경망(CNN) 모델을 구현하고 평가해 보겠습니다.
데이터셋 준비하기
프로젝트를 시작하기 전, 먼저 TensorFlow의 데이터셋 라이브러리에서 제공하는 꽃 이미지 데이터셋을 다운로드합니다. 이 데이터셋은 다섯 가지 종류의 꽃 이미지(데이지, 덴델리온, 장미, 해바라기, 튤립)로 구성되어 있으며, 총 3,700장의 사진을 포함하고 있습니다.
모델 구성하기
이미지 분류를 위한 CNN 모델을 구성합니다. 모델은 여러 개의 컨볼루션 레이어와 풀링 레이어를 포함하며, 마지막에는 완전 연결 레이어를 통해 분류를 수행합니다.
모델 학습 및 평가
모델을 컴파일하고, 준비된 데이터셋을 사용하여 모델을 학습시킵니다. 학습 과정에서는 정확도와 손실을 모니터링하여 모델의 성능을 평가합니다.
성능 시각화
학습 과정에서의 정확도와 손실을 시각화하여, 모델의 학습 상태와 성능을 확인할 수 있습니다. 이를 통해 모델의 학습이 적절히 이루어지고 있는지, 과적합이 발생하고 있는지 등을 판단할 수 있습니다.
# 필요한 라이브러리를 불러옵니다.
import os
import numpy as np
import tensorflow as tf
from glob import glob
from PIL import Image
import matplotlib.pyplot as plt
# 데이터셋 준비
import pathlib
dataset_url = "https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz"
data_dir = tf.keras.utils.get_file('flower_photos', origin=dataset_url, untar=True)
data_dir = pathlib.Path(data_dir)
# 이미지 데이터셋 로드 및 전처리
batch_size = 32
img_height = 180
img_width = 180
train_ds = tf.keras.utils.image_dataset_from_directory(
data_dir,
validation_split=0.2,
subset="training",
seed=123,
image_size=(img_height, img_width),
batch_size=batch_size)
val_ds = tf.keras.utils.image_dataset_from_directory(
data_dir,
validation_split=0.2,
subset="validation",
seed=123,
image_size=(img_height, img_width),
batch_size=batch_size)
# 모델 구성 (간단한 CNN 모델)
num_classes = 5
model = tf.keras.Sequential([
tf.keras.layers.Rescaling(1./255),
tf.keras.layers.Conv2D(32, 3, activation='relu'),
tf.keras.layers.MaxPooling2D(),
tf.keras.layers.Conv2D(32, 3, activation='relu'),
tf.keras.layers.MaxPooling2D(),
tf.keras.layers.Conv2D(32, 3, activation='relu'),
tf.keras.layers.MaxPooling2D(),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dense(num_classes)
])
# 모델 컴파일
model.compile(optimizer='adam',
loss=tf.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
# 모델 학습
epochs=10
history = model.fit(
train_ds,
validation_data=val_ds,
epochs=epochs
)
# 모델 성능 시각화
acc = history.history['accuracy']
val_acc = history.history['val_accuracy']
loss = history.history['loss']
val_loss = history.history['val_loss']
plt.figure(figsize=(8, 8))
plt.subplot(2, 1, 1)
plt.plot(acc, label='Training Accuracy')
plt.plot(val_acc, label='Validation Accuracy')
plt.legend(loc='lower right')
plt.title('Training and Validation Accuracy')
plt.subplot(2, 1, 2)
plt.plot(loss, label='Training Loss')
plt.plot(val_loss, label='Validation Loss')
plt.legend(loc='upper right')
plt.title('Training and Validation Loss')
plt.show()
이 스크립트는 다음 단계로 구성됩니다:
- 필요한 라이브러리를 불러옵니다.
- 데이터셋을 다운로드하고, 경로를 설정합니다.
- image_dataset_from_directory 함수를 사용해 훈련 및 검증 데이터셋을 로드합니다. 이때, 데이터셋은 자동으로 분할됩니다.
- 간단한 컨볼루션 신경망(CNN) 모델을 구성하고 컴파일합니다. 모델은 이미지를 분류하기 위해 몇 개의 컨볼루션 레이어와 풀링 레이어, 완전 연결 레이어를 포함합니다.
- 모델을 훈련시키고, 훈련 및 검증 세트에 대한 정확도와 손실을 시각화합니다.
이러한 과정을 통해, CNN을 사용한 이미지 분류의 기본적인 접근 방법을 실습해볼 수 있습니다.
728x90
'AI > Contents' 카테고리의 다른 글
텍스트처리로 문장에 감성분석 (2) | 2024.03.15 |
---|---|
W5X00-EVB-Pico with SSL/TLS (3) | 2024.03.08 |
Attention Mechanism 이란? - (1) (4) | 2024.03.04 |
Chat With RTX 사용방법과 후기 (4) | 2024.02.20 |
Stream을 아시나요? (4) | 2024.02.15 |