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)