이 노트북에서 지금까지 다룬 이론을 적용해 얕은 신경망을 발전시켜 보겠습니다.
from tensorflow import keras
from tensorflow.keras.datasets import mnist
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.optimizers import SGD
(X_train, y_train), (X_valid, y_valid) = mnist.load_data()
X_train = X_train.reshape(60000, 784).astype('float32')
X_valid = X_valid.reshape(10000, 784).astype('float32')
X_train /= 255
X_valid /= 255
n_classes = 10
y_train = keras.utils.to_categorical(y_train, n_classes)
y_valid = keras.utils.to_categorical(y_valid, n_classes)
model = Sequential()
model.add(Dense(64, activation='relu', input_shape=(784,)))
model.add(Dense(64, activation='relu'))
model.add(Dense(10, activation='softmax'))
model.summary()
Model: "sequential" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= dense (Dense) (None, 64) 50240 dense_1 (Dense) (None, 64) 4160 dense_2 (Dense) (None, 10) 650 ================================================================= Total params: 55,050 Trainable params: 55,050 Non-trainable params: 0 _________________________________________________________________
model.compile(loss='categorical_crossentropy', optimizer=SGD(learning_rate=0.1), metrics=['accuracy'])
model.fit(X_train, y_train, batch_size=128, epochs=20, verbose=1, validation_data=(X_valid, y_valid))
Epoch 1/20 469/469 [==============================] - 4s 6ms/step - loss: 0.4607 - accuracy: 0.8681 - val_loss: 0.2505 - val_accuracy: 0.9265 Epoch 2/20 469/469 [==============================] - 2s 4ms/step - loss: 0.2274 - accuracy: 0.9339 - val_loss: 0.1906 - val_accuracy: 0.9416 Epoch 3/20 469/469 [==============================] - 2s 4ms/step - loss: 0.1746 - accuracy: 0.9490 - val_loss: 0.1538 - val_accuracy: 0.9526 Epoch 4/20 469/469 [==============================] - 2s 4ms/step - loss: 0.1428 - accuracy: 0.9583 - val_loss: 0.1344 - val_accuracy: 0.9597 Epoch 5/20 469/469 [==============================] - 2s 3ms/step - loss: 0.1219 - accuracy: 0.9642 - val_loss: 0.1282 - val_accuracy: 0.9619 Epoch 6/20 469/469 [==============================] - 2s 4ms/step - loss: 0.1068 - accuracy: 0.9688 - val_loss: 0.1123 - val_accuracy: 0.9646 Epoch 7/20 469/469 [==============================] - 2s 4ms/step - loss: 0.0936 - accuracy: 0.9727 - val_loss: 0.1105 - val_accuracy: 0.9664 Epoch 8/20 469/469 [==============================] - 2s 3ms/step - loss: 0.0844 - accuracy: 0.9750 - val_loss: 0.1003 - val_accuracy: 0.9691 Epoch 9/20 469/469 [==============================] - 2s 4ms/step - loss: 0.0768 - accuracy: 0.9772 - val_loss: 0.1039 - val_accuracy: 0.9666 Epoch 10/20 469/469 [==============================] - 2s 4ms/step - loss: 0.0682 - accuracy: 0.9796 - val_loss: 0.0923 - val_accuracy: 0.9712 Epoch 11/20 469/469 [==============================] - 2s 3ms/step - loss: 0.0626 - accuracy: 0.9817 - val_loss: 0.0999 - val_accuracy: 0.9681 Epoch 12/20 469/469 [==============================] - 2s 3ms/step - loss: 0.0582 - accuracy: 0.9827 - val_loss: 0.0853 - val_accuracy: 0.9732 Epoch 13/20 469/469 [==============================] - 2s 4ms/step - loss: 0.0528 - accuracy: 0.9844 - val_loss: 0.0823 - val_accuracy: 0.9732 Epoch 14/20 469/469 [==============================] - 2s 3ms/step - loss: 0.0487 - accuracy: 0.9861 - val_loss: 0.0800 - val_accuracy: 0.9753 Epoch 15/20 469/469 [==============================] - 2s 4ms/step - loss: 0.0448 - accuracy: 0.9867 - val_loss: 0.0826 - val_accuracy: 0.9744 Epoch 16/20 469/469 [==============================] - 2s 4ms/step - loss: 0.0421 - accuracy: 0.9877 - val_loss: 0.0844 - val_accuracy: 0.9734 Epoch 17/20 469/469 [==============================] - 2s 4ms/step - loss: 0.0383 - accuracy: 0.9890 - val_loss: 0.0802 - val_accuracy: 0.9754 Epoch 18/20 469/469 [==============================] - 2s 4ms/step - loss: 0.0352 - accuracy: 0.9904 - val_loss: 0.0855 - val_accuracy: 0.9741 Epoch 19/20 469/469 [==============================] - 2s 4ms/step - loss: 0.0332 - accuracy: 0.9908 - val_loss: 0.0782 - val_accuracy: 0.9758 Epoch 20/20 469/469 [==============================] - 2s 3ms/step - loss: 0.0305 - accuracy: 0.9914 - val_loss: 0.0825 - val_accuracy: 0.9755
<keras.callbacks.History at 0x7f8860051910>