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
以上