텐서플로로 따라하는 딥러닝

교재 13장. 텐서플로/케라스로 MNIST 손글씨를 분류하며, 신경망 구성·학습·성능 개선·소프트맥스·모델 저장까지 실전으로 묶습니다.


1. 텐서플로 & 케라스

  • 텐서플로(TensorFlow): 구글의 기계학습 플랫폼. 텐서(다차원 배열) 연산 + 자동 미분
  • 케라스(Keras): 텐서플로 위의 고수준 API. 층을 쌓듯 모델을 만듦
PYTHON
import tensorflow as tf
from tensorflow import keras

2. MNIST 데이터

손글씨 숫자 0~9, 28×28 흑백 이미지 7만 장. 딥러닝 입문의 고전.

PYTHON
(X_train, y_train), (X_test, y_test) = keras.datasets.mnist.load_data()
X_train = X_train / 255.0      # 0~255 → 0~1 정규화 (필수!)
X_test  = X_test  / 255.0
  • 정규화: 픽셀 0255 를 01 로 → 학습 안정화·수렴 가속

3. 심층 신경망 모델 만들기

PYTHON
model = keras.Sequential([
    keras.layers.Flatten(input_shape=(28, 28)),   # 28×28 → 784 벡터
    keras.layers.Dense(128, activation='relu'),    # 은닉층
    keras.layers.Dense(10,  activation='softmax')  # 출력층(10개 클래스)
])
 
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])
model.fit(X_train, y_train, epochs=5, validation_split=0.1)
구성요소역할
Flatten2D 이미지를 1D 벡터로
Dense(128, relu)완전연결 은닉층 + ReLU 비선형
Dense(10, softmax)10개 클래스 확률 출력
optimizer='adam'경사 하강 개선 알고리즘
epochs전체 데이터 반복 횟수

4. 소프트맥스 — 출력을 확률로

마지막 층은 10개 로짓을 출력합니다. 소프트맥스가 이를 합이 1인 확률 분포로 변환:

  • 가장 큰 확률의 클래스가 예측값(argmax)
  • 교차 엔트로피 손실과 짝 → 분류 학습의 표준 조합

소프트맥스 — 로짓을 확률로

Ch.13
61.9%
클래스 0
22.8%
클래스 1
10.2%
클래스 2
5.1%
클래스 3
2.0
1.0
0.2
-0.5
1.0
예측 클래스 (argmax)
0
확률 합
1.000
소프트맥스는 임의의 실수 점수(로짓)를 모두 양수이고 합이 1인 확률 분포로 바꿉니다. 가장 큰 로짓이 가장 큰 확률을 받죠(argmax 가 예측). 온도 T 를 올리면 분포가 평평해지고(불확실), 내리면 한 클래스로 뾰족해집니다(확신). 다중 분류 신경망의 마지막 층에 쓰이며, 교차 엔트로피 손실과 짝을 이룹니다.

5. 하이퍼파라미터 튜닝과 성능 개선

하이퍼파라미터영향
은닉층 수 / 뉴런 수표현력 ↑ (과하면 과적합)
epochs너무 적으면 과소적합, 많으면 과적합
학습률너무 크면 발산, 작으면 느림
드롭아웃 / 정규화과적합 억제
  • 층을 추가하면 정확도가 오르지만, 검증 손실이 다시 오르면 과적합 신호 → 조기 종료(early stopping)

6. 모델 저장 / 불러오기

PYTHON
model.save('mnist_model.keras')              # 저장
loaded = keras.models.load_model('mnist_model.keras')   # 불러오기
loaded.predict(new_image)
  • 학습된 가중치를 보존 → 재학습 없이 배포·재사용

7. 직접 만든 이미지 예측 & 전처리

내가 그린 숫자를 예측하려면 학습 데이터와 같은 형식으로 맞춰야 합니다.

  • 28×28 로 리사이즈, 흑백 변환, 0~1 정규화
  • MNIST 는 검은 배경에 흰 글씨 → 반전 필요할 수 있음
  • 전처리가 어긋나면 정확도 급락 (학습/추론 일관성)

📝 Checkpoint

Quiz

텐서플로 딥러닝 Checkpoint

Q 1 / 5

MNIST 픽셀값을 255로 나눠 0~1로 만드는 이유는?


🔗 마무리