from __future__ import print_function
import keras
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation, Flatten
from keras.layers import Conv2D, MaxPooling2D
from keras.wrappers.scikit_learn import KerasClassifier
num_classes = 10
# input image dimensions
img_rows, img_cols = 28, 28
# load training data and do basic data normalization
(x_train, y_train), (x_test, y_test) = mnist.load_data()
if K.image_data_format() == 'channels_first':
x_train = x_train.reshape(x_train.shape[0], 1, img_rows, img_cols)
x_test = x_test.reshape(x_test.shape[0], 1, img_rows, img_cols)
input_shape = (1, img_rows, img_cols)
else:
x_train = x_train.reshape(x_train.shape[0], img_rows, img_cols, 1)
x_test = x_test.reshape(x_test.shape[0], img_rows, img_cols, 1)
input_shape = (img_rows, img_cols, 1)
x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
x_train /= 255
x_test /= 255
# 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)
filters = 8
kernel_size = 3
pool_size = 2
dense_layer_sizes = [32]
model = Sequential()
model.add(Conv2D(filters, kernel_size,
padding='valid',
input_shape=input_shape))
model.add(Activation('relu'))
model.add(Conv2D(filters, kernel_size))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=pool_size))
model.add(Dropout(0.25))
model.add(Flatten())
for layer_size in dense_layer_sizes:
model.add(Dense(layer_size))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(num_classes))
model.add(Activation('softmax'))
model.compile(loss='categorical_crossentropy',
optimizer='adadelta',
metrics=['accuracy'])
import matplotlib.pyplot as plt
x_train_cut = x_train[:10000]
y_train_cut = y_train[:10000]
history = model.fit(x_train_cut, y_train_cut, validation_data = (x_test, y_test), epochs=15, batch_size=16, verbose=1)
#plt.plot([1 - i for i in history.history['acc']])
plt.plot([1 - i for i in history.history['val_acc']], 'c')
x_train_cut = x_train[:30000]
y_train_cut = y_train[:30000]
history = model.fit(x_train_cut, y_train_cut, validation_data = (x_test, y_test), epochs=15, batch_size=16, verbose=1)
#plt.plot([1 - i for i in history.history['acc']])
plt.plot([1 - i for i in history.history['val_acc']], 'r')
x_train_cut = x_train[:45000]
y_train_cut = y_train[:45000]
history = model.fit(x_train_cut, y_train_cut, validation_data = (x_test, y_test), epochs=15, batch_size=16, verbose=1)
#plt.plot([1 - i for i in history.history['acc']])
plt.plot([1 - i for i in history.history['val_acc']], 'g')
history = model.fit(x_train, y_train, validation_data = (x_test, y_test), epochs=15, batch_size=16, verbose=1)
#plt.plot([1 - i for i in history.history['acc']])
plt.plot([1 - i for i in history.history['val_acc']], 'b')
plt.title('Error')
plt.ylabel('Error')
plt.xlabel('Epoch')
plt.legend(['10000', '30000', '45000', '60000'], loc='upper right')
plt.show()
Train on 10000 samples, validate on 10000 samples Epoch 1/15 10000/10000 [==============================] - 11s 1ms/step - loss: 0.9608 - acc: 0.6794 - val_loss: 0.2564 - val_acc: 0.9292 Epoch 2/15 10000/10000 [==============================] - 9s 939us/step - loss: 0.5767 - acc: 0.8209 - val_loss: 0.2122 - val_acc: 0.9430 Epoch 3/15 10000/10000 [==============================] - 9s 931us/step - loss: 0.4851 - acc: 0.8497 - val_loss: 0.1764 - val_acc: 0.9489 Epoch 4/15 10000/10000 [==============================] - 9s 935us/step - loss: 0.4274 - acc: 0.8680 - val_loss: 0.1581 - val_acc: 0.9539 Epoch 5/15 10000/10000 [==============================] - 9s 918us/step - loss: 0.4014 - acc: 0.8698 - val_loss: 0.1464 - val_acc: 0.9572 Epoch 6/15 10000/10000 [==============================] - 9s 929us/step - loss: 0.3853 - acc: 0.8771 - val_loss: 0.1369 - val_acc: 0.9587 Epoch 7/15 10000/10000 [==============================] - 10s 951us/step - loss: 0.3565 - acc: 0.8881 - val_loss: 0.1412 - val_acc: 0.9570 Epoch 8/15 10000/10000 [==============================] - 10s 956us/step - loss: 0.3517 - acc: 0.8929 - val_loss: 0.1215 - val_acc: 0.9629 Epoch 9/15 10000/10000 [==============================] - 10s 964us/step - loss: 0.3143 - acc: 0.8995 - val_loss: 0.1207 - val_acc: 0.9636 Epoch 10/15 10000/10000 [==============================] - 9s 949us/step - loss: 0.3184 - acc: 0.8996 - val_loss: 0.1185 - val_acc: 0.9644 Epoch 11/15 10000/10000 [==============================] - 10s 956us/step - loss: 0.3089 - acc: 0.9078 - val_loss: 0.1164 - val_acc: 0.9645 Epoch 12/15 10000/10000 [==============================] - 9s 913us/step - loss: 0.3066 - acc: 0.9049 - val_loss: 0.1132 - val_acc: 0.9660 Epoch 13/15 10000/10000 [==============================] - 9s 865us/step - loss: 0.2942 - acc: 0.9076 - val_loss: 0.1152 - val_acc: 0.9637 Epoch 14/15 10000/10000 [==============================] - 8s 843us/step - loss: 0.2878 - acc: 0.9104 - val_loss: 0.1059 - val_acc: 0.9666 Epoch 15/15 10000/10000 [==============================] - 8s 847us/step - loss: 0.2884 - acc: 0.9109 - val_loss: 0.1021 - val_acc: 0.9683 Train on 30000 samples, validate on 10000 samples Epoch 1/15 30000/30000 [==============================] - 24s 816us/step - loss: 0.3012 - acc: 0.9058 - val_loss: 0.0921 - val_acc: 0.9719 Epoch 2/15 30000/30000 [==============================] - 24s 816us/step - loss: 0.2951 - acc: 0.9104 - val_loss: 0.0892 - val_acc: 0.9732 Epoch 3/15 30000/30000 [==============================] - 25s 825us/step - loss: 0.2871 - acc: 0.9135 - val_loss: 0.0876 - val_acc: 0.9749 Epoch 4/15 30000/30000 [==============================] - 25s 832us/step - loss: 0.2798 - acc: 0.9137 - val_loss: 0.0829 - val_acc: 0.9756 Epoch 5/15 30000/30000 [==============================] - 25s 820us/step - loss: 0.2770 - acc: 0.9152 - val_loss: 0.0788 - val_acc: 0.9766 Epoch 6/15 30000/30000 [==============================] - 22s 742us/step - loss: 0.2696 - acc: 0.9193 - val_loss: 0.0802 - val_acc: 0.9752 Epoch 7/15 30000/30000 [==============================] - 23s 767us/step - loss: 0.2676 - acc: 0.9201 - val_loss: 0.0816 - val_acc: 0.9764 Epoch 8/15 30000/30000 [==============================] - 25s 839us/step - loss: 0.2557 - acc: 0.9232 - val_loss: 0.0814 - val_acc: 0.9769 Epoch 9/15 30000/30000 [==============================] - 25s 818us/step - loss: 0.2586 - acc: 0.9238 - val_loss: 0.0815 - val_acc: 0.9764 Epoch 10/15 30000/30000 [==============================] - 25s 831us/step - loss: 0.2562 - acc: 0.9233 - val_loss: 0.0726 - val_acc: 0.9792 Epoch 11/15 30000/30000 [==============================] - 25s 827us/step - loss: 0.2551 - acc: 0.9239 - val_loss: 0.0745 - val_acc: 0.9773 Epoch 12/15 30000/30000 [==============================] - 23s 757us/step - loss: 0.2550 - acc: 0.9257 - val_loss: 0.0710 - val_acc: 0.9802 Epoch 13/15 30000/30000 [==============================] - 22s 747us/step - loss: 0.2521 - acc: 0.9264 - val_loss: 0.0711 - val_acc: 0.9789 Epoch 14/15 30000/30000 [==============================] - 26s 856us/step - loss: 0.2478 - acc: 0.9261 - val_loss: 0.0967 - val_acc: 0.9755 Epoch 15/15 30000/30000 [==============================] - 24s 806us/step - loss: 0.2561 - acc: 0.9262 - val_loss: 0.0762 - val_acc: 0.9786 Train on 45000 samples, validate on 10000 samples Epoch 1/15 45000/45000 [==============================] - 36s 791us/step - loss: 0.2576 - acc: 0.9228 - val_loss: 0.0740 - val_acc: 0.9773 Epoch 2/15 45000/45000 [==============================] - 35s 770us/step - loss: 0.2604 - acc: 0.9261 - val_loss: 0.0759 - val_acc: 0.9782 Epoch 3/15 45000/45000 [==============================] - 32s 715us/step - loss: 0.2559 - acc: 0.9254 - val_loss: 0.0793 - val_acc: 0.9775 Epoch 4/15 45000/45000 [==============================] - 36s 807us/step - loss: 0.2555 - acc: 0.9272 - val_loss: 0.0765 - val_acc: 0.9775 Epoch 5/15 45000/45000 [==============================] - 36s 795us/step - loss: 0.2573 - acc: 0.9254 - val_loss: 0.0743 - val_acc: 0.9782 Epoch 6/15 45000/45000 [==============================] - 35s 778us/step - loss: 0.2573 - acc: 0.9250 - val_loss: 0.0810 - val_acc: 0.9776 Epoch 7/15 45000/45000 [==============================] - 32s 707us/step - loss: 0.2542 - acc: 0.9275 - val_loss: 0.0726 - val_acc: 0.9783 Epoch 8/15 45000/45000 [==============================] - 36s 805us/step - loss: 0.2541 - acc: 0.9277 - val_loss: 0.0733 - val_acc: 0.9788 Epoch 9/15 45000/45000 [==============================] - 36s 806us/step - loss: 0.2595 - acc: 0.9256 - val_loss: 0.0739 - val_acc: 0.9789 Epoch 10/15 45000/45000 [==============================] - 35s 787us/step - loss: 0.2560 - acc: 0.9273 - val_loss: 0.0900 - val_acc: 0.9768 Epoch 11/15 45000/45000 [==============================] - 33s 728us/step - loss: 0.2595 - acc: 0.9241 - val_loss: 0.0725 - val_acc: 0.9784 Epoch 12/15 45000/45000 [==============================] - 34s 754us/step - loss: 0.2564 - acc: 0.9269 - val_loss: 0.0735 - val_acc: 0.9789 Epoch 13/15 45000/45000 [==============================] - 36s 806us/step - loss: 0.2573 - acc: 0.9261 - val_loss: 0.0816 - val_acc: 0.9775 Epoch 14/15 45000/45000 [==============================] - 36s 795us/step - loss: 0.2617 - acc: 0.9253 - val_loss: 0.0758 - val_acc: 0.9788 Epoch 15/15 45000/45000 [==============================] - 34s 759us/step - loss: 0.2588 - acc: 0.9259 - val_loss: 0.0757 - val_acc: 0.9792 Train on 60000 samples, validate on 10000 samples Epoch 1/15 60000/60000 [==============================] - 44s 739us/step - loss: 0.2582 - acc: 0.9255 - val_loss: 0.0903 - val_acc: 0.9740 Epoch 2/15 60000/60000 [==============================] - 49s 825us/step - loss: 0.2614 - acc: 0.9259 - val_loss: 0.0737 - val_acc: 0.9785 Epoch 3/15 60000/60000 [==============================] - 46s 773us/step - loss: 0.2619 - acc: 0.9262 - val_loss: 0.0843 - val_acc: 0.9783 Epoch 4/15 60000/60000 [==============================] - 43s 725us/step - loss: 0.2590 - acc: 0.9260 - val_loss: 0.0821 - val_acc: 0.9759 Epoch 5/15 60000/60000 [==============================] - 49s 810us/step - loss: 0.2621 - acc: 0.9254 - val_loss: 0.0771 - val_acc: 0.9777 Epoch 6/15 60000/60000 [==============================] - 47s 790us/step - loss: 0.2602 - acc: 0.9255 - val_loss: 0.0763 - val_acc: 0.9779 Epoch 7/15 60000/60000 [==============================] - 43s 714us/step - loss: 0.2613 - acc: 0.9269 - val_loss: 0.0982 - val_acc: 0.9742 Epoch 8/15 60000/60000 [==============================] - 49s 823us/step - loss: 0.2662 - acc: 0.9255 - val_loss: 0.0786 - val_acc: 0.9773 Epoch 9/15 60000/60000 [==============================] - 48s 795us/step - loss: 0.2663 - acc: 0.9239 - val_loss: 0.0832 - val_acc: 0.9772 Epoch 10/15 60000/60000 [==============================] - 44s 726us/step - loss: 0.2675 - acc: 0.9238 - val_loss: 0.0879 - val_acc: 0.9770 Epoch 11/15 60000/60000 [==============================] - 46s 772us/step - loss: 0.2639 - acc: 0.9248 - val_loss: 0.0963 - val_acc: 0.9756 Epoch 12/15 60000/60000 [==============================] - 48s 808us/step - loss: 0.2626 - acc: 0.9270 - val_loss: 0.0802 - val_acc: 0.9777 Epoch 13/15 60000/60000 [==============================] - 45s 750us/step - loss: 0.2674 - acc: 0.9241 - val_loss: 0.0742 - val_acc: 0.9785 Epoch 14/15 60000/60000 [==============================] - 45s 746us/step - loss: 0.2654 - acc: 0.9252 - val_loss: 0.0756 - val_acc: 0.9782 Epoch 15/15 60000/60000 [==============================] - 49s 824us/step - loss: 0.2705 - acc: 0.9242 - val_loss: 0.1262 - val_acc: 0.9733