logo

경사하강법 실습

Keras 모델 훈련

compile()에서 옵티마이저, 손실 함수, 평가 지표를 설정. fit()은 미니배치마다 예측, 손실 계산, 그래디언트 계산, 파라미터 수정을 반복.

실습 준비

import os

os.environ["KERAS_BACKEND"] = "torch"

import keras
import numpy as np

(x_train, y_train), _ = keras.datasets.mnist.load_data()

cond = (y_train == 0) | (y_train == 1)
x_train_binary = x_train[cond]
y_train_binary = np.where(y_train[cond] == 0, 0, 1)

keras.utils.set_random_seed(812)  # 실행 결과 재현용 난수 초기값

model = keras.models.Sequential(
    [
        keras.layers.Rescaling(1 / 255),  # 픽셀값을 0~1 범위로 변환
        keras.layers.Flatten(),  # 28×28 이미지를 길이 784의 벡터로 변환
        keras.layers.Dense(1, activation="sigmoid"),
    ]
)

학습률이 0.0001인 SGD로 이항 교차 엔트로피를 최소화하도록 모델을 설정.

model.compile(
    optimizer=keras.optimizers.SGD(learning_rate=0.0001),
    loss="binary_crossentropy",
    metrics=["accuracy"],
)

훈련 데이터를 32개씩 나누어 5번 반복 학습.

history = model.fit(
    x_train_binary,
    y_train_binary,
    epochs=5,
    batch_size=32,
)
실행 결과
Epoch 1/5
396/396 ━━━━━━━━━━━━━━━━━━━━ 3s 5ms/step - accuracy: 0.2869 - loss: 0.7754
Epoch 2/5
396/396 ━━━━━━━━━━━━━━━━━━━━ 2s 4ms/step - accuracy: 0.5919 - loss: 0.6509
Epoch 3/5
396/396 ━━━━━━━━━━━━━━━━━━━━ 2s 4ms/step - accuracy: 0.8305 - loss: 0.5583
Epoch 4/5
396/396 ━━━━━━━━━━━━━━━━━━━━ 2s 4ms/step - accuracy: 0.9333 - loss: 0.4871
Epoch 5/5
396/396 ━━━━━━━━━━━━━━━━━━━━ 2s 4ms/step - accuracy: 0.9739 - loss: 0.4307
history.history["loss"][-1]  # 마지막 에포크의 훈련 손실
실행 결과
0.4306652247905731
history.history["accuracy"][-1]  # 마지막 에포크의 훈련 정확도
실행 결과
0.9739439487457275

5번째 에포크의 훈련 손실은 약 0.431, 훈련 정확도는 약 97.4%. 두 값은 훈련 데이터에서 계산한 결과이므로 일반화 성능은 별도 데이터로 평가해야 함.

퀴즈

문제 1 / 1맞음: 0힌트: 0틀림: 0채점중: 0남음: 1

다음 설정에 대한 설명으로 올바른 것을 모두 고르세요.

model.compile(
    optimizer=keras.optimizers.SGD(learning_rate=0.0001),
    loss="binary_crossentropy",
    metrics=["accuracy"],
)
  • ☐옵티마이저는 SGD이다
  • ☐학습률은 0.0001이다
  • ☐손실 함수는 이항 교차 엔트로피이다
  • ☐평가 지표는 평균 제곱 오차이다

퀴즈를 풀려면 대화형 기능을 불러와야 합니다.

Previous
경사하강법