주중에 제대로 학습하지 못해서 주말에 몰아서 복습하고 있는 중이다.
무사히 수료할 수 있도록 노력하자.
이번 글은 CNN에서 아주 유명하면서도 기초적인 MNIST 데이터를 통해
이미지 인식을 하는 것에 대한 내용이다.

01. 실습 환경

  • Colab 런타임 환경에서 GPU(T4) 활성화
  • 주요 라이브러리: TensorFlow, Keras, Numpy, Matplotlib, Seaborn

02. 데이터 탐색

  • MNIST: 28x28 픽셀의 손글씨 숫자 (0~9) 이미지
  • Train: 60,000개 / Test: 10,000개
from tensorflow.keras.datasets import mnist
(train_data, train_labels), (test_data, test_labels) = mnist.load_data()

03. 데이터 전처리

  • Reshape: (28, 28) → (28, 28, 1)
  • Normalize: 픽셀값을 0~1 범위로 변환
  • One-hot Encoding: 레이블 변환
  • Stratified Split: 데이터 분할 시 라벨 분포 유지
  • Data Augmentation: 회전·이동 등으로 데이터 다양화
train_data = train_data.astype('float32') / 255.0
test_data  = test_data.astype('float32') / 255.0

train_data = np.expand_dims(train_data, -1)
test_data  = np.expand_dims(test_data, -1)

04. 모델 구성 CNN

  • Conv2D → MaxPooling2D (특징 추출)
  • Dropout (과적합 방지)
  • Dense Layer + Softmax (출력)
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout

network = Sequential([
    Conv2D(32, (3,3), activation='relu', input_shape=(28,28,1)),
    MaxPooling2D(2,2),
    Conv2D(64, (3,3), activation='relu'),
    MaxPooling2D(2,2),
    Flatten(),
    Dense(128, activation='relu'),
    Dropout(0.5),
    Dense(10, activation='softmax')
])

05. 모델 학습

  • Optimizer: Adam
  • Loss: Categorical Crossentropy
  • Epochs: 10
network.compile(optimizer='adam',
                loss='categorical_crossentropy',
                metrics=['accuracy'])

history = network.fit(train_data, train_labels,
                      validation_data=(test_data, test_labels),
                      epochs=10,
                      batch_size=128)

06. 성능 평가

  • 학습 과정에서 train/validation accuracy와 loss를 시각화하고, 테스트셋 정확도를 확인
test_loss, test_acc = network.evaluate(test_data, test_labels)
print("Test Accuracy:", test_acc)

07. 모델 저장 & 불러오기

  • 모델을 학습한 뒤 Google Drive에 저장하고 다시 불러오기
from google.colab import drive
drive.mount('/content/drive')

import os
save_dir = '/content/drive/MyDrive/AI_service_track/Week_06/SCC_AI'
os.makedirs(save_dir, exist_ok=True)

save_path = os.path.join(save_dir, 'mnist_ocr.keras')
network.save(save_path)

from tensorflow.keras.models import load_model
loaded_network = load_model(save_path)

08. 예측 테스트

  • 불러온 모델로 새로운 이미지를 예측
prediction = loaded_network.predict(test_data[:5])
print(prediction.argmax(axis=1))
profile
2025화이팅!

0개의 댓글