Skip to content

Instantly share code, notes, and snippets.

@zer0n
Created March 1, 2017 01:17
Show Gist options
  • Save zer0n/bdf994a846bc1913fb55613f3d466891 to your computer and use it in GitHub Desktop.
Save zer0n/bdf994a846bc1913fb55613f3d466891 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Hand-written digit classifier"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import numpy as np\n",
"from keras.datasets import mnist\n",
"from keras.models import Sequential\n",
"from keras.layers import Dense, Dropout, Activation, Flatten\n",
"from keras.layers import Convolution2D, MaxPooling2D\n",
"from keras.utils import np_utils\n",
"from keras import backend as K"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Data preparation"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Downloading data from https://s3.amazonaws.com/img-datasets/mnist.pkl.gz\n",
"X_train shape: (60000, 1, 28, 28)\n",
"60000 train samples\n",
"10000 test samples\n"
]
}
],
"source": [
"batch_size = 128\n",
"nb_classes = 10\n",
"nb_epoch = 12\n",
"\n",
"# input image dimensions\n",
"img_rows, img_cols = 28, 28\n",
"# number of convolutional filters to use\n",
"nb_filters = 32\n",
"# size of pooling area for max pooling\n",
"pool_size = (2, 2)\n",
"# convolution kernel size\n",
"kernel_size = (3, 3)\n",
"\n",
"# the data, shuffled and split between train and test sets\n",
"(X_train, y_train), (X_test, y_test) = mnist.load_data()\n",
"\n",
"if K.image_dim_ordering() == 'th':\n",
" X_train = X_train.reshape(X_train.shape[0], 1, img_rows, img_cols)\n",
" X_test = X_test.reshape(X_test.shape[0], 1, img_rows, img_cols)\n",
" input_shape = (1, img_rows, img_cols)\n",
"else:\n",
" X_train = X_train.reshape(X_train.shape[0], img_rows, img_cols, 1)\n",
" X_test = X_test.reshape(X_test.shape[0], img_rows, img_cols, 1)\n",
" input_shape = (img_rows, img_cols, 1)\n",
"\n",
"X_train = X_train.astype('float32')\n",
"X_test = X_test.astype('float32')\n",
"X_train /= 255\n",
"X_test /= 255\n",
"print('X_train shape:', X_train.shape)\n",
"print(X_train.shape[0], 'train samples')\n",
"print(X_test.shape[0], 'test samples')\n",
"\n",
"# convert class vectors to binary class matrices\n",
"Y_train = np_utils.to_categorical(y_train, nb_classes)\n",
"Y_test = np_utils.to_categorical(y_test, nb_classes)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Model definition"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"model = Sequential()\n",
"\n",
"model.add(Convolution2D(nb_filters, kernel_size[0], kernel_size[1],\n",
" border_mode='valid',\n",
" input_shape=input_shape))\n",
"model.add(Activation('relu'))\n",
"model.add(Convolution2D(nb_filters, kernel_size[0], kernel_size[1]))\n",
"model.add(Activation('relu'))\n",
"model.add(MaxPooling2D(pool_size=pool_size))\n",
"model.add(Dropout(0.25))\n",
"\n",
"model.add(Flatten())\n",
"model.add(Dense(128))\n",
"model.add(Activation('relu'))\n",
"model.add(Dropout(0.5))\n",
"model.add(Dense(nb_classes))\n",
"model.add(Activation('softmax'))"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from keras.utils.visualize_util import plot\n",
"plot(model, to_file='model_mnist.png')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Visualize model architecture\n",
"<img src='model_mnist.png'>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Training"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Train on 60000 samples, validate on 10000 samples\n",
"Epoch 1/12\n",
"60000/60000 [==============================] - 171s - loss: 0.3761 - acc: 0.8855 - val_loss: 0.0930 - val_acc: 0.9710\n",
"Epoch 2/12\n",
"60000/60000 [==============================] - 168s - loss: 0.1413 - acc: 0.9582 - val_loss: 0.0636 - val_acc: 0.9791\n",
"Epoch 3/12\n",
"60000/60000 [==============================] - 169s - loss: 0.1084 - acc: 0.9674 - val_loss: 0.0547 - val_acc: 0.9825\n",
"Epoch 4/12\n",
"60000/60000 [==============================] - 171s - loss: 0.0940 - acc: 0.9724 - val_loss: 0.0465 - val_acc: 0.9849\n",
"Epoch 5/12\n",
"60000/60000 [==============================] - 170s - loss: 0.0806 - acc: 0.9756 - val_loss: 0.0416 - val_acc: 0.9860\n",
"Epoch 6/12\n",
"60000/60000 [==============================] - 167s - loss: 0.0729 - acc: 0.9786 - val_loss: 0.0377 - val_acc: 0.9877\n",
"Epoch 7/12\n",
"60000/60000 [==============================] - 168s - loss: 0.0651 - acc: 0.9807 - val_loss: 0.0354 - val_acc: 0.9879\n",
"Epoch 8/12\n",
"60000/60000 [==============================] - 169s - loss: 0.0590 - acc: 0.9825 - val_loss: 0.0348 - val_acc: 0.9894\n",
"Epoch 9/12\n",
"60000/60000 [==============================] - 166s - loss: 0.0578 - acc: 0.9827 - val_loss: 0.0322 - val_acc: 0.9894\n",
"Epoch 10/12\n",
"60000/60000 [==============================] - 166s - loss: 0.0535 - acc: 0.9839 - val_loss: 0.0316 - val_acc: 0.9897\n",
"Epoch 11/12\n",
"60000/60000 [==============================] - 167s - loss: 0.0510 - acc: 0.9845 - val_loss: 0.0301 - val_acc: 0.9900\n",
"Epoch 12/12\n",
"60000/60000 [==============================] - 169s - loss: 0.0476 - acc: 0.9856 - val_loss: 0.0295 - val_acc: 0.9890\n",
"Test score: 0.0294859103536\n",
"Test accuracy: 0.989\n"
]
}
],
"source": [
"model.compile(loss='categorical_crossentropy',\n",
" optimizer='adadelta',\n",
" metrics=['accuracy'])\n",
"\n",
"model.fit(X_train, Y_train, batch_size=batch_size, nb_epoch=nb_epoch,\n",
" verbose=1, validation_data=(X_test, Y_test))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Testing"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"10000/10000 [==============================] - 10s \n"
]
}
],
"source": [
"from sklearn.metrics import classification_report\n",
"\n",
"y_pred = model.predict_classes(X_test)\n",
"print(classification_report(y_test, y_pred))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Visualize the prediction on some examples"
]
},
{
"cell_type": "code",
"execution_count": 63,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 64,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Input Pixels\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f1f5e1bd190>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"x = X_test[np.random.randint(len(X_test))]\n",
"print('Input Pixels')\n",
"plt.imshow(x.reshape(28,28), cmap=cm.binary);"
]
},
{
"cell_type": "code",
"execution_count": 65,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Prediction: 5\n"
]
}
],
"source": [
"prediction = model.predict_classes(x.reshape(1,1,28,28), verbose=0)[0]\n",
"print('Prediction:', prediction)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.6"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment