MNIST๋ ์์ผ๋ก ์ด ์ซ์ ๊ธ์จ๋ฅผ ๋ชจ์๋์ ๋ฐ์ดํฐ์ธํธ์ด๋ค. ํ๋ฐฑ ์ด๋ฏธ์ง์ด๊ณ ๋ฒ์ฃผ๊ฐ 10๊ฐ๋ก ๊ตฌ์ฑ๋์ด ์์ผ๋ฉฐ 28 * 28 ํฝ์ ์ด๋ค.
from keras.datasets import mnist
(X_train, y_train), (X_test, y_test) = mnist.load_data()
import matplotlib.pyplot as plt
digit = X_train[1]
plt.imshow(digit, cmap = 'gray')
plt.show()
์ ์ฝ๋๋ก ๋ฐ์ดํฐ ์ค ํ๋๋ฅผ ์ด๋ฏธ์ง ํํ๋ก ํ์ธํด๋ณผ ์ ์๋ค.
X_train = X_train.reshape((60000, 28 * 28))
X_test = X_test.reshape((10000, 28 * 28))
Dense ๋ ์ด์ด์ ๋ฃ๊ธฐ ์ํด ์์ ๊ฐ์ ํํ๋ก ๋ฐ๊ฟ์ค๋ค.
X_train = X_train.astype(float) / 255
X_test = X_test.astype(float) / 255
0 ~ 255 ์ฌ์ด์ ๊ฐ์ ๊ฐ์ง๊ธฐ ๋๋ฌธ์ ์์ ๊ฐ์ด normalization ํด์ค๋ค.
from keras.utils import to_categorical
y_train = to_categorical(y_train)
y_test = to_categorical(y_test)
y๊ฐ 0 ~ 9 ์ฌ์ด์ ๊ฐ์ ๊ฐ์ง๊ธฐ ๋๋ฌธ์ One-Hot Encoding์ ํตํด ๊ฐ์ ๋ณ๊ฒฝํด์ค๋ค.
from keras import models
from keras import layers
mnist = models.Sequential()
mnist.add(layers.Dense(512, activation = 'relu', input_shape = (28 * 28,)))
mnist.add(layers.Dense(256, activation = 'relu'))
mnist.add(layers.Dense(10, activation = 'softmax'))
mnist.compile(loss = 'categorical_crossentropy', optimizer = 'rmsprop', metrics = ['accuracy'])
๋ค์ค ๋ถ๋ฅ ๋ฌธ์ ์ด๊ธฐ ๋๋ฌธ์ categorical_crossentropy๋ก ์ค์ ํ๋ค.
hist = mnist.fit(X_train, y_train,
epochs = 100,
batch_size = 128,
validation_split = 0.2)
๋ณ๋๋ก validation data๋ฅผ ์ง์ ํ์ง ์์๊ธฐ ๋๋ฌธ์ validation_spilt์ ํตํด 0.2์ validation data๋ฅผ ์ง์ ํ๋ค.
์ ๋ชจ๋ธ์ loss, val_loss๋ฅผ ์๊ฐํํด๋ณด๋ฉด Training Loss๋ Epoch๊ฐ ์ฆ๊ฐํ ์๋ก ๊ฐ์ํ๋ ๋ชจ์ต์ ๋ณด์ด์ง๋ง Validation Loss๋ ์คํ๋ฌ ๋ ์ฆ๊ฐํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ์ด๋ฅผ ํตํด ์ฐ๋ฆฌ๋ ์ ๋ชจ๋ธ์ด Overfitting ๋์๋ค๋ ๊ฒ์ ์ ์ ์๋ค.