Lecture

CNN을 활용한 이미지 분류 예제

이번 수업에서는 TensorFlowKeras를 활용하여 간단한 이미지 분류 모델을 구축하고, MNIST 데이터셋을 사용하여 숫자 이미지(0~9)를 분류하는 예제를 실습해 보겠습니다.


1. 데이터 준비

먼저 TensorFlow에서 제공하는 MNIST 데이터셋을 불러옵니다. 이 데이터셋은 28×28 크기의 손글씨 숫자 이미지로 구성되어 있습니다.

import tensorflow as tf from tensorflow import keras import numpy as np import matplotlib.pyplot as plt # MNIST 데이터셋 불러오기 (x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data() # 데이터를 0~1 범위로 정규화 x_train, x_test = x_train / 255.0, x_test / 255.0 # 차원 확장 (CNN은 3D 형태의 입력을 요구함) x_train = x_train[..., np.newaxis] x_test = x_test[..., np.newaxis] # 데이터 샘플 출력 plt.imshow(x_train[0].squeeze(), cmap='gray') plt.title(f"Label: {y_train[0]}") plt.show()

2. CNN 모델 생성

CNN 모델은 합성곱 층(Conv2D), 풀링 층(MaxPooling2D), 그리고 완전 연결층(Dense)으로 구성됩니다.

# CNN 모델 정의 model = keras.Sequential([ keras.layers.Conv2D(32, (3,3), activation='relu', input_shape=(28, 28, 1)), keras.layers.MaxPooling2D(2, 2), keras.layers.Conv2D(64, (3,3), activation='relu'), keras.layers.MaxPooling2D(2,2), keras.layers.Flatten(), keras.layers.Dense(128, activation='relu'), keras.layers.Dense(10, activation='softmax') ]) # 모델 구조 출력 model.summary() # 모델 컴파일 model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

3. 모델 학습

준비된 데이터로 모델을 학습합니다.

# 모델 훈련 history = model.fit(x_train, y_train, epochs=5, validation_data=(x_test, y_test))

학습 과정에서 정확도와 손실 값이 감소하는지를 확인할 수 있습니다.


4. 모델 평가 및 예측

학습된 모델을 평가하고, 예측을 수행해봅니다.

# 모델 평가 loss, acc = model.evaluate(x_test, y_test) print(f"테스트 정확도: {acc:.4f}")

특정 샘플에 대한 예측을 수행하여 결과를 확인할 수 있습니다.

# 샘플 데이터 예측 sample = x_test[:5] # 첫 5개 이미지 predictions = model.predict(sample) predicted_labels = np.argmax(predictions, axis=1) # 예측 결과 출력 for i in range(5): plt.imshow(sample[i].squeeze(), cmap='gray') plt.title(f"예측: {predicted_labels[i]}, 실제: {y_test[i]}") plt.show()

이제 CNN을 사용하여 손글씨 숫자 이미지 분류를 수행하는 간단한 모델을 만들었습니다.

모델을 다양한 이미지 데이터셋에 적용하면 더욱 성능이 뛰어난 이미지 분류 모델을 만들 수 있습니다.

다음 수업에서는 지금까지 배운 내용을 점검하는 간단한 퀴즈를 풀어보겠습니다.

Lecture

AI Tutor

Design

Upload

Notes

Favorites

Help