CNN_test_Model / train.py
OneclickAI's picture
Update train.py
da4934d verified
import numpy as np
import tensorflow as tf
from tensorflow import keras
from keras import layers
# Keras 라이브러리를 통해 MNIST 데이터셋을 손쉽게 불러옵니다.
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()
# 정규화: 픽셀 값의 범위를 0~255에서 0~1 사이로 조정하여 학습 안정성 및 속도를 높입니다.
x_train = x_train.astype("float32") / 255.0
x_test = x_test.astype("float32") / 255.0
# 채널 차원 추가: 흑백 이미지(채널 1)의 차원을 명시적으로 추가합니다.
x_train = np.expand_dims(x_train, -1)
x_test = np.expand_dims(x_test, -1)
# 레이블 원-핫 인코딩: 숫자 '5'를 [0,0,0,0,0,1,0,0,0,0] 형태의 벡터로 변환합니다.
num_classes = 10
y_train = keras.utils.to_categorical(y_train, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)
model = keras.Sequential([
keras.Input(shape=(28, 28, 1)), # 입력 레이어
layers.Conv2D(32, kernel_size=(3, 3), activation="relu"),
layers.MaxPooling2D(pool_size=(2, 2)),
layers.Conv2D(64, kernel_size=(3, 3), activation="relu"),
layers.MaxPooling2D(pool_size=(2, 2)),
layers.Flatten(),
layers.Dropout(0.5),
layers.Dense(num_classes, activation="softmax")
])
model.compile(
# 손실 함수(Loss Function): 모델의 예측이 정답과 얼마나 다른지 측정합니다.
loss="categorical_crossentropy",
# 옵티마이저(Optimizer): 손실을 최소화하기 위해 모델의 가중치를 업데이트하는 방법입니다.
optimizer="adam",
# 평가지표(Metrics): 훈련 과정을 모니터링할 지표로, 정확도를 사용합니다.
metrics=["accuracy"]
)
batch_size = 128
epochs = 15
# 모델 학습 실행
history = model.fit(
x_train, y_train,
batch_size=batch_size,
epochs=epochs,
validation_data=(x_test, y_test)
)
# 학습 완료 후 최종 성능 평가
score = model.evaluate(x_test, y_test, verbose=0)
print(f"\nTest loss: {score[0]:.4f}")
print(f"Test accuracy: {score[1]:.4f}")
# 모델의 구조, 가중치, 학습 설정을 모두 '.keras' 파일 하나에 저장합니다.
model.save("my_keras_model.keras")
print("\nModel saved to my_keras_model.keras")
# 결과 확인
import matplotlib.pyplot as plt
data = x_test[2]
plt.imshow(data)
logits = model.predict(np.expand_dims(data,0))
result = np.argmax(logits)
print(result)