지난 시간에는 Dropout과 Optimizer로 모델을 튜닝해봤습니다.
2025.04.15 - [데이터사이언스(Data Science)/ML & DL] - [딥러닝] Keras 케라스 완전 기초 1편 - 첫 번째 딥러닝 모델 만들기 (10줄)
[딥러닝] Keras 케라스 완전 기초 1편 - 첫 번째 딥러닝 모델 만들기 (10줄)
🧠 Keras로 딥러닝 시작하기! 첫 모델을 10줄로 만들자딥러닝, 어렵게 느껴지시죠? 하지만 오늘은 딱 10줄짜리 코드를 가지고, 여러분의 첫 번째 딥러닝 모델을 만들어볼 거예요.바로 숫자 이미지(
datasciencebeehive.tistory.com
[딥러닝] Keras 케라스 완전 기초 2편 - Keras 딥러닝 모델 성능 높이기! Dropout, Optimizer 쉽게 배우기
지난 시간에 우리는 10줄의 코드로 첫 딥러닝 모델을 만들었습니다. 이번에는 그 모델을 더 정확하고 똑똑하게 만들기 위해 딥러닝의 필수 요소인 Dropout, BatchNormalization, Optimizer를 직접 실험해볼
datasciencebeehive.tistory.com
이번에는 이미지 분류에 가장 강력한 딥러닝 구조인 CNN (Convolutional Neural Network)을 사용해 실제 이미지 데이터를 다뤄보겠습니다. 🐱🚗🐸
🖼️ 사용할 데이터: 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% 이상의 정확도 가능