Keras : Vision models サンプル: mnist_mlp.py
MNIST データセット上で最も単純な深層 NN をトレーニングします。
20 エポック後に 98.40 % テスト精度を得ます。
100 エポックでも 98.44 % とさほど変わりません。
from __future__ import print_function import keras from keras.datasets import mnist from keras.models import Sequential from keras.layers import Dense, Dropout from keras.optimizers import RMSprop
batch_size = 128 num_classes = 10 epochs = 20
# the data, shuffled and split between train and test sets (x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train = x_train.reshape(60000, 784) x_test = x_test.reshape(10000, 784) x_train = x_train.astype('float32') x_test = x_test.astype('float32') x_train /= 255 x_test /= 255 print(x_train.shape[0], 'train samples') print(x_test.shape[0], 'test samples')
60000 train samples 10000 test samples
# convert class vectors to binary class matrices y_train = keras.utils.to_categorical(y_train, num_classes) y_test = keras.utils.to_categorical(y_test, num_classes)
model = Sequential() model.add(Dense(512, activation='relu', input_shape=(784,))) model.add(Dropout(0.2)) model.add(Dense(512, activation='relu')) model.add(Dropout(0.2)) model.add(Dense(num_classes, activation='softmax'))
model.summary()
Layer (type) Output Shape Param # ================================================================= dense_1 (Dense) (None, 512) 401920 _________________________________________________________________ dropout_1 (Dropout) (None, 512) 0 _________________________________________________________________ dense_2 (Dense) (None, 512) 262656 _________________________________________________________________ dropout_2 (Dropout) (None, 512) 0 _________________________________________________________________ dense_3 (Dense) (None, 10) 5130 ================================================================= Total params: 669,706 Trainable params: 669,706 Non-trainable params: 0 _________________________________________________________________
model.compile(loss='categorical_crossentropy', optimizer=RMSprop(), metrics=['accuracy'])
history = model.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, verbose=1, validation_data=(x_test, y_test))
Train on 60000 samples, validate on 10000 samples Epoch 1/100 60000/60000 [==============================] - 5s 91us/step - loss: 0.2477 - acc: 0.9243 - val_loss: 0.1044 - val_acc: 0.9667 Epoch 2/100 60000/60000 [==============================] - 2s 39us/step - loss: 0.1029 - acc: 0.9686 - val_loss: 0.0796 - val_acc: 0.9758 Epoch 3/100 60000/60000 [==============================] - 3s 42us/step - loss: 0.0757 - acc: 0.9771 - val_loss: 0.0847 - val_acc: 0.9767 Epoch 4/100 60000/60000 [==============================] - 3s 42us/step - loss: 0.0598 - acc: 0.9819 - val_loss: 0.0798 - val_acc: 0.9775 Epoch 5/100 60000/60000 [==============================] - 3s 44us/step - loss: 0.0513 - acc: 0.9851 - val_loss: 0.0794 - val_acc: 0.9807 Epoch 6/100 60000/60000 [==============================] - 3s 43us/step - loss: 0.0431 - acc: 0.9870 - val_loss: 0.0791 - val_acc: 0.9807 Epoch 7/100 60000/60000 [==============================] - 3s 43us/step - loss: 0.0381 - acc: 0.9888 - val_loss: 0.0801 - val_acc: 0.9827 Epoch 8/100 60000/60000 [==============================] - 3s 43us/step - loss: 0.0348 - acc: 0.9896 - val_loss: 0.1026 - val_acc: 0.9787 Epoch 9/100 60000/60000 [==============================] - 3s 43us/step - loss: 0.0307 - acc: 0.9914 - val_loss: 0.0754 - val_acc: 0.9839 Epoch 10/100 60000/60000 [==============================] - 3s 44us/step - loss: 0.0273 - acc: 0.9919 - val_loss: 0.0900 - val_acc: 0.9829 Epoch 11/100 60000/60000 [==============================] - 3s 43us/step - loss: 0.0270 - acc: 0.9924 - val_loss: 0.0912 - val_acc: 0.9825 Epoch 12/100 60000/60000 [==============================] - 3s 43us/step - loss: 0.0269 - acc: 0.9920 - val_loss: 0.1006 - val_acc: 0.9834 Epoch 13/100 60000/60000 [==============================] - 3s 43us/step - loss: 0.0247 - acc: 0.9933 - val_loss: 0.0966 - val_acc: 0.9833 Epoch 14/100 60000/60000 [==============================] - 3s 43us/step - loss: 0.0231 - acc: 0.9934 - val_loss: 0.1081 - val_acc: 0.9814 Epoch 15/100 60000/60000 [==============================] - 3s 44us/step - loss: 0.0232 - acc: 0.9936 - val_loss: 0.0933 - val_acc: 0.9849 Epoch 16/100 60000/60000 [==============================] - 3s 43us/step - loss: 0.0204 - acc: 0.9946 - val_loss: 0.0995 - val_acc: 0.9840 Epoch 17/100 60000/60000 [==============================] - 3s 44us/step - loss: 0.0209 - acc: 0.9945 - val_loss: 0.1000 - val_acc: 0.9844 Epoch 18/100 60000/60000 [==============================] - 3s 43us/step - loss: 0.0181 - acc: 0.9951 - val_loss: 0.0912 - val_acc: 0.9854 Epoch 19/100 60000/60000 [==============================] - 3s 43us/step - loss: 0.0190 - acc: 0.9950 - val_loss: 0.1156 - val_acc: 0.9817 Epoch 20/100 60000/60000 [==============================] - 3s 43us/step - loss: 0.0190 - acc: 0.9949 - val_loss: 0.1071 - val_acc: 0.9835 Epoch 21/100 60000/60000 [==============================] - 3s 43us/step - loss: 0.0177 - acc: 0.9954 - val_loss: 0.1161 - val_acc: 0.9839 Epoch 22/100 60000/60000 [==============================] - 3s 44us/step - loss: 0.0177 - acc: 0.9952 - val_loss: 0.1124 - val_acc: 0.9836 Epoch 23/100 60000/60000 [==============================] - 3s 43us/step - loss: 0.0186 - acc: 0.9956 - val_loss: 0.1276 - val_acc: 0.9836 Epoch 24/100 60000/60000 [==============================] - 3s 44us/step - loss: 0.0165 - acc: 0.9960 - val_loss: 0.1191 - val_acc: 0.9838 Epoch 25/100 60000/60000 [==============================] - 3s 43us/step - loss: 0.0183 - acc: 0.9957 - val_loss: 0.1150 - val_acc: 0.9848 Epoch 26/100 60000/60000 [==============================] - 3s 43us/step - loss: 0.0152 - acc: 0.9962 - val_loss: 0.1172 - val_acc: 0.9849 Epoch 27/100 60000/60000 [==============================] - 3s 44us/step - loss: 0.0152 - acc: 0.9963 - val_loss: 0.1166 - val_acc: 0.9848 Epoch 28/100 60000/60000 [==============================] - 3s 43us/step - loss: 0.0157 - acc: 0.9962 - val_loss: 0.1362 - val_acc: 0.9835 Epoch 29/100 60000/60000 [==============================] - 3s 44us/step - loss: 0.0168 - acc: 0.9960 - val_loss: 0.1237 - val_acc: 0.9836 Epoch 30/100 60000/60000 [==============================] - 3s 43us/step - loss: 0.0145 - acc: 0.9967 - val_loss: 0.1164 - val_acc: 0.9847 Epoch 31/100 60000/60000 [==============================] - ETA: 0s - loss: 0.0154 - acc: 0.996 - 3s 44us/step - loss: 0.0158 - acc: 0.9966 - val_loss: 0.1310 - val_acc: 0.9827 Epoch 32/100 60000/60000 [==============================] - 3s 44us/step - loss: 0.0163 - acc: 0.9965 - val_loss: 0.1306 - val_acc: 0.9830 Epoch 33/100 60000/60000 [==============================] - 3s 43us/step - loss: 0.0149 - acc: 0.9967 - val_loss: 0.1299 - val_acc: 0.9845 Epoch 34/100 60000/60000 [==============================] - 3s 44us/step - loss: 0.0164 - acc: 0.9965 - val_loss: 0.1358 - val_acc: 0.9842 Epoch 35/100 60000/60000 [==============================] - 3s 43us/step - loss: 0.0126 - acc: 0.9974 - val_loss: 0.1161 - val_acc: 0.9855 Epoch 36/100 60000/60000 [==============================] - 3s 44us/step - loss: 0.0122 - acc: 0.9974 - val_loss: 0.1335 - val_acc: 0.9844 Epoch 37/100 60000/60000 [==============================] - 3s 43us/step - loss: 0.0151 - acc: 0.9971 - val_loss: 0.1319 - val_acc: 0.9825 Epoch 38/100 60000/60000 [==============================] - 3s 43us/step - loss: 0.0124 - acc: 0.9976 - val_loss: 0.1287 - val_acc: 0.9845 Epoch 39/100 60000/60000 [==============================] - 3s 44us/step - loss: 0.0126 - acc: 0.9977 - val_loss: 0.1369 - val_acc: 0.9848 Epoch 40/100 60000/60000 [==============================] - 3s 43us/step - loss: 0.0137 - acc: 0.9974 - val_loss: 0.1294 - val_acc: 0.9851 Epoch 41/100 60000/60000 [==============================] - 3s 44us/step - loss: 0.0141 - acc: 0.9971 - val_loss: 0.1292 - val_acc: 0.9849 Epoch 42/100 60000/60000 [==============================] - 3s 43us/step - loss: 0.0135 - acc: 0.9976 - val_loss: 0.1447 - val_acc: 0.9827 Epoch 43/100 60000/60000 [==============================] - 3s 43us/step - loss: 0.0141 - acc: 0.9969 - val_loss: 0.1507 - val_acc: 0.9836 Epoch 44/100 60000/60000 [==============================] - 3s 44us/step - loss: 0.0134 - acc: 0.9976 - val_loss: 0.1437 - val_acc: 0.9845 Epoch 45/100 60000/60000 [==============================] - 3s 44us/step - loss: 0.0134 - acc: 0.9975 - val_loss: 0.1266 - val_acc: 0.9847 Epoch 46/100 60000/60000 [==============================] - 3s 45us/step - loss: 0.0140 - acc: 0.9975 - val_loss: 0.1353 - val_acc: 0.9845 Epoch 47/100 60000/60000 [==============================] - 3s 43us/step - loss: 0.0125 - acc: 0.9978 - val_loss: 0.1408 - val_acc: 0.9851 Epoch 48/100 60000/60000 [==============================] - 3s 44us/step - loss: 0.0114 - acc: 0.9974 - val_loss: 0.1363 - val_acc: 0.9841 Epoch 49/100 60000/60000 [==============================] - 3s 43us/step - loss: 0.0139 - acc: 0.9974 - val_loss: 0.1584 - val_acc: 0.9831 Epoch 50/100 60000/60000 [==============================] - 3s 43us/step - loss: 0.0119 - acc: 0.9976 - val_loss: 0.1405 - val_acc: 0.9848 Epoch 51/100 60000/60000 [==============================] - 3s 44us/step - loss: 0.0141 - acc: 0.9975 - val_loss: 0.1323 - val_acc: 0.9836 Epoch 52/100 60000/60000 [==============================] - 3s 43us/step - loss: 0.0123 - acc: 0.9976 - val_loss: 0.1486 - val_acc: 0.9840 Epoch 53/100 60000/60000 [==============================] - 3s 44us/step - loss: 0.0161 - acc: 0.9972 - val_loss: 0.1443 - val_acc: 0.9848 Epoch 54/100 60000/60000 [==============================] - 3s 43us/step - loss: 0.0123 - acc: 0.9976 - val_loss: 0.1520 - val_acc: 0.9840 Epoch 55/100 60000/60000 [==============================] - 3s 43us/step - loss: 0.0127 - acc: 0.9975 - val_loss: 0.1416 - val_acc: 0.9837 Epoch 56/100 60000/60000 [==============================] - 3s 43us/step - loss: 0.0125 - acc: 0.9978 - val_loss: 0.1384 - val_acc: 0.9856 Epoch 57/100 60000/60000 [==============================] - 3s 43us/step - loss: 0.0127 - acc: 0.9975 - val_loss: 0.1387 - val_acc: 0.9846 Epoch 58/100 60000/60000 [==============================] - 3s 44us/step - loss: 0.0119 - acc: 0.9977 - val_loss: 0.1501 - val_acc: 0.9836 Epoch 59/100 60000/60000 [==============================] - 3s 42us/step - loss: 0.0134 - acc: 0.9978 - val_loss: 0.1536 - val_acc: 0.9833 Epoch 60/100 60000/60000 [==============================] - 3s 43us/step - loss: 0.0137 - acc: 0.9975 - val_loss: 0.1552 - val_acc: 0.9838 Epoch 61/100 60000/60000 [==============================] - 3s 43us/step - loss: 0.0108 - acc: 0.9981 - val_loss: 0.1553 - val_acc: 0.9840 Epoch 62/100 60000/60000 [==============================] - 3s 42us/step - loss: 0.0107 - acc: 0.9980 - val_loss: 0.1598 - val_acc: 0.9839 Epoch 63/100 60000/60000 [==============================] - 3s 44us/step - loss: 0.0135 - acc: 0.9977 - val_loss: 0.1477 - val_acc: 0.9842 Epoch 64/100 60000/60000 [==============================] - 3s 42us/step - loss: 0.0122 - acc: 0.9978 - val_loss: 0.1406 - val_acc: 0.9856 Epoch 65/100 60000/60000 [==============================] - 3s 43us/step - loss: 0.0126 - acc: 0.9981 - val_loss: 0.1469 - val_acc: 0.9851 Epoch 66/100 60000/60000 [==============================] - 3s 42us/step - loss: 0.0133 - acc: 0.9978 - val_loss: 0.1576 - val_acc: 0.9841 Epoch 67/100 60000/60000 [==============================] - 3s 42us/step - loss: 0.0151 - acc: 0.9975 - val_loss: 0.1490 - val_acc: 0.9846 Epoch 68/100 60000/60000 [==============================] - 3s 43us/step - loss: 0.0119 - acc: 0.9978 - val_loss: 0.1540 - val_acc: 0.9845 Epoch 69/100 60000/60000 [==============================] - 3s 42us/step - loss: 0.0102 - acc: 0.9983 - val_loss: 0.1562 - val_acc: 0.9844 Epoch 70/100 60000/60000 [==============================] - 3s 44us/step - loss: 0.0094 - acc: 0.9982 - val_loss: 0.1469 - val_acc: 0.9854 Epoch 71/100 60000/60000 [==============================] - 3s 42us/step - loss: 0.0154 - acc: 0.9976 - val_loss: 0.1561 - val_acc: 0.9842 Epoch 72/100 60000/60000 [==============================] - 3s 43us/step - loss: 0.0090 - acc: 0.9981 - val_loss: 0.1778 - val_acc: 0.9824 Epoch 73/100 60000/60000 [==============================] - 3s 43us/step - loss: 0.0118 - acc: 0.9980 - val_loss: 0.1720 - val_acc: 0.9831 Epoch 74/100 60000/60000 [==============================] - 3s 42us/step - loss: 0.0112 - acc: 0.9983 - val_loss: 0.1697 - val_acc: 0.9846 Epoch 75/100 60000/60000 [==============================] - 3s 44us/step - loss: 0.0126 - acc: 0.9979 - val_loss: 0.1601 - val_acc: 0.9833 Epoch 76/100 60000/60000 [==============================] - 3s 42us/step - loss: 0.0107 - acc: 0.9983 - val_loss: 0.1462 - val_acc: 0.9845 Epoch 77/100 60000/60000 [==============================] - 3s 43us/step - loss: 0.0108 - acc: 0.9981 - val_loss: 0.1594 - val_acc: 0.9842 Epoch 78/100 60000/60000 [==============================] - 3s 43us/step - loss: 0.0124 - acc: 0.9981 - val_loss: 0.1542 - val_acc: 0.9859 Epoch 79/100 60000/60000 [==============================] - 3s 43us/step - loss: 0.0086 - acc: 0.9986 - val_loss: 0.1587 - val_acc: 0.9854 Epoch 80/100 60000/60000 [==============================] - 3s 44us/step - loss: 0.0127 - acc: 0.9981 - val_loss: 0.1567 - val_acc: 0.9832 Epoch 81/100 60000/60000 [==============================] - 3s 43us/step - loss: 0.0118 - acc: 0.9978 - val_loss: 0.1509 - val_acc: 0.9847 Epoch 82/100 60000/60000 [==============================] - 3s 43us/step - loss: 0.0107 - acc: 0.9981 - val_loss: 0.1430 - val_acc: 0.9847 Epoch 83/100 60000/60000 [==============================] - 3s 43us/step - loss: 0.0121 - acc: 0.9980 - val_loss: 0.1562 - val_acc: 0.9843 Epoch 84/100 60000/60000 [==============================] - 3s 43us/step - loss: 0.0104 - acc: 0.9982 - val_loss: 0.1580 - val_acc: 0.9851 Epoch 85/100 60000/60000 [==============================] - 3s 43us/step - loss: 0.0108 - acc: 0.9984 - val_loss: 0.1514 - val_acc: 0.9859 Epoch 86/100 60000/60000 [==============================] - 3s 43us/step - loss: 0.0127 - acc: 0.9983 - val_loss: 0.1608 - val_acc: 0.9841 Epoch 87/100 60000/60000 [==============================] - 3s 44us/step - loss: 0.0119 - acc: 0.9981 - val_loss: 0.1629 - val_acc: 0.9844 Epoch 88/100 60000/60000 [==============================] - 3s 42us/step - loss: 0.0102 - acc: 0.9984 - val_loss: 0.1528 - val_acc: 0.9851 Epoch 89/100 60000/60000 [==============================] - 3s 43us/step - loss: 0.0107 - acc: 0.9986 - val_loss: 0.1635 - val_acc: 0.9846 Epoch 90/100 60000/60000 [==============================] - 3s 43us/step - loss: 0.0084 - acc: 0.9984 - val_loss: 0.1531 - val_acc: 0.9855 Epoch 91/100 60000/60000 [==============================] - 3s 42us/step - loss: 0.0087 - acc: 0.9985 - val_loss: 0.1483 - val_acc: 0.9867 Epoch 92/100 60000/60000 [==============================] - 3s 43us/step - loss: 0.0116 - acc: 0.9981 - val_loss: 0.1509 - val_acc: 0.9862 Epoch 93/100 60000/60000 [==============================] - 3s 42us/step - loss: 0.0115 - acc: 0.9984 - val_loss: 0.1515 - val_acc: 0.9856 Epoch 94/100 60000/60000 [==============================] - 3s 43us/step - loss: 0.0104 - acc: 0.9984 - val_loss: 0.1612 - val_acc: 0.9848 Epoch 95/100 60000/60000 [==============================] - 3s 43us/step - loss: 0.0118 - acc: 0.9982 - val_loss: 0.1642 - val_acc: 0.9852 Epoch 96/100 60000/60000 [==============================] - 3s 42us/step - loss: 0.0106 - acc: 0.9982 - val_loss: 0.1796 - val_acc: 0.9826 Epoch 97/100 60000/60000 [==============================] - 3s 44us/step - loss: 0.0111 - acc: 0.9984 - val_loss: 0.1346 - val_acc: 0.9864 Epoch 98/100 60000/60000 [==============================] - 3s 42us/step - loss: 0.0093 - acc: 0.9985 - val_loss: 0.1590 - val_acc: 0.9848 Epoch 99/100 60000/60000 [==============================] - 3s 43us/step - loss: 0.0122 - acc: 0.9983 - val_loss: 0.1662 - val_acc: 0.9850 Epoch 100/100 60000/60000 [==============================] - 3s 43us/step - loss: 0.0100 - acc: 0.9985 - val_loss: 0.1738 - val_acc: 0.9844 CPU times: user 6min 15s, sys: 33.3 s, total: 6min 48s Wall time: 4min 21s
score = model.evaluate(x_test, y_test, verbose=0) print('Test loss:', score[0]) print('Test accuracy:', score[1])
Test loss: 0.173800638324 Test accuracy: 0.9844
以上