File size: 2,292 Bytes
f735c49 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
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") |