{ "cells": [ { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "\n", "\n", "*This notebook contains an excerpt from the book [Machine Learning for OpenCV](https://www.packtpub.com/big-data-and-business-intelligence/machine-learning-opencv) by Michael Beyeler.\n", "The code is released under the [MIT license](https://opensource.org/licenses/MIT),\n", "and is available on [GitHub](https://github.com/mbeyeler/opencv-machine-learning).*\n", "\n", "*Note that this excerpt contains only the raw code - the book is rich with additional explanations and illustrations.\n", "If you find this content useful, please consider supporting the work by\n", "[buying the book](https://www.packtpub.com/big-data-and-business-intelligence/machine-learning-opencv)!*" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "\n", "< [Getting Acquainted with Deep Learning](09.03-Getting-Acquainted-with-Deep-Learning.ipynb) | [Contents](../README.md) | [Training a Deep Neural Net to Classify Handwritten Digits Using Keras](09.05-Training-a-Deep-Neural-Net-to-Classify-Handwritten-Digits-Using-Keras.ipynb) >" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true, "deletable": true, "editable": true }, "source": [ "https://github.com/fchollet/keras/blob/master/examples/mnist_cnn.py" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "# Training an MLP in OpenCV to Classify Handwritten Digits\n", "\n", "In this section, we will use an MLP in OpenCV to classify\n", "handwritten digits from the popular MNIST dataset, which has been constructed by Yann\n", "LeCun and colleagues and serves as a popular benchmark dataset for machine learning\n", "algorithms." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Loading the MNIST dataset\n", "\n", "The easiest way to obtain the MNIST dataset is using Keras:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Using Theano backend.\n", "WARNING (theano.configdefaults): g++ not available, if using conda: `conda install m2w64-toolchain`\n", "WARNING (theano.configdefaults): g++ not detected ! Theano will be unable to execute optimized C-implementations (for both CPU and GPU) and will default to Python implementations. Performance will be severely degraded. To remove this warning, set Theano flags cxx to an empty string.\n" ] } ], "source": [ "from keras.datasets import mnist\n", "(X_train, y_train), (X_test, y_test) = mnist.load_data()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This will download the data from the Amazon Cloud (might take a while depending on\n", "your internet connection) and automatically split the data into training and test sets." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This data comes in a format that we are already familiar with:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "((60000, 28, 28), (60000,))" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X_train.shape, y_train.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We should take note that the labels come as integer values between zero and nine\n", "(corresponding to the digits 0-9):" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], dtype=uint8)" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import numpy as np\n", "np.unique(y_train)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can have a look at some example digits:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": true, "deletable": true, "editable": true }, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "image/png": "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\nxasQQgghhPibdDptuVzOstmse00md6Xddru12Wxm0+k09PoeYlNCUwjxahKJhGWzWSsUClYoFKxY\nLFqhUHCbHm+A2+3W1uu1rddrW61Wtl6vbT6f23A4dNdgMHACdL1eWywWc2JT2U0hhBBCiL/JZDJW\nKpWsUqlYuVy2SqVimUxm5+9tt1sbDAbuMjNbLBYSmkKIj00ymbRsNmulUsmq1arVajWrVCpWLBat\nVCqFXrfbrS2Xy9A1nU6t3W5bu922VCplm83G5vO5K7tFZjMWi0loCiGEEEL8fyA0G42GXV9f2/X1\nteVyuZ3y2c1mY09PT5ZOp83MbD6f22g0epfPKKEphHg1yGiWSiWr1+t2fX1tV1dXVqvVrFqthq7t\ndmvz+dwWi4UtFgubz+c2Ho+tUCg4kTmbzWw0GrlS2e12a/F4/N16CYQQQgghPjqxWMzS6bQVi0Vr\nNBr27ds3+/79uxWLxdDfMTNbr9dOZC4WCxuNRpZIJN7lc0poCiFejS80b25u7O7uzq6urqzRaNjV\n1ZV7b2Y7vZiDwcBSqZTrHxiNRpZOp221WpnZ757Ofc3tQgghhBBfEc5o3t3d2X/9139ZpVIJ/Z1Y\nLObOVIvFwsbjsbXbbYvH32fwiITmJwEHbT5w++/hOMUOVPgz/vfb7db1wHG/nEoTxSGwjngtZTIZ\ny+fzViwWrVwuh8pnS6WS5fN5y2azlk6nQ6Y+cKNdrVaWz+dD/ZzZbDYkNNGrKcRb4zsmR627fU7L\niUTCksmkpVKp0Ot7rt19Ls5+yfpyuXT3mBA++9Z4MpncuWKxmKtSwbVcLnWeEOKExONxd8/xMwZV\nZPV63arVqpXLZSsWi+587z8L2NX/vZDQ/ODwoT7qoM8PBF58uKJGTcCEBddsNnNZI42VEPvwDx7x\neNwymYzlcjkrFAqhPk2IzEwmEwp4JBIJSyQSLouZzWYtk8nsXMvl0pkCHbLrFuJUcLCOg3b85wCi\nkq9UKuWCJvl83r2Pihq/1f4a1QeNXuggCGwymVgQBBYEQagcXfu9MAufN5LJZGido3qF3S1zuZwl\nEgkbjUY2Go1sPB7baDSy1WqlNSXECeHzFq58Pm+3t7dOaMIfI5vN2mKxMDNzyaT5fO4CjBCe73WP\nSmh+AqKi7P7v4SHgH9j9LCeEJg4bMFzhCKTMV0QUWHMQixhtwkITrmeFQsEJTc7qICqHr7dcLt3h\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(16, 6))\n", "for i in range(10):\n", " plt.subplot(2, 5, i + 1)\n", " plt.imshow(X_train[i, :, :], cmap='gray')\n", " plt.axis('off')\n", "plt.savefig('mnist-examples.png')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In fact, the MNIST dataset is the successor to the NIST digits dataset provided by scikit-learn\n", "that we used before (`sklearn.datasets.load_digits` (refer to [Chapter 2](02.00-Working-with-Data-in-OpenCV.ipynb), *Working\n", "with Data in OpenCV and Python*).\n", "\n", "Some notable differences are as follows:\n", "- MNIST images are significantly larger (28x28 pixels) than NIST images (8x8 pixels), thus paying more attention to fine details, such as distortions and individual differences between images of the same digit\n", "- The MNIST dataset is much larger than the NIST dataset, providing 60,000 training and 10,000 test samples (as compared to a total of 5,620 NIST images)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Preprocessing the MNIST dataset\n", "\n", "As we learned in [Chapter 4](04.00-Representing-Data-and-Engineering-Features.ipynb), *Representing Data and Engineering Features*, there are a number\n", "of preprocessing steps we might like to apply here, such as **centering**, **scaling**, and **representing categorical features**." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The easiest way to transform `y_train` and `y_test` is by the one-hot encoder from scikit-learn:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": true, "deletable": true, "editable": true }, "outputs": [], "source": [ "from sklearn.preprocessing import OneHotEncoder\n", "enc = OneHotEncoder(sparse=False, dtype=np.float32)\n", "y_train_pre = enc.fit_transform(y_train.reshape(-1, 1))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This will transform the labels of the training set from a `` vector with\n", "integers 0-9 into a `` matrix with floating point numbers 0.0 or 1.0.\n", "\n", "Analogously, we can transform `y_test` using the same procedure:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "y_test_pre = enc.fit_transform(y_test.reshape(-1, 1))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In addition, we need to preprocess `X_train` and `X_test` for the purpose of working with\n", "OpenCV. Currently, `X_train` and `X_test` are 3-D matrices ``\n", "with integer values between 0 and 255. Preferably, we want a 2-D matrix `` with floating point numbers, where `n_features` is 784:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "X_train_pre = X_train.astype(np.float32) / 255.0\n", "X_train_pre = X_train_pre.reshape((X_train.shape[0], -1))\n", "X_test_pre = X_test.astype(np.float32) / 255.0\n", "X_test_pre = X_test_pre.reshape((X_test.shape[0], -1))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Then we are ready to train the network." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Training an MLP using OpenCV\n", "\n", "We can set up and train an MLP in OpenCV with the following recipe:\n", "\n", "Instantiate a new MLP object:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": true, "deletable": true, "editable": true }, "outputs": [], "source": [ "import cv2\n", "mlp = cv2.ml.ANN_MLP_create()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Specify the size of every layer in the network. We are free to add as many layers as we want, but we need to make sure that the first layer has the same number of neurons as input features (784 in our case), and that the last layer has the same number of neurons as class labels (10 in our case):" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": true, "deletable": true, "editable": true }, "outputs": [], "source": [ "mlp.setLayerSizes(np.array([784, 512, 512, 10]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Specify an activation function. Here we use the sigmoidal activation function\n", "from before:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": true, "deletable": true, "editable": true }, "outputs": [], "source": [ "mlp.setActivationFunction(cv2.ml.ANN_MLP_SIGMOID_SYM, 2.5, 1.0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Specify the training method. Here we use the backpropagation algorithm\n", "described above. We also need to make sure that we choose a small enough\n", "learning rate. Since we have on the order of $10^5$ training samples, it is a good idea\n", "to set the learning rate to at most $10^{-5}$:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": true, "deletable": true, "editable": true }, "outputs": [], "source": [ "mlp.setTrainMethod(cv2.ml.ANN_MLP_BACKPROP)\n", "mlp.setBackpropWeightScale(0.0001)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Specify the termination criteria. Here we use the same criteria as above: to run\n", "training for ten iterations (`term_max_iter`) or until the error does no longer\n", "decrease significantly (`term_eps`):" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": true, "deletable": true, "editable": true }, "outputs": [], "source": [ "term_mode = cv2.TERM_CRITERIA_MAX_ITER + cv2.TERM_CRITERIA_EPS\n", "term_max_iter = 10\n", "term_eps = 0.01\n", "mlp.setTermCriteria((term_mode, term_max_iter, term_eps))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Train the network on the training set (`X_train_pre`):" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "When the training completes, we can calculate the accuracy score on the training set to see\n", "how far we got:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mlp.train(X_train_pre, cv2.ml.ROW_SAMPLE, y_train_pre)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "_, y_hat_train = mlp.predict(X_train_pre)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "0.92976666666666663" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn.metrics import accuracy_score\n", "accuracy_score(y_hat_train.round(), y_train_pre)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "But, of course, what really counts is the accuracy score we get on the held-out test data:" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "0.91690000000000005" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "_, y_hat_test = mlp.predict(X_test_pre)\n", "accuracy_score(y_hat_test.round(), y_test_pre)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "91.7% accuracy is not bad at all if you ask me! The first thing you should try is to change the\n", "layer sizes in `In [10]` above, and see how the test score changes.\n", "As you add more neurons\n", "to the network, you should see the training score increase—and with it, hopefully, the test\n", "score.\n", "\n", "However, having `N` neurons in a single layer is not the same as having them spread\n", "out over several layers! Can you confirm this observation?" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "\n", "< [Getting Acquainted with Deep Learning](09.03-Getting-Acquainted-with-Deep-Learning.ipynb) | [Contents](../README.md) | [Training a Deep Neural Net to Classify Handwritten Digits Using Keras](09.05-Training-a-Deep-Neural-Net-to-Classify-Handwritten-Digits-Using-Keras.ipynb) >" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.3" } }, "nbformat": 4, "nbformat_minor": 0 }