from keras.models import Sequential from keras.layers import Dense from keras.utils import to_categorical import sklearn.datasets import datetime import matplotlib.pyplot as plt import numpy as np train_libsvm = "/dbfs/databricks-datasets/mnist-digits/data-001/mnist-digits-train.txt" test_libsvm = "/dbfs/databricks-datasets/mnist-digits/data-001/mnist-digits-test.txt" X_train, y_train = sklearn.datasets.load_svmlight_file(train_libsvm, n_features=784) X_train = X_train.toarray() X_test, y_test = sklearn.datasets.load_svmlight_file(test_libsvm, n_features=784) X_test = X_test.toarray() model = Sequential() model.add(Dense(20, input_dim=784, kernel_initializer='normal', activation='relu')) model.add(Dense(15, kernel_initializer='normal', activation='relu')) model.add(Dense(10, kernel_initializer='normal', activation='softmax')) model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['categorical_accuracy']) categorical_labels = to_categorical(y_train, num_classes=10) start = datetime.datetime.today() history = model.fit(X_train, categorical_labels, epochs=40, batch_size=100, validation_split=0.1, verbose=2) scores = model.evaluate(X_test, to_categorical(y_test, num_classes=10)) print for i in range(len(model.metrics_names)): print("%s: %f" % (model.metrics_names[i], scores[i])) print ("Start: " + str(start)) end = datetime.datetime.today() print ("End: " + str(end)) print ("Elapse: " + str(end-start))
Using TensorFlow backend.
Train on 54000 samples, validate on 6000 samples
Epoch 1/40
1s - loss: 0.4799 - categorical_accuracy: 0.8438 - val_loss: 0.1881 - val_categorical_accuracy: 0.9443
Epoch 2/40
1s - loss: 0.2151 - categorical_accuracy: 0.9355 - val_loss: 0.1650 - val_categorical_accuracy: 0.9503
Epoch 3/40
1s - loss: 0.1753 - categorical_accuracy: 0.9484 - val_loss: 0.1367 - val_categorical_accuracy: 0.9587
Epoch 4/40
1s - loss: 0.1533 - categorical_accuracy: 0.9543 - val_loss: 0.1321 - val_categorical_accuracy: 0.9627
Epoch 5/40
1s - loss: 0.1386 - categorical_accuracy: 0.9587 - val_loss: 0.1321 - val_categorical_accuracy: 0.9618
Epoch 6/40
1s - loss: 0.1287 - categorical_accuracy: 0.9612 - val_loss: 0.1332 - val_categorical_accuracy: 0.9613
Epoch 7/40
1s - loss: 0.1199 - categorical_accuracy: 0.9643 - val_loss: 0.1339 - val_categorical_accuracy: 0.9602
Epoch 8/40
1s - loss: 0.1158 - categorical_accuracy: 0.9642 - val_loss: 0.1220 - val_categorical_accuracy: 0.9658
Epoch 9/40
1s - loss: 0.1099 - categorical_accuracy: 0.9660 - val_loss: 0.1342 - val_categorical_accuracy: 0.9648
Epoch 10/40
1s - loss: 0.1056 - categorical_accuracy: 0.9675 - val_loss: 0.1344 - val_categorical_accuracy: 0.9622
Epoch 11/40
1s - loss: 0.0989 - categorical_accuracy: 0.9691 - val_loss: 0.1266 - val_categorical_accuracy: 0.9643
Epoch 12/40
1s - loss: 0.0982 - categorical_accuracy: 0.9699 - val_loss: 0.1226 - val_categorical_accuracy: 0.9650
Epoch 13/40
1s - loss: 0.0945 - categorical_accuracy: 0.9717 - val_loss: 0.1274 - val_categorical_accuracy: 0.9648
Epoch 14/40
1s - loss: 0.0915 - categorical_accuracy: 0.9711 - val_loss: 0.1374 - val_categorical_accuracy: 0.9637
Epoch 15/40
1s - loss: 0.0885 - categorical_accuracy: 0.9719 - val_loss: 0.1541 - val_categorical_accuracy: 0.9590
Epoch 16/40
1s - loss: 0.0845 - categorical_accuracy: 0.9736 - val_loss: 0.1307 - val_categorical_accuracy: 0.9658
Epoch 17/40
1s - loss: 0.0835 - categorical_accuracy: 0.9742 - val_loss: 0.1451 - val_categorical_accuracy: 0.9613
Epoch 18/40
1s - loss: 0.0801 - categorical_accuracy: 0.9749 - val_loss: 0.1352 - val_categorical_accuracy: 0.9647
Epoch 19/40
1s - loss: 0.0780 - categorical_accuracy: 0.9754 - val_loss: 0.1343 - val_categorical_accuracy: 0.9638
Epoch 20/40
1s - loss: 0.0800 - categorical_accuracy: 0.9746 - val_loss: 0.1306 - val_categorical_accuracy: 0.9682
Epoch 21/40
1s - loss: 0.0745 - categorical_accuracy: 0.9765 - val_loss: 0.1465 - val_categorical_accuracy: 0.9665
Epoch 22/40
1s - loss: 0.0722 - categorical_accuracy: 0.9769 - val_loss: 0.1390 - val_categorical_accuracy: 0.9657
Epoch 23/40
1s - loss: 0.0728 - categorical_accuracy: 0.9771 - val_loss: 0.1511 - val_categorical_accuracy: 0.9633
Epoch 24/40
1s - loss: 0.0717 - categorical_accuracy: 0.9772 - val_loss: 0.1515 - val_categorical_accuracy: 0.9638
Epoch 25/40
1s - loss: 0.0686 - categorical_accuracy: 0.9784 - val_loss: 0.1670 - val_categorical_accuracy: 0.9618
Epoch 26/40
1s - loss: 0.0666 - categorical_accuracy: 0.9789 - val_loss: 0.1446 - val_categorical_accuracy: 0.9655
Epoch 27/40
1s - loss: 0.0663 - categorical_accuracy: 0.9789 - val_loss: 0.1537 - val_categorical_accuracy: 0.9623
Epoch 28/40
1s - loss: 0.0671 - categorical_accuracy: 0.9792 - val_loss: 0.1541 - val_categorical_accuracy: 0.9677
Epoch 29/40
1s - loss: 0.0630 - categorical_accuracy: 0.9804 - val_loss: 0.1642 - val_categorical_accuracy: 0.9632
Epoch 30/40
1s - loss: 0.0660 - categorical_accuracy: 0.9797 - val_loss: 0.1585 - val_categorical_accuracy: 0.9648
Epoch 31/40
1s - loss: 0.0646 - categorical_accuracy: 0.9801 - val_loss: 0.1574 - val_categorical_accuracy: 0.9640
Epoch 32/40
1s - loss: 0.0640 - categorical_accuracy: 0.9789 - val_loss: 0.1506 - val_categorical_accuracy: 0.9657
Epoch 33/40
1s - loss: 0.0623 - categorical_accuracy: 0.9801 - val_loss: 0.1583 - val_categorical_accuracy: 0.9662
Epoch 34/40
1s - loss: 0.0630 - categorical_accuracy: 0.9803 - val_loss: 0.1626 - val_categorical_accuracy: 0.9630
Epoch 35/40
1s - loss: 0.0579 - categorical_accuracy: 0.9815 - val_loss: 0.1647 - val_categorical_accuracy: 0.9640
Epoch 36/40
1s - loss: 0.0605 - categorical_accuracy: 0.9815 - val_loss: 0.1693 - val_categorical_accuracy: 0.9635
Epoch 37/40
1s - loss: 0.0586 - categorical_accuracy: 0.9821 - val_loss: 0.1753 - val_categorical_accuracy: 0.9635
Epoch 38/40
1s - loss: 0.0583 - categorical_accuracy: 0.9812 - val_loss: 0.1703 - val_categorical_accuracy: 0.9653
Epoch 39/40
1s - loss: 0.0593 - categorical_accuracy: 0.9807 - val_loss: 0.1736 - val_categorical_accuracy: 0.9638
Epoch 40/40
1s - loss: 0.0538 - categorical_accuracy: 0.9826 - val_loss: 0.1817 - val_categorical_accuracy: 0.9635
32/10000 [..............................] - ETA: 0s
1952/10000 [====>.........................] - ETA: 0s
3872/10000 [==========>...................] - ETA: 0s
5792/10000 [================>.............] - ETA: 0s
7712/10000 [======================>.......] - ETA: 0s
9632/10000 [===========================>..] - ETA: 0s
loss: 0.205790
categorical_accuracy: 0.959600
Start: 2017-12-07 09:30:17.311756
End: 2017-12-07 09:31:14.504506
Elapse: 0:00:57.192750
import matplotlib.pyplot as plt fig, ax = plt.subplots() fig.set_size_inches((5,5)) plt.plot(history.history['loss']) plt.plot(history.history['val_loss']) plt.title('model loss') plt.ylabel('loss') plt.xlabel('epoch') plt.legend(['train', 'val'], loc='upper left') display(fig)
train_libsvm = "/dbfs/databricks-datasets/mnist-digits/data-001/mnist-digits-train.txt" test_libsvm = "/dbfs/databricks-datasets/mnist-digits/data-001/mnist-digits-test.txt" X_train, y_train = sklearn.datasets.load_svmlight_file(train_libsvm, n_features=784) X_train = X_train.toarray() X_test, y_test = sklearn.datasets.load_svmlight_file(test_libsvm, n_features=784) X_test = X_test.toarray() X_train = X_train.reshape( (X_train.shape[0], 28, 28, 1) ) X_train = X_train.astype('float32') X_train /= 255 y_train = to_categorical(y_train, num_classes=10) X_test = X_test.reshape( (X_test.shape[0], 28, 28, 1) ) X_test = X_test.astype('float32') X_test /= 255 y_test = to_categorical(y_test, num_classes=10)
from keras.layers import Dense, Dropout, Activation, Flatten, Conv2D, MaxPooling2D model = Sequential() model.add(Conv2D(8, # number of kernels (4, 4), # kernel size padding='valid', # no padding; output will be smaller than input input_shape=(28, 28, 1))) model.add(Activation('relu')) model.add(MaxPooling2D(pool_size=(2,2))) model.add(Flatten()) model.add(Dense(128)) model.add(Activation('relu')) # alternative syntax for applying activation model.add(Dense(10)) model.add(Activation('softmax')) model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
start = datetime.datetime.today() history = model.fit(X_train, y_train, batch_size=128, epochs=8, verbose=2, validation_split=0.1) scores = model.evaluate(X_test, y_test, verbose=1) print for i in range(len(model.metrics_names)): print("%s: %f" % (model.metrics_names[i], scores[i]))
Train on 54000 samples, validate on 6000 samples
Epoch 1/8
12s - loss: 0.3183 - acc: 0.9115 - val_loss: 0.1114 - val_acc: 0.9713
Epoch 2/8
13s - loss: 0.1021 - acc: 0.9700 - val_loss: 0.0714 - val_acc: 0.9803
Epoch 3/8
12s - loss: 0.0706 - acc: 0.9792 - val_loss: 0.0574 - val_acc: 0.9852
Epoch 4/8
15s - loss: 0.0518 - acc: 0.9851 - val_loss: 0.0538 - val_acc: 0.9857
Epoch 5/8
16s - loss: 0.0419 - acc: 0.9875 - val_loss: 0.0457 - val_acc: 0.9872
Epoch 6/8
16s - loss: 0.0348 - acc: 0.9896 - val_loss: 0.0473 - val_acc: 0.9867
Epoch 7/8
16s - loss: 0.0280 - acc: 0.9917 - val_loss: 0.0445 - val_acc: 0.9875
Epoch 8/8
14s - loss: 0.0225 - acc: 0.9934 - val_loss: 0.0485 - val_acc: 0.9868
32/10000 [..............................] - ETA: 0s
672/10000 [=>............................] - ETA: 0s
1312/10000 [==>...........................] - ETA: 0s
1952/10000 [====>.........................] - ETA: 0s
2560/10000 [======>.......................] - ETA: 0s
3072/10000 [========>.....................] - ETA: 0s
3712/10000 [==========>...................] - ETA: 0s
4384/10000 [============>.................] - ETA: 0s
5024/10000 [==============>...............] - ETA: 0s
5632/10000 [===============>..............] - ETA: 0s
6304/10000 [=================>............] - ETA: 0s
6976/10000 [===================>..........] - ETA: 0s
7616/10000 [=====================>........] - ETA: 0s
8256/10000 [=======================>......] - ETA: 0s
8960/10000 [=========================>....] - ETA: 0s
9600/10000 [===========================>..] - ETA: 0s
loss: 0.054931
acc: 0.983000
fig, ax = plt.subplots() fig.set_size_inches((5,5)) plt.plot(history.history['loss']) plt.plot(history.history['val_loss']) plt.title('model loss') plt.ylabel('loss') plt.xlabel('epoch') plt.legend(['train', 'val'], loc='upper left') display(fig)
model = Sequential() model.add(Conv2D(8, # number of kernels (4, 4), # kernel size padding='valid', input_shape=(28, 28, 1))) model.add(Activation('relu')) model.add(Conv2D(8, (4, 4))) model.add(Activation('relu')) model.add(MaxPooling2D(pool_size=(2,2))) model.add(Flatten()) model.add(Dense(128)) model.add(Activation('relu')) model.add(Dense(10)) model.add(Activation('softmax')) model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) history = model.fit(X_train, y_train, batch_size=128, epochs=15, verbose=2, validation_split=0.1) scores = model.evaluate(X_test, y_test, verbose=1) print for i in range(len(model.metrics_names)): print("%s: %f" % (model.metrics_names[i], scores[i]))
Train on 54000 samples, validate on 6000 samples
Epoch 1/15
21s - loss: 0.2698 - acc: 0.9242 - val_loss: 0.0763 - val_acc: 0.9790
Epoch 2/15
22s - loss: 0.0733 - acc: 0.9772 - val_loss: 0.0593 - val_acc: 0.9840
Epoch 3/15
21s - loss: 0.0522 - acc: 0.9838 - val_loss: 0.0479 - val_acc: 0.9867
Epoch 4/15
21s - loss: 0.0394 - acc: 0.9876 - val_loss: 0.0537 - val_acc: 0.9828
Epoch 5/15
21s - loss: 0.0301 - acc: 0.9907 - val_loss: 0.0434 - val_acc: 0.9885
Epoch 6/15
21s - loss: 0.0255 - acc: 0.9916 - val_loss: 0.0444 - val_acc: 0.9867
Epoch 7/15
21s - loss: 0.0192 - acc: 0.9941 - val_loss: 0.0416 - val_acc: 0.9892
Epoch 8/15
21s - loss: 0.0155 - acc: 0.9952 - val_loss: 0.0405 - val_acc: 0.9900
Epoch 9/15
21s - loss: 0.0143 - acc: 0.9953 - val_loss: 0.0490 - val_acc: 0.9860
Epoch 10/15
22s - loss: 0.0122 - acc: 0.9963 - val_loss: 0.0478 - val_acc: 0.9877
Epoch 11/15
21s - loss: 0.0087 - acc: 0.9972 - val_loss: 0.0508 - val_acc: 0.9877
Epoch 12/15
21s - loss: 0.0098 - acc: 0.9967 - val_loss: 0.0401 - val_acc: 0.9902
Epoch 13/15
21s - loss: 0.0060 - acc: 0.9984 - val_loss: 0.0450 - val_acc: 0.9897
Epoch 14/15
21s - loss: 0.0061 - acc: 0.9981 - val_loss: 0.0523 - val_acc: 0.9883
Epoch 15/15
21s - loss: 0.0069 - acc: 0.9977 - val_loss: 0.0534 - val_acc: 0.9885
32/10000 [..............................] - ETA: 1s
448/10000 [>.............................] - ETA: 1s
864/10000 [=>............................] - ETA: 1s
1280/10000 [==>...........................] - ETA: 1s
1696/10000 [====>.........................] - ETA: 1s
2112/10000 [=====>........................] - ETA: 0s
2560/10000 [======>.......................] - ETA: 0s
2976/10000 [=======>......................] - ETA: 0s
3392/10000 [=========>....................] - ETA: 0s
3840/10000 [==========>...................] - ETA: 0s
4320/10000 [===========>..................] - ETA: 0s
4736/10000 [=============>................] - ETA: 0s
5152/10000 [==============>...............] - ETA: 0s
5568/10000 [===============>..............] - ETA: 0s
5952/10000 [================>.............] - ETA: 0s
6368/10000 [==================>...........] - ETA: 0s
6816/10000 [===================>..........] - ETA: 0s
7200/10000 [====================>.........] - ETA: 0s
7648/10000 [=====================>........] - ETA: 0s
8000/10000 [=======================>......] - ETA: 0s
8384/10000 [========================>.....] - ETA: 0s
8800/10000 [=========================>....] - ETA: 0s
9216/10000 [==========================>...] - ETA: 0s
9632/10000 [===========================>..] - ETA: 0s
loss: 0.043144
acc: 0.989100
model = Sequential() model.add(Conv2D(32, # number of kernels (3, 3), # kernel size padding='valid', input_shape=(28, 28, 1))) model.add(Activation('relu')) model.add(Conv2D(32, (3, 3))) model.add(Activation('relu')) model.add(MaxPooling2D(pool_size=(2,2))) model.add(Dropout(0.25)) # <- regularize model.add(Flatten()) model.add(Dense(128)) model.add(Activation('relu')) model.add(Dropout(0.5)) # <-regularize model.add(Dense(10)) model.add(Activation('softmax')) model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) history = model.fit(X_train, y_train, batch_size=128, epochs=15, verbose=2) scores = model.evaluate(X_test, y_test, verbose=2) print for i in range(len(model.metrics_names)): print("%s: %f" % (model.metrics_names[i], scores[i]))
Epoch 1/15
122s - loss: 0.2673 - acc: 0.9186
Epoch 2/15
123s - loss: 0.0903 - acc: 0.9718
Epoch 3/15
124s - loss: 0.0696 - acc: 0.9787
Epoch 4/15
130s - loss: 0.0598 - acc: 0.9821
Epoch 5/15
140s - loss: 0.0507 - acc: 0.9842
Epoch 6/15
148s - loss: 0.0441 - acc: 0.9864
Epoch 7/15
152s - loss: 0.0390 - acc: 0.9878
Epoch 8/15
153s - loss: 0.0353 - acc: 0.9888
Epoch 9/15
161s - loss: 0.0329 - acc: 0.9894
Epoch 10/15
171s - loss: 0.0323 - acc: 0.9894
Epoch 11/15
172s - loss: 0.0288 - acc: 0.9906
Epoch 12/15
71s - loss: 0.0255 - acc: 0.9914
Epoch 13/15
86s - loss: 0.0245 - acc: 0.9916
Epoch 14/15
91s - loss: 0.0232 - acc: 0.9922
Epoch 15/15
86s - loss: 0.0218 - acc: 0.9931
loss: 0.029627
acc: 0.991400
SDS-2.2, Scalable Data Science
This is used in a non-profit educational setting with kind permission of Adam Breindel. This is not licensed by Adam for use in a for-profit setting. Please contact Adam directly at
adbreind@gmail.com
to request or report such use cases or abuses. A few minor modifications and additional mathematical statistical pointers have been added by Raazesh Sainudiin when teaching PhD students in Uppsala University.Last refresh: Never