Keras : Vision models サンプル: mnist_mlp.py

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
 

以上