본문 바로가기
카테고리 없음

[딥러닝] Keras 케라스 완전 기초 3편 - 이미지 분류 마스터! CNN으로 딥러닝 모델 만들기 (with Keras)

by 데이터 AI 벌집 2025. 4. 16.
반응형

지난 시간에는 Dropout과 Optimizer로 모델을 튜닝해봤습니다.

 

2025.04.15 - [데이터사이언스(Data Science)/ML & DL] - [딥러닝] Keras 케라스 완전 기초 1편 - 첫 번째 딥러닝 모델 만들기 (10줄)

 

[딥러닝] Keras 케라스 완전 기초 1편 - 첫 번째 딥러닝 모델 만들기 (10줄)

🧠 Keras로 딥러닝 시작하기! 첫 모델을 10줄로 만들자딥러닝, 어렵게 느껴지시죠? 하지만 오늘은 딱 10줄짜리 코드를 가지고, 여러분의 첫 번째 딥러닝 모델을 만들어볼 거예요.바로 숫자 이미지(

datasciencebeehive.tistory.com

2025.04.15 - [데이터사이언스(Data Science)/ML & DL] - [딥러닝] Keras 케라스 완전 기초 2편 - Keras 딥러닝 모델 성능 높이기! Dropout, Optimizer 쉽게 배우기

 

[딥러닝] Keras 케라스 완전 기초 2편 - Keras 딥러닝 모델 성능 높이기! Dropout, Optimizer 쉽게 배우기

지난 시간에 우리는 10줄의 코드로 첫 딥러닝 모델을 만들었습니다. 이번에는 그 모델을 더 정확하고 똑똑하게 만들기 위해 딥러닝의 필수 요소인 Dropout, BatchNormalization, Optimizer를 직접 실험해볼

datasciencebeehive.tistory.com

 


이번에는 이미지 분류에 가장 강력한 딥러닝 구조인 CNN (Convolutional Neural Network)을 사용해 실제 이미지 데이터를 다뤄보겠습니다. 🐱🚗🐸

 

[딥러닝] Keras 케라스 완전 기초 3편 - 이미지 분류 마스터! CNN으로 딥러닝 모델 만들기 (with Keras)


🖼️ 사용할 데이터: CIFAR-10

  • 총 60,000장의 컬러 이미지 (32x32 사이즈)
  • 클래스 10개: 비행기, 자동차, 새, 고양이, 사슴, 개, 개구리, 말, 배, 트럭

1. CNN 모델 코드 전체

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout
from tensorflow.keras.datasets import cifar10
from tensorflow.keras.utils import to_categorical

# 데이터 불러오기
(x_train, y_train), (x_test, y_test) = cifar10.load_data()
x_train = x_train.astype('float32') / 255.0
x_test = x_test.astype('float32') / 255.0
y_train = to_categorical(y_train, 10)
y_test = to_categorical(y_test, 10)

# 모델 만들기
model = Sequential([
    Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)),
    MaxPooling2D((2, 2)),
    Conv2D(64, (3, 3), activation='relu'),
    MaxPooling2D((2, 2)),
    Flatten(),
    Dense(64, activation='relu'),
    Dropout(0.5),
    Dense(10, activation='softmax')
])

model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
model.summary()  # 모델 구조 확인

# 학습
model.fit(x_train, y_train, epochs=10, batch_size=64, validation_split=0.2)

# 평가
test_loss, test_acc = model.evaluate(x_test, y_test)
print(f"🧾 테스트 정확도: {test_acc:.4f}")

 

2. 모델 구조 설명

Layer 역할
Conv2D 이미지에서 특징 추출 (필터 적용)
MaxPooling2D 특징을 축소하여 계산량 줄임
Flatten 2D 이미지를 1D 벡터로 변환
Dense 최종 분류를 위한 fully connected 층
Dropout 과적합 방지를 위한 뉴런 비활성화

💡 Tip: 정확도 더 올리고 싶다면?

  • Conv2D 레이어 더 추가하기
  • BatchNormalization 추가하기
  • Image Augmentation 적용하기 (다음 편에서 다룸)

📊 결과 예시 (10 Epoch 기준)

Epoch 10/10
625/625 [==============================] - 12s 18ms/step - loss: 0.7432 - accuracy: 0.7404 - val_loss: 0.9471 - val_accuracy: 0.6882
🧾 테스트 정확도: 0.7078

 

👉 CPU만으로도 학습 가능하지만, GPU 환경이면 훨씬 빠르게 끝나요!


요약

  • CNN은 이미지 분류에서 사실상 표준
  • Conv2D + MaxPooling2D + Flatten이 기본 구조
  • 간단한 CNN만으로도 70% 이상의 정확도 가능
반응형