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")