본문 바로가기
데이터사이언스(Data Science)/ML & DL

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

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

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

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


🔧 실습 목표

  • Dropout이 과적합(overfitting)을 줄여주는 이유
  • Optimizer(최적화 알고리즘)를 바꿨을 때 정확도 차이
  • BatchNormalization의 역할 이해

1.Dropout 레이어로 과적합 방지하기

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout
from tensorflow.keras.datasets import mnist
from tensorflow.keras.utils import to_categorical

# 데이터 전처리
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train = x_train.reshape(-1, 784) / 255.0
x_test = x_test.reshape(-1, 784) / 255.0
y_train = to_categorical(y_train)
y_test = to_categorical(y_test)

# Dropout이 있는 모델
model = Sequential([
    Dense(512, activation='relu', input_shape=(784,)),
    Dropout(0.3),
    Dense(256, activation='relu'),
    Dropout(0.3),
    Dense(10, activation='softmax')
])

model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(x_train, y_train, epochs=10, batch_size=64, validation_split=0.2)

 

📌 Dropout(0.3)은 학습 중 무작위로 30%의 뉴런을 꺼서, 네트워크가 특정 패턴에만 의존하지 않도록 도와줘요.

 


2. Optimizer 바꿔보기 (SGD vs Adam vs RMSprop)

from tensorflow.keras.optimizers import SGD, RMSprop

# SGD 사용
model.compile(optimizer=SGD(learning_rate=0.01), loss='categorical_crossentropy', metrics=['accuracy'])

# 또는 RMSprop 사용
# model.compile(optimizer=RMSprop(), loss='categorical_crossentropy', metrics=['accuracy'])

 

📌 Adam은 보통 가장 무난하지만, SGD는 학습이 느리지만 일반화 성능이 더 좋을 수 있고, RMSprop은 RNN에서 주로 사용돼요.


3. BatchNormalization으로 학습 안정화

from tensorflow.keras.layers import BatchNormalization

model = Sequential([
    Dense(512, activation='relu', input_shape=(784,)),
    BatchNormalization(),
    Dropout(0.3),
    Dense(256, activation='relu'),
    BatchNormalization(),
    Dropout(0.3),
    Dense(10, activation='softmax')
])

 

📌 BatchNormalization은 학습 속도를 빠르게 하고, 일반화 능력을 키워줘요.


정리

  • Dropout은 과적합 방지용
  • Optimizer는 모델의 학습 속도와 성능을 조절
  • BatchNormalization은 모델의 안정성과 정확도 향상에 효과적
반응형