Replicated

Keras - MNIST 본문

학부/딥러닝

Keras - MNIST

라구넹 2025. 10. 25. 16:38

MNIST database

- 손으로 쓴 숫자들로 이루어진 대형 데이터베이스

- traning, test 데이터를 별도로 제공

- Keras에 포함되어 있음

 

데이터 형태

- 28 * 28의 흑백 이미지

- 1픽셀은 0~255의 값 저장

- 2차원 형태의 데이터는 학습을 할 수 없으니, 1 * 784 형태의 1차원 이미지로 변경하여 사용

- 0~255 사이의 픽셀 값은 0~1 사이로 변환하여 사용

- 클래스 레이블 개수 10개 (0~9)

 

# load required modules
from keras.datasets import mnist
from keras import optimizers
from keras.models import Sequential
from keras.layers import Dense, Input
from keras.layers import Flatten
from keras.layers import Dropout
from keras.utils import to_categorical
import matplotlib.pyplot as plt
import numpy as np

import sys
import os
sys.path.append(os.path.abspath("/content/gdrive/MyDrive/Data"))
import TrainPlot

# load dataset
(train_X, train_y), (test_X, test_y) = mnist.load_data()
train_X, test_X = train_X / 255.0, test_X / 255.0
# one hot encoding
train_y = to_categorical(train_y)
test_y = to_categorical(test_y)

데이터 준비

 

epochs = 20
batch_size = 128
learning_rate = 0.01

model = Sequential()

model.add(Input(shape=(28,28)))
model.add(Flatten())

model.add(Dense(256, activation='relu'))
model.add(Dropout(rate = 0.4))
model.add(Dense(128, activation='relu'))
model.add(Dropout(rate = 0.3))

model.add(Dense(10, activation='softmax'))

model.summary()

모델 정의

입력을 받고, 플래튼 (1*784)

256 -> 드롭아웃 -> 128 -> 드롭아웃 -> 10

 

adam = optimizers.Adam(learning_rate=learning_rate)
model.compile(loss='categorical_crossentropy', optimizer=adam, metrics=['accuracy'])

disp = model.fit(train_X, train_y,
batch_size=batch_size,
epochs=epochs,
verbose=1, 
validation_split = 0.2)

모델 학습

 

pred = model.predict(test_X)
print(pred)

y_classes = [np.argmax(y, axis=None, out=None) for y in pred]
print(y_classes) 

score = model.evaluate(test_X, test_y, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])

plt.plot(disp.history['accuracy'])
plt.plot(disp.history['val_accuracy'])
plt.title('model accuracy')
plt.ylabel('accuracy')
plt.xlabel('epoch')
plt.legend(['train', 'validation'], loc='upper left')
plt.show()

모델 테스트, 정확도 히스토리

 

plt.plot(disp.history['loss'])
plt.plot(disp.history['val_loss'])
plt.title('model loss')
plt.ylabel('loss')
plt.xlabel('epoch')
plt.legend(['train', 'validation'], loc='upper left')
plt.show()

손실율 히스토리

 

히스토리를 이용한 학습 그래프 -> 학습이 끝나야 얻을 수 있음

진행 과정 -> 콜백 이용

disp = model.fit(train_X, train_y,
                  batch_size=batch_size,
                  epochs=epochs,
                  verbose=1, 
                  validation_split = 0.2,
                  callbacks=[TrainPlot.TrainingPlot()])

콜백 함수 넣어주면 됨

'학부 > 딥러닝' 카테고리의 다른 글

Keras CNN - MNIST  (0) 2025.10.25
Keras CNN  (0) 2025.10.25
Keras 개요  (0) 2025.10.18
DNN  (0) 2025.10.18
신경망 학습  (0) 2025.10.18