Keras : Vision models サンプル: mnist_mlp.py (fashion)

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

Fashion-MNIST データセット上で最も単純な深層 NN をトレーニングします。
100 エポック後に 89.43 % テスト精度を得ます。

from __future__ import print_function

import keras
from keras.datasets import fashion_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) = fashion_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 [==============================] - 3s 53us/step - loss: 0.5653 - acc: 0.7942 - val_loss: 0.4186 - val_acc: 0.8457
Epoch 2/100
60000/60000 [==============================] - 3s 43us/step - loss: 0.4047 - acc: 0.8514 - val_loss: 0.4651 - val_acc: 0.8333
Epoch 3/100
60000/60000 [==============================] - 3s 44us/step - loss: 0.3690 - acc: 0.8667 - val_loss: 0.3782 - val_acc: 0.8634
Epoch 4/100
60000/60000 [==============================] - 3s 43us/step - loss: 0.3501 - acc: 0.8735 - val_loss: 0.3606 - val_acc: 0.8713
Epoch 5/100
60000/60000 [==============================] - 3s 43us/step - loss: 0.3375 - acc: 0.8776 - val_loss: 0.4097 - val_acc: 0.8589
Epoch 6/100
60000/60000 [==============================] - 3s 43us/step - loss: 0.3251 - acc: 0.8831 - val_loss: 0.3778 - val_acc: 0.8728
Epoch 7/100
60000/60000 [==============================] - 3s 43us/step - loss: 0.3190 - acc: 0.8853 - val_loss: 0.3741 - val_acc: 0.8759
Epoch 8/100
60000/60000 [==============================] - 3s 44us/step - loss: 0.3135 - acc: 0.8885 - val_loss: 0.3785 - val_acc: 0.8698
Epoch 9/100
60000/60000 [==============================] - 3s 43us/step - loss: 0.3089 - acc: 0.8897 - val_loss: 0.3833 - val_acc: 0.8711
Epoch 10/100
60000/60000 [==============================] - 3s 44us/step - loss: 0.3059 - acc: 0.8914 - val_loss: 0.3851 - val_acc: 0.8827
Epoch 11/100
60000/60000 [==============================] - 3s 43us/step - loss: 0.3010 - acc: 0.8936 - val_loss: 0.3778 - val_acc: 0.8719
Epoch 12/100
60000/60000 [==============================] - 3s 43us/step - loss: 0.2958 - acc: 0.8949 - val_loss: 0.3579 - val_acc: 0.8831
Epoch 13/100
60000/60000 [==============================] - 3s 44us/step - loss: 0.2964 - acc: 0.8959 - val_loss: 0.4040 - val_acc: 0.8771
Epoch 14/100
60000/60000 [==============================] - 3s 43us/step - loss: 0.2884 - acc: 0.8983 - val_loss: 0.4129 - val_acc: 0.8783
Epoch 15/100
60000/60000 [==============================] - 3s 44us/step - loss: 0.2833 - acc: 0.9001 - val_loss: 0.3737 - val_acc: 0.8815
Epoch 16/100
60000/60000 [==============================] - 3s 43us/step - loss: 0.2826 - acc: 0.8996 - val_loss: 0.4087 - val_acc: 0.8795
Epoch 17/100
60000/60000 [==============================] - 3s 43us/step - loss: 0.2796 - acc: 0.9017 - val_loss: 0.3842 - val_acc: 0.8868
Epoch 18/100
60000/60000 [==============================] - 3s 44us/step - loss: 0.2747 - acc: 0.9044 - val_loss: 0.3935 - val_acc: 0.8869
Epoch 19/100
60000/60000 [==============================] - 3s 43us/step - loss: 0.2757 - acc: 0.9049 - val_loss: 0.4360 - val_acc: 0.8824
Epoch 20/100
60000/60000 [==============================] - 3s 44us/step - loss: 0.2721 - acc: 0.9058 - val_loss: 0.4190 - val_acc: 0.8732
Epoch 21/100
60000/60000 [==============================] - 3s 43us/step - loss: 0.2725 - acc: 0.9060 - val_loss: 0.3932 - val_acc: 0.8882
Epoch 22/100
60000/60000 [==============================] - 3s 44us/step - loss: 0.2654 - acc: 0.9070 - val_loss: 0.4146 - val_acc: 0.8788
Epoch 23/100
60000/60000 [==============================] - 3s 43us/step - loss: 0.2660 - acc: 0.9096 - val_loss: 0.3935 - val_acc: 0.8917
Epoch 24/100
60000/60000 [==============================] - 3s 43us/step - loss: 0.2627 - acc: 0.9082 - val_loss: 0.3874 - val_acc: 0.8861
Epoch 25/100
60000/60000 [==============================] - 3s 44us/step - loss: 0.2612 - acc: 0.9106 - val_loss: 0.4268 - val_acc: 0.8776
Epoch 26/100
60000/60000 [==============================] - 3s 43us/step - loss: 0.2627 - acc: 0.9108 - val_loss: 0.4272 - val_acc: 0.8836
Epoch 27/100
60000/60000 [==============================] - 3s 44us/step - loss: 0.2642 - acc: 0.9108 - val_loss: 0.4285 - val_acc: 0.8838
Epoch 28/100
60000/60000 [==============================] - 3s 43us/step - loss: 0.2577 - acc: 0.9119 - val_loss: 0.4448 - val_acc: 0.8862
Epoch 29/100
60000/60000 [==============================] - 3s 43us/step - loss: 0.2542 - acc: 0.9129 - val_loss: 0.4154 - val_acc: 0.8888
Epoch 30/100
60000/60000 [==============================] - 3s 43us/step - loss: 0.2546 - acc: 0.9129 - val_loss: 0.4653 - val_acc: 0.8793
Epoch 31/100
60000/60000 [==============================] - 3s 43us/step - loss: 0.2553 - acc: 0.9137 - val_loss: 0.4116 - val_acc: 0.8873
Epoch 32/100
60000/60000 [==============================] - 3s 44us/step - loss: 0.2524 - acc: 0.9150 - val_loss: 0.4281 - val_acc: 0.8860
Epoch 33/100
60000/60000 [==============================] - 3s 43us/step - loss: 0.2500 - acc: 0.9164 - val_loss: 0.4494 - val_acc: 0.8880
Epoch 34/100
60000/60000 [==============================] - 3s 44us/step - loss: 0.2485 - acc: 0.9169 - val_loss: 0.4359 - val_acc: 0.8896
Epoch 35/100
60000/60000 [==============================] - 3s 43us/step - loss: 0.2538 - acc: 0.9162 - val_loss: 0.4211 - val_acc: 0.8862
Epoch 36/100
60000/60000 [==============================] - 3s 43us/step - loss: 0.2465 - acc: 0.9186 - val_loss: 0.4543 - val_acc: 0.8850
Epoch 37/100
60000/60000 [==============================] - 3s 44us/step - loss: 0.2440 - acc: 0.9193 - val_loss: 0.4753 - val_acc: 0.8876
Epoch 38/100
60000/60000 [==============================] - 3s 43us/step - loss: 0.2468 - acc: 0.9195 - val_loss: 0.4486 - val_acc: 0.8866
Epoch 39/100
60000/60000 [==============================] - 3s 44us/step - loss: 0.2444 - acc: 0.9184 - val_loss: 0.4430 - val_acc: 0.8875
Epoch 40/100
60000/60000 [==============================] - 3s 43us/step - loss: 0.2436 - acc: 0.9194 - val_loss: 0.4472 - val_acc: 0.8868
Epoch 41/100
60000/60000 [==============================] - 3s 43us/step - loss: 0.2395 - acc: 0.9213 - val_loss: 0.4625 - val_acc: 0.8900
Epoch 42/100
60000/60000 [==============================] - 3s 44us/step - loss: 0.2407 - acc: 0.9211 - val_loss: 0.4775 - val_acc: 0.8892
Epoch 43/100
60000/60000 [==============================] - 3s 43us/step - loss: 0.2406 - acc: 0.9205 - val_loss: 0.4740 - val_acc: 0.8873
Epoch 44/100
60000/60000 [==============================] - 3s 44us/step - loss: 0.2421 - acc: 0.9205 - val_loss: 0.4857 - val_acc: 0.8844
Epoch 45/100
60000/60000 [==============================] - 3s 43us/step - loss: 0.2366 - acc: 0.9220 - val_loss: 0.4601 - val_acc: 0.8938
Epoch 46/100
60000/60000 [==============================] - 3s 44us/step - loss: 0.2396 - acc: 0.9224 - val_loss: 0.4638 - val_acc: 0.8883
Epoch 47/100
60000/60000 [==============================] - 3s 43us/step - loss: 0.2387 - acc: 0.9225 - val_loss: 0.4663 - val_acc: 0.8941
Epoch 48/100
60000/60000 [==============================] - 3s 43us/step - loss: 0.2363 - acc: 0.9234 - val_loss: 0.5079 - val_acc: 0.8855
Epoch 49/100
60000/60000 [==============================] - 3s 44us/step - loss: 0.2354 - acc: 0.9231 - val_loss: 0.4331 - val_acc: 0.8919
Epoch 50/100
60000/60000 [==============================] - 3s 43us/step - loss: 0.2339 - acc: 0.9249 - val_loss: 0.4691 - val_acc: 0.8904
Epoch 51/100
60000/60000 [==============================] - 3s 44us/step - loss: 0.2387 - acc: 0.9228 - val_loss: 0.4908 - val_acc: 0.8852
Epoch 52/100
60000/60000 [==============================] - 3s 43us/step - loss: 0.2326 - acc: 0.9242 - val_loss: 0.4534 - val_acc: 0.8870
Epoch 53/100
60000/60000 [==============================] - 3s 43us/step - loss: 0.2301 - acc: 0.9258 - val_loss: 0.5117 - val_acc: 0.8804
Epoch 54/100
60000/60000 [==============================] - 3s 44us/step - loss: 0.2329 - acc: 0.9251 - val_loss: 0.4909 - val_acc: 0.8912
Epoch 55/100
60000/60000 [==============================] - 3s 43us/step - loss: 0.2315 - acc: 0.9264 - val_loss: 0.4912 - val_acc: 0.8885
Epoch 56/100
60000/60000 [==============================] - 3s 44us/step - loss: 0.2281 - acc: 0.9270 - val_loss: 0.4986 - val_acc: 0.8917
Epoch 57/100
60000/60000 [==============================] - 3s 43us/step - loss: 0.2293 - acc: 0.9269 - val_loss: 0.5271 - val_acc: 0.8885
Epoch 58/100
60000/60000 [==============================] - 3s 44us/step - loss: 0.2281 - acc: 0.9272 - val_loss: 0.4978 - val_acc: 0.8898
Epoch 59/100
60000/60000 [==============================] - 3s 43us/step - loss: 0.2275 - acc: 0.9270 - val_loss: 0.4941 - val_acc: 0.8873
Epoch 60/100
60000/60000 [==============================] - 3s 43us/step - loss: 0.2290 - acc: 0.9269 - val_loss: 0.4502 - val_acc: 0.8870
Epoch 61/100
60000/60000 [==============================] - 3s 44us/step - loss: 0.2288 - acc: 0.9260 - val_loss: 0.4886 - val_acc: 0.8941
Epoch 62/100
60000/60000 [==============================] - 3s 43us/step - loss: 0.2248 - acc: 0.9289 - val_loss: 0.4809 - val_acc: 0.8903
Epoch 63/100
60000/60000 [==============================] - 3s 44us/step - loss: 0.2244 - acc: 0.9295 - val_loss: 0.4592 - val_acc: 0.8902
Epoch 64/100
60000/60000 [==============================] - 3s 43us/step - loss: 0.2272 - acc: 0.9291 - val_loss: 0.5368 - val_acc: 0.8890
Epoch 65/100
60000/60000 [==============================] - 3s 43us/step - loss: 0.2261 - acc: 0.9294 - val_loss: 0.5033 - val_acc: 0.8906
Epoch 66/100
60000/60000 [==============================] - 3s 44us/step - loss: 0.2267 - acc: 0.9289 - val_loss: 0.5210 - val_acc: 0.8898
Epoch 67/100
60000/60000 [==============================] - 3s 43us/step - loss: 0.2255 - acc: 0.9283 - val_loss: 0.5199 - val_acc: 0.8943
Epoch 68/100
60000/60000 [==============================] - 3s 44us/step - loss: 0.2238 - acc: 0.9312 - val_loss: 0.5349 - val_acc: 0.8791
Epoch 69/100
60000/60000 [==============================] - 3s 43us/step - loss: 0.2178 - acc: 0.9309 - val_loss: 0.5504 - val_acc: 0.8889
Epoch 70/100
60000/60000 [==============================] - 3s 44us/step - loss: 0.2233 - acc: 0.9300 - val_loss: 0.5139 - val_acc: 0.8947
Epoch 71/100
60000/60000 [==============================] - 3s 43us/step - loss: 0.2218 - acc: 0.9314 - val_loss: 0.5483 - val_acc: 0.8878
Epoch 72/100
60000/60000 [==============================] - 3s 43us/step - loss: 0.2210 - acc: 0.9315 - val_loss: 0.5212 - val_acc: 0.8910
Epoch 73/100
60000/60000 [==============================] - 3s 44us/step - loss: 0.2211 - acc: 0.9318 - val_loss: 0.5086 - val_acc: 0.8901
Epoch 74/100
60000/60000 [==============================] - 3s 43us/step - loss: 0.2249 - acc: 0.9322 - val_loss: 0.5098 - val_acc: 0.8934
Epoch 75/100
60000/60000 [==============================] - 3s 44us/step - loss: 0.2227 - acc: 0.9322 - val_loss: 0.5477 - val_acc: 0.8905
Epoch 76/100
60000/60000 [==============================] - 3s 44us/step - loss: 0.2225 - acc: 0.9321 - val_loss: 0.5523 - val_acc: 0.8824
Epoch 77/100
60000/60000 [==============================] - 3s 43us/step - loss: 0.2179 - acc: 0.9337 - val_loss: 0.5266 - val_acc: 0.8939
Epoch 78/100
60000/60000 [==============================] - 3s 44us/step - loss: 0.2188 - acc: 0.9329 - val_loss: 0.5150 - val_acc: 0.8879
Epoch 79/100
60000/60000 [==============================] - 3s 43us/step - loss: 0.2183 - acc: 0.9325 - val_loss: 0.5285 - val_acc: 0.8917
Epoch 80/100
60000/60000 [==============================] - 3s 44us/step - loss: 0.2210 - acc: 0.9328 - val_loss: 0.5491 - val_acc: 0.8872
Epoch 81/100
60000/60000 [==============================] - 3s 43us/step - loss: 0.2216 - acc: 0.9333 - val_loss: 0.5888 - val_acc: 0.8892
Epoch 82/100
60000/60000 [==============================] - 3s 44us/step - loss: 0.2176 - acc: 0.9343 - val_loss: 0.5505 - val_acc: 0.8938
Epoch 83/100
60000/60000 [==============================] - 3s 44us/step - loss: 0.2145 - acc: 0.9346 - val_loss: 0.5650 - val_acc: 0.8951
Epoch 84/100
60000/60000 [==============================] - 3s 43us/step - loss: 0.2173 - acc: 0.9347 - val_loss: 0.5457 - val_acc: 0.8959
Epoch 85/100
60000/60000 [==============================] - 3s 45us/step - loss: 0.2130 - acc: 0.9350 - val_loss: 0.5329 - val_acc: 0.8904
Epoch 86/100
60000/60000 [==============================] - 3s 43us/step - loss: 0.2203 - acc: 0.9348 - val_loss: 0.5470 - val_acc: 0.8950
Epoch 87/100
60000/60000 [==============================] - 3s 44us/step - loss: 0.2108 - acc: 0.9362 - val_loss: 0.5341 - val_acc: 0.8924
Epoch 88/100
60000/60000 [==============================] - 3s 43us/step - loss: 0.2150 - acc: 0.9362 - val_loss: 0.5328 - val_acc: 0.8918
Epoch 89/100
60000/60000 [==============================] - 3s 44us/step - loss: 0.2128 - acc: 0.9374 - val_loss: 0.5728 - val_acc: 0.8903
Epoch 90/100
60000/60000 [==============================] - 3s 44us/step - loss: 0.2126 - acc: 0.9365 - val_loss: 0.6182 - val_acc: 0.8896
Epoch 91/100
60000/60000 [==============================] - 3s 43us/step - loss: 0.2079 - acc: 0.9367 - val_loss: 0.5530 - val_acc: 0.8977
Epoch 92/100
60000/60000 [==============================] - 3s 45us/step - loss: 0.2086 - acc: 0.9376 - val_loss: 0.6576 - val_acc: 0.8855
Epoch 93/100
60000/60000 [==============================] - 3s 43us/step - loss: 0.2138 - acc: 0.9357 - val_loss: 0.5514 - val_acc: 0.8939
Epoch 94/100
60000/60000 [==============================] - 3s 44us/step - loss: 0.2108 - acc: 0.9364 - val_loss: 0.5895 - val_acc: 0.8946
Epoch 95/100
60000/60000 [==============================] - 3s 43us/step - loss: 0.2150 - acc: 0.9378 - val_loss: 0.5461 - val_acc: 0.8898
Epoch 96/100
60000/60000 [==============================] - 3s 43us/step - loss: 0.2074 - acc: 0.9370 - val_loss: 0.5504 - val_acc: 0.8950
Epoch 97/100
60000/60000 [==============================] - 3s 44us/step - loss: 0.2129 - acc: 0.9383 - val_loss: 0.6330 - val_acc: 0.8915
Epoch 98/100
60000/60000 [==============================] - 3s 43us/step - loss: 0.2089 - acc: 0.9376 - val_loss: 0.5816 - val_acc: 0.8950
Epoch 99/100
60000/60000 [==============================] - 3s 44us/step - loss: 0.2128 - acc: 0.9362 - val_loss: 0.5762 - val_acc: 0.8923
Epoch 100/100
60000/60000 [==============================] - 3s 43us/step - loss: 0.2078 - acc: 0.9381 - val_loss: 0.5667 - val_acc: 0.8943
CPU times: user 6min 18s, sys: 32.9 s, total: 6min 51s
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.566672691107
Test accuracy: 0.8943
 

以上