{ "metadata": { "name": "", "signature": "sha256:146116cf3e4a92837c8bd2a3ee5b9c12abb3eff2e4d9fa81216518cc81869f44" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "code", "collapsed": false, "input": [ "import pybrain\n", "import numpy as np\n", "import pandas as pd\n", "from matplotlib import pyplot as plt\n", "%matplotlib inline" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Neural Networks and PyBrain" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Feedforward neural network:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$o_j^{(n)} = f\\left(\\sum_{i\\; in\\; layer (n-1)}w_{ij}o_i^{(n-1)} \\right)$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Logistic activation/transfer function:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$f(x) = \\frac{1}{1 - e^{-(x-b)}}$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Things to fine tune for a neural network:\n", "- number of hidden layers\n", "- number of neurons in each layer\n", "- learning rate\n", "- momentum\n", "- (bias)\n", "- the activation function\n", "Neural networks can be very efficient at picking up nonlinear, complex patterns that would not be recognized by simpler algorithms. This comes at the expense of a lot of engineering and fine-tuning. In general you need large datasets for the neural network to be properly trained. Too much training can lead to overfitting: the network becomes good at recognizing the entries in the training set and not the general patterns." ] }, { "cell_type": "heading", "level": 4, "metadata": {}, "source": [ "XOR Example" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$(1,1), (0,0) \\rightarrow 0$$\n", "$$(1,0), (0,1) \\rightarrow 1$$\n", "\n", "We are intereste in seeing how the function acts on the whole space $[0,1]\\times [0,1]$ when we are only training it on the corners -- we get exactly the separation planes we talked about in lecture." ] }, { "cell_type": "code", "collapsed": false, "input": [ "from pybrain.tools.shortcuts import buildNetwork\n", "net = buildNetwork(2, 3, 2, bias=True)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 51 }, { "cell_type": "code", "collapsed": false, "input": [ "from pybrain.tools.shortcuts import buildNetwork\n", "from pybrain.datasets import SupervisedDataSet, ClassificationDataSet\n", "from pybrain.supervised.trainers import BackpropTrainer\n", "\n", "\n", "N = buildNetwork(2,4,1) #set the number of inputs, neurons in hidden layer (only one layer in this example), outputs\n", "\n", "N.activate([2,1]) #forward-feed an input, returns the output of the network" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 304, "text": [ "array([ 1.28465511])" ] } ], "prompt_number": 304 }, { "cell_type": "code", "collapsed": false, "input": [ "def plot_nn_prediction(N): # a function to plot the binary output of a network on the [0,1]x[0,1] space\n", " x_list = np.arange(0.0,1.0,0.025)\n", " z = [0.0 if N.activate([x,y])<0.5 else 1.0 for x in x_list for y in x_list]\n", " z = np.array(z)\n", " grid = z.reshape((len(x_list), len(x_list)))\n", " plt.imshow(grid, extent=(x_list.min(), x_list.max(), x_list.min(), x_list.max()),cmap=plt.get_cmap('Greys_r'))\n", " plt.show()" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 305 }, { "cell_type": "code", "collapsed": false, "input": [ "D = SupervisedDataSet(2,1) # define a dataset in pybrain\n", "D.addSample([0,0],[0])\n", "D.addSample([0,1],[1])\n", "D.addSample([1,0],[1])\n", "D.addSample([1,1],[0])\n", "\n", "T = BackpropTrainer(N, learningrate=0.01, momentum=0.99) # define the trainer object and the training params\n", "\n", "print \"before training (random network)\"\n", "plot_nn_prediction(N)\n", "T.trainOnDataset(D, 1000) # train on the dataset 1000 times\n", "print \"after training\"\n", "plot_nn_prediction(N)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "before training (random network)\n" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "after training\n" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 306 }, { "cell_type": "heading", "level": 4, "metadata": {}, "source": [ "Iris Dataset" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from sklearn import datasets\n", "from sklearn.cross_validation import train_test_split\n", "\n", "iris = datasets.load_iris()\n", "X = iris['data']\n", "Y = iris['target']\n", "\n", "X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.33)\n", "\n", "n_hidden_neurons = 10\n", "\n", "def target_vector(n): # we will use a 3-component output\n", " if n==0:\n", " return [1,0,0]\n", " elif n==1:\n", " return [0,1,0]\n", " else:\n", " return [0,0,1]\n", "\n", "ann = buildNetwork(4, n_hidden_neurons, 3, bias=True)\n", "trainer = BackpropTrainer(ann, momentum=0.1, verbose=False, weightdecay=0.01, learningrate=0.01)\n", "\n", "ds_train = ClassificationDataSet(4, 3)\n", "for i in xrange(len(X_train)):\n", " ds_train.addSample(X_train[i], target_vector(Y_train[i]))\n", " \n", "ds_test = ClassificationDataSet(4, 3)\n", "for i in xrange(len(X_test)):\n", " ds_test.addSample(X_test[i], target_vector(Y_test[i]))\n", " \n", "trainer.trainOnDataset(ds_train,50) # train 50 times on the training set\n", " " ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 291 }, { "cell_type": "code", "collapsed": false, "input": [ "def interpret_array(a):\n", " if max(a)==a[0]:\n", " return 0\n", " elif max(a)==a[1]:\n", " return 1\n", " else:\n", " return 2\n", "\n", "\n", "y_pred = map(interpret_array, ann.activateOnDataset(ds_test))" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 292 }, { "cell_type": "code", "collapsed": false, "input": [ "from sklearn.metrics import accuracy_score\n", "\n", "print accuracy_score(y_pred, Y_test) # accuracy on the test set" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "0.94\n" ] } ], "prompt_number": 293 }, { "cell_type": "code", "collapsed": false, "input": [ "# examine how the network performs at each iteration of training through the training set:\n", "ann = buildNetwork(4, n_hidden_neurons, 3, bias=True)\n", "trainer = BackpropTrainer(ann, momentum=0.1, verbose=False, weightdecay=0.01, learningrate=0.01)\n", "scores = [accuracy_score(map(interpret_array, ann.activateOnDataset(ds_test)), Y_test)]\n", "for n in xrange(100):\n", " trainer.trainOnDataset(ds_train)\n", " scores.append(accuracy_score(map(interpret_array, ann.activateOnDataset(ds_test)), Y_test))\n", "plt.plot(scores)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 190, "text": [ "[]" ] }, { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAAXgAAAEACAYAAAC57G0KAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XmcFPWd//HXOAMyIniAhHtQYDg8UFFjPOIYUdCIGH/m\ngVfMkjyyJCvZxN0kqMmu8NhN1JjdHMsviTGuP7MmaqKuYVDBI445PBkQSbjlEJgBBAURAjLQvz8+\nXema6qququ6e7pnq9/Px6AfT3UX1t2umP/Xpz/coEBERERERERERERERERERERERERGpWP8NbAWW\n5tjmR8BqYAlwWikaJSIihTsfC9pBAf4y4Kn0zx8FXilFo0REpDiGERzgfwpMdd1fAXykoxskIiK5\nHVaEfQwCNrrubwIGF2G/IiJSgGIEeIAqz/1UkfYrIiJ5qinCPjYDQ1z3B6cfa2f48OGpt956qwgv\nJyJSUd4CRuTzH4uRwc8Fbkz/fDawExt1085bb71FKpXSLZXi9ttvL3sbOstNx0LHQsci9w0Ynm9w\njpLBPwRcAPTFau23A93Sz92DjaC5DFgD7AGm5dsYEREpnigB/toI28wotCEiIlJcxepklRgaGhrK\n3YROQ8ciQ8ciQ8eiOLyjXzpSKl1PEhGRiKqqqiDPWK0MXkQkoRTgRUQSSgFeRCShFOBFRBJKAV5E\nJKEU4EVEEkoBXkQkoRTgRUQSSgFeRCShirFcsFSI99+HXr2gqpTzn/OUSll7jzoq+7m//hXWr8/c\nP/ZY+EiEa5Dt2uW/vw8/BPdK2L17w6BB2du1tcH+/dCzZ/ZzO3dCa6v/6/bsCUOH5t++fOWzv/37\n4dAhqK3131/v3v5/P+vX2+8F4LDDYORI+zeXXMfsiCOgri5W0/ngA9i4MXw7gBEjoFu38O2C5DoW\nxaSlCiSySZNg2jSYOjV823JbvBj+7u9gyZLs5771Lbj3XgvsBw5AdTWsXJl7f3/+M0ycCJuzrnQA\nc+bA7bdDv352YmltteDj/fA+8AA89RQ88kj2Pi6/HJYutcDktXYtbN9uJ9dcjjsO3njD/+SSjxNO\ngLlz4aSTov+fb38b1q2Dn/88+7lx4+A//xMuuqj94++8A4MH2+uBHeOHHoJPfjL3a02eDG++GXzM\nduyAI4+M3vbp02HePAu8uXzwAVxwATz4YPR9e518Mvz0p3DuueHbFrJUgTJ4iWzDBnjiia4R4Nev\nh+XL4eBBC+Buy5ZZUP70py3LjxIQf/tbaGmBvXuzA8ratXDLLfD1r9v9Y4+14NK3b/vt1qyBV1/N\n3ncqBa+9Ziclv7aMHg1vvw0nnhjcvt277SSwcGFxAvzWrRaoly2LF+BffdVuhw61z8DXrbNgvGxZ\ndoBfsQLOOAP+9Ce7//d/b+83F+eYNTfbycFrxAj7fdXXR2/7smXwy19C2Dpne/bA2LHw4osW6OPa\nvRv+8hc7TlECfCFUg5fIWlth/nzLeju71lZr54YN2c+tXJn54PfqZdvt3Zt7f42NlpH7BZ4NG9qX\nA+rq/F93wwa7bd/e/vGNGy0YDhzo/9pB+3NzShULF+beLqrmZvt31ar4/88Jvm6NjXD44f77c/8+\nwI5DUOnF4XyTCjqZRdmH16pV0U4IPXvaN5Gbbsrvs/DGG3aMivW7ykUBXiLZu9fqq8OHwx//WO7W\nhGtpsX+9pZeDBy3jHpG+AFpVlZVW3nkneF9bt1qWed55wYE7aoCvrc0ET0dzM4wfH1yPjRLgW1rs\nJOHdd76am6F///DSlVtrK+zbB5//vAV0t3nz4IYb/PfnDawDBmR+f0EWLsx9zKLsw23nTvsbHzAg\n2vZXXWUnlzlzor+GY+FCOP/84v2uclGAl0haW+2Pf/Lk7A9vZ9TSYpmWN2N8+22rVbs7Ovv1g23b\ngvf11FNw8cXW8eeXwb/9dnaAD9pu4sTgAB8kaH9uLS3wsY9lMuhCNTdbKS5OBu+8D+/fyPvvwyuv\nwIwZ/vtbtQpGjcrcHzgwPDiHHbMo+/C2ob4+eqdnVRX8139Zn0Oc1wFr+w03wKZNdmw6kgK8cP/9\n9uFzbs88k71NS4t9aCZPtmzM7cAB67TsKM8+azXLOFpbLeP2ZozecgCEB/jGRnvffpn03r32Ie3X\nL/PY0KHZ2x08aMfwyiv9A/wZZwS/vt/+vFpb4cwzLbj7dQTH1dwM111nxyvqCcMJuh/9qLXHafMz\nz8A551gtf8uWzGgZRz4lmrBjFrdE4/d3Eaa+3voLnL6XqJqb7RiNG2f9Lm779sFPfhJvf7kowAvf\n+pZ9IEaPtg/fffdlb9PSYhn8aadZJ5M7cP7wh/aH/uGHHde+xx+P939aWqyzzJsxerNFyB3g9+2D\n55+Hyy7zD7Rvvw1DhrTvUPQ7EbS0QJ8+mSzbkUpFy+CjlGgGDbKgV2htd+tW+x2feaa9r1zlKzfn\nfVRX2/FyEgHnBFlTA8cfb53NjrY264Ad7rqsdFh5Jcoxi1uiiVp/9/rmN61k+eKL0bbfvdv+ZsaO\ntfZ7f1fPPWdJ1p498dviJ0qAnwSsAFYDM32ePwb4X2AJ8CqQo69fOhsno7r1VvvDmjbNvxzQ2mon\ngaoqG9LnfAXfvBnuvNNGluzY0THte+218BKFX3v9AnzcDL6pyTLPvn39A623/g65txsxAt57L3Os\nwjpYg/bn5ZTQxo8vvLbb3Aynn26/61Gjopdp3EHXKdMcPGglrssvt8fr69vvb/16a7d73Hy/fvDu\nu8EdmGEdrBA/g/c78UfRsyd8//vRO1zfeMP+nrp18/9dNTbaCCS/4b35CAvw1cAcLMiPxS7APcaz\nzW3AImAccCPww+I0TUrB28EXFEycEg20r7F+7WvwpS/BsGEdE+CffNKCa1iAc/vwQwui48db9unO\nhuJm8E72Cf61cG/9HSzTD9rusMMseDof7LAOVrBAtm1b7gDi/H6KFeCdQF1fH62j1elgHTbM7l9y\nCbz0kn37GTAgc4xGjWq/P7/MuabGfudbt/q/VlgHK8TP4PMp0Tg+9anoHa5O2yH7d5VK2beeCy8s\nXgdsWIA/C1gDrAcOAA8DUzzbjAFeSP+8EhgGHFec5klH837VHTjQhvHt399+OydDBBvHvHgxPPYY\nvPyyZf99+nRMgG9shC98IV6A37LFZqZ262Zf/d0lAb8P8nHH+Qd45wPnBPjBg+04tLVlttmwIXuW\nab9+NhnGfWJxb+f+ah5WagALeP37W6dcEKeE5gSNQjpa3W2KmsF7T1S9e8PZZ8M//VPm+EF2Br9y\npX/mnKuTNMoxi9PJeugQrF6df4B3Oly/8514fQdjxrTvaF20yCZmXXtt6QL8IMA9eXdT+jG3JcBV\n6Z/PAuoAn6kH0hl5PyzV1fbh8E7ZdmfwtbVW/rj+evjBD6w806dP9vjuQu3bB7/7HXzxi5YBRw1a\n7pORO0Dt3WuB3JtxBw2TXLrUjsfYsXa/e3fLLN2Bw69EU1WVncW7t3NnblGCFYSXaZwS2uDBhXe0\n5pPB+72Pyy+3znF3gPeeMIJq37lKLFGOWe/eVh7avTu87S0ttn3YDNZc6ustEfna13Jv5257TQ2c\nckqmo3XePDtmfrX5fIUF+CgfqTuBo4HFwIz0vwf9Npw1a9bfbk1NTXHaKR3E/ZXR4VeKcDJEx/XX\n2wd3Svr7XD4Z/E03wW9+E/z8Cy/YSIOhQ63WGbWzz30ycgeoNWsso/fObA0q0Tz3nC3P4C4FeAOt\nX4CH7A5ZvwDvTHYpNMDv3m37ctYJKiRAbN1q3z6cZQPiZvBuU6ZYR+1ZZ2Ue854wggJ8UIklSgcr\n2HGIWocvpDzjFtbh6u5gdbg7xZ1y4I4dTaxcOYvbbrNYWYiwpQo2A0Nc94dgWXy7dgOfc91fB6z1\n21mhjZXicjpYjz++/eN+wcTJEB1Tp7ZfsqBv3/gB/vnn7YP46U/7P++ufzsB0z0cMYg7g6+vtxMF\nBH+QgwL82rU2ssjNe/Lzq8GHbed0tL7xhp1soiwtkGssvPN+nRPRGWdYELzyyvD9enlLLSNG2HHw\nW/LB+/9+6Ol9q6vLntHar5+VuHbssKQgV4nGLzg730z8licI2kdY8M63g9XL3eG6eHH2YmTuDlbH\n+PE2jLSlxY7zuedCt24NjBvXwOWX2/DS2bNn592msAx+ITASq6t3B6YCcz3bHJV+DuALwIvAB3m3\nSEomqIPPG+CdWaxHHx28r7gZ/Pvv2wcrqNborX9HGUnicGfw7k69oA+yU4P3loD86uvuzLytzV7L\nL9i425tKtd+X09F6773hnYV+r5vr/UJhHa3e7Li21voz3Ktvenk7WHNxRuasXGnfFHbssGGmXkE1\n9CgdrI6oHa35DpH0k6vD1W/svvO7mjfPvi06wd85SRcqLMC3YWWXBcAy4BFgOTA9fQMbXbMUG0o5\nEfhK4c2SUgj6qusNJt4M0U/cAL94sXUyvflm+05Lx5IlVvN2Mugoszkd3hLNqlUWZIMy+B49LJDt\n2tX+8bAhkC0tdnLo3p0s7mP47rtWb3UvvTt+vK1GGKU8431dL2/5rJCOVr+/ibAyTZSRQG7O72T1\navuG4LcscFBwjtpnAdE7WotVooHcM1z9ynFOR+uvftW+r6JYdfgo4+CfBkYBI4A70o/dk74BvJx+\nfjRwNbDLuwPpnII+LN5g6s0Q/cTtZG1uto7aIUNsFT8vpzzjBI0oszkd7hJN374WQLZvz52p+ZVp\nggK8c2yCyjNRths/3mqycQJ8rhKN+/fjdLTmGnUTxC8IhXW0xgm6kDlh5CqNBJVo4rzWgAHRavDF\nKtE4gma4+rXd6Wj94x8tg3cUY7graLngitbcbDVDL2+26M0Q/cTN4JubYcIEW+Spudn+yN3mzYM7\n7sjcr6uD3/8+2r69JyQnQAXVeyET4J0TwK5dNnzumGPab+c+Nn4lnKjbucdCR+GMykmlsjNl7/t1\nOlrvuiu7DyGX/fttaKfTweoYNcqWXnZv9+CDmSUH5s61obJR1dfDr39t35yCTrh+GXzUDlbHwIFW\n985l/34bMebthyrUN79pnamzZ9tn49Ch7A5Wx/jxdizcf2snnWQ1+UJntCrAV6gtW6y27veHPXSo\n/dE7a3p7M0Q/cTtZm5th5sxMgJ82rX3bVq2ytWQccWvw7hNSfX1mrXHvGu0ObwbvBGVvMHW+STh1\n9aAM3j1m3m+7ESPgRz+KvnZ7z55227Yt++pTra1W03e7+WYLvCtWRNu/4447st9zfb2th++4+267\nLsDZZ9v988+HT3wi+ms4JZraWjvJ+3HPZnXq0ps323GP0sEK0Wrwa9fa79SvzFaInj3toiW/+lVm\n9Nd3vuN/FajPfz67PNi9u63/X+iMVgX4CpWrblpba/XirVszH5IoJZqoAf799+0EMnasBXjvFY6e\nfNJmQro/dFFr8B9+aPs8zjXVbtQo+0YwalRwndgvwPsF7969rV07dtg248b5769bN9vn5s3++zrs\nMPjyl8Pfj5tzkvMGeL/fzyWX2K0Y3B3V69fb3IeFC6N1qvoZOdKGrB5+uI048VNTY7/DrVszAX3h\nQut8jFrrjzJMstjlGbdzzrFbmNNO83+8GGUaLTZWoeIscOWuaQc55hgLrIcOhb/24sV2ybKaGvvj\nXrq0fUere3iko29fKwl8EDI+a8sWC6zuIX319TZtPldHWtQAD5mTTa4afJztogo6yUUpoRViyBDr\nw9izx74ZfPWr+Qd3sNmaffrY30Gu34k3A49b64/SyVrMDtZiK0ZHqwJ8hYoT4KNk8DU1NtFm5854\nr92rV/uO1n37bNz6pZe2/z/O7NAoi2552zpqlJ144gT4XEHZaUeuGjxkjmHYdlEFvf8oJbRCVFfb\nBLEf/ciuTRs2WzOKUaMsKejTJ3gbbwYeN8BHmc3akRl8oZTBS97C1tP2ZvBRAkjUkTTe13b/ITuz\nV/0++FGXzfW21bl6U64PclAN3o87cOfKzN0ngmJl8N73757F2pFGjYJ/+RcbAtijR+H7q68Pz5zd\nGXzcDlaINpu1mGPgi83paC2EAnyCTZtm42y9t9GjbfRArq/Z7rVUopYAona0ej+o7q+ijY2ZpWW9\nol7ZyNvW2loL8n4jGBxxSzSLF1stPtf6JXV1VgJ4//3sunk+gtaZD5ujUAwnnwxXXNF+KF8hTjwx\n90XEoX1wjtvB6sjV0XrokI0O6qwZvNPRWgh1siZUKmUXyXj2Wf/s7uijcweFujpbiyXKLFZHlI5W\ndwerY/x4GzbnzF5dsMD//+ZbogE7gbgnGnnFKdHU1cGPfxyeldfV2YgT7wVB8uV3guvo8ozjttuK\n8x4c06eHr58+cGBmqYO4HazufQRl8IsW2d9sKY5fvn796+xhq3EowCfUtm02ksO90FMcTrYYZRar\nI0qAd3ewOpyO1kWL2s9e9WvT00/n3r9zbVKvXMEd2gf4/fvtfQR9axk61K5C5O0IDtouzhDCsP0F\nZfAdrdjDCLt18x8y6ObOvuOWZxy5OlpzfVvsLAodn68STUIVOjrACfBROlgdUQK8X+2/d2/Lcr/7\n3fazV4PalEu+Ge2xx9pY5LY2+4YxcGDw4lpO5h4lg4+yXVR9+9rJx91pWKoMvhzc2Xe+AT7XbFb3\nWkdJpQCfUIWODjjmGBuBsGJFvAAf1ska9EEdP96WDs71gfO7UpJXnBOSW3W1Bfnt28M7Rfv1szHc\nYYG7Vy87jsUK8H7rzOf7frsCJ/vOp4PVuw+vzZttTP+55xbczE5NAb4LWrbMltp1bn5Zc6GjA6qq\nLDC9/HL0EkCUTtZcAb5Xr/azV70GDbKJL2GXrsu3ZOGsKhk2bv2wwyzQRgncdXXFC/DO/uIuI9FV\nObNZnZnDcTtYIbiT1Vm9sSbhReqEv71kuuIKG5XRo4f98U6alL2mzMqVcOONhb1OXR288gp89rPR\ntg8r0bz0kk1U8hvNctllVh7JVevt1i1z6Tq/2qTfLNY4nDp8lHHr06ZF69+48cZosxmjOvNMePRR\nO16Q7BJNdbX9Lp98Mr8OVgjuZG1shBtuKLyNnZ0CfBf07rvw6qsWUJ9/Hvyuo1KMCRxOp2bUDDFX\ngG9rs2npd9/tnzWNHh1tYSxnJIlfgPebxRqHO8CHfXWPurjWzTfn15YgX/+6HaeXX7bO5CRn8GDv\nrbHRTmz5/n9vBr93ry1c9+CDhbevs1OJpotJpWyooTP++vTTbcW8g66LJLa12eiN4cMLey0niy1G\nJ+tPf2pDLa+5pvA2BXW0FprNOtdmLdbEpI7Qu7edJG+6yX7nSc7gwd7bCy/kV38HGz3lnc36/PP2\njSDK0N+uTgG+i9mzx0ozzhCzY46xwOS+IMP69Za51NYW9lpOkCu0k3XbNls2dc6cwifkhF34otAA\nH6UGX27XXWf9Fd/7XmlmsZbTwIFWess3wPvNZvVb6yipFOC7mJ07s8d0ey/vVazp106Qi1ui8V5J\naOZMq0UXOivPaVPUKxvF1a+flXk2bfK/jFxnUVVlJ8vZs0szi7WcBgywOnw+HazufThlmkOHrIO1\ns49/LxbV4LuYXbuyA7yzlovTaVSsFfLq6uxbQNSvsrW1Vl/fs8dWDARr1zPPtL9gRKFtmjULrroq\n+7kVKworAfXrZ5cQPOqowr/9dLSTT4YvftEmhyXZoEH5d7C693HLLZbJ//WvVuYaObJ4bezMFOC7\nmF27sgPu+PHtO1pXrSpOtjx4sE0Vj/PhcrJ4J8AvWGBBN9eaLXFceKHV8919Dm7nn5//vvv1swss\nnHpq/vsopTvusG8cSXbNNXDxxYXt49vfbn/hjJNPLmx/XUmUAD8J+AFQDfwcuMvzfF/gQaB/en/f\nA/5f8Zoobn4lGndHa3W1BfhPfao4r3fSSfG2dwK8U95pboarry5OW8AmGE2ZUrz9ufXrZ2Psi7G0\nbylEmWzV1fXqVXgfw/DhhQ846KrCavDVwBwsyI8FrgXGeLaZASwGTgUagP9A3ww6jF+JxtvRmuva\nox3N29Ga7wzEcujXz/5NetCUyhEW4M8C1gDrgQPAw4A3f2oFnC/gvYEdQBvSIXbu9K+JO3X4Dz6w\ncfLl6iR0z2bdvh3eey+zHntn16tXZWTFUjnCAvwgYKPr/qb0Y273AicCLcAS4CtFa51k8cvgwTqi\nFi60a12OGFHcpV3jcI+Fb262lSLL1Za4qqosi1eAl6QIK6WkQp4HuA14AyvPDAeeBcYBWRfKmuXq\nCWxoaKChoSFaK+Vv/DpZwTL4xkab3VjOK9R4A3yuq0Z1RhdeWFmdcNL5NDU10dTUVJR9hQX4zYD7\ny/4QLIt3Owf4dvrnt4B1wCgg63Kxs/zm1EssO3f6l1+cjtbly8sf4N96y34udgdrKTzwQLlbIJXO\nm/zOnj07732FfXleCIwEhgHdganAXM82K4AJ6Z8/ggX3Aq8kKEGCSjROR+u8eeW9BJm7k7UrdbCK\nJFFYgG/DRsksAJYBjwDLgenpG8B3gDOw+vtzwDeAdzuisRJcooFMR2s5M3ink7WrdbCKJFGU4YxP\np29u97h+3g5UyMoO5ec3Dt7hXDSj3Bn8jh12ojn99K7TwSqSRPr4dTFBJRqwDs0+fezKROXiDvAq\nz4iUlwJ8F5OrRHPeeXD//aVtj5cCvEjnUcp16FIp7zKDEluvXnY9yWKt7VJsqZRdlem446Cpqbz9\nASJJUGWLQeUVqxXgu5CDBy14HjjQuWvb/fvbVXN27uzc7RTpCgoJ8FozpgtxruTU2YNmnz4wZkzn\nb6dI0ukj2IXkGkHTmfTpo/q7SGdQsQF++nR4/fXytuG11+D666Nvn2sETWdSV2cdviJSXhVbonGu\nSp/v1dqL4ZFH7ALAUQWtJNnZ/OIX5W6BiEAFZ/AtLZnrNJZLYyNs3WqZeRRdJYOvqkr2dUJFuoqK\nDPD799tYbfeV1ktt5Uq7dum4cbB6dbT/k2sMvIiIV0UGeOc6luXM4J0ru48aZcE+iq7SySoinUNF\nBvjWVrt2aTkz+MZGmDzZJgI5l9oL01VKNCLSOVRkgG9pgRNPLF8G/957sGgRXHSRZfBxArxKNCIS\nVcUG+NNPtwy+HJNrn34aGhqgttYyeJVoRKQjVGSAb22F4cPhiCPsAtWl1tho9XfIlGiinGhUohGR\nOCoywLe0wMCBdit1mebAAViwIBPgjz4aevaM1g6VaEQkjooN8AMG2K3UHa1/+hOccIKdXBxR6/Aq\n0YhIHBUZ4Ftby5fBP/VUJnt3RB1JoxKNiMRRkQG+nBn8m2/alZfcona0dpWlCkSkc4gS4CcBK4DV\nwEyf578GLE7flmIX6u60YWj/flt2t2/f8mTwq1ZlXzM1aolGGbyIxBEW4KuBOViQHwtcC4zxbPM9\n4LT07VagCdhZ1FYW0ZYtdkGKww4rfYDfv99eb9iw9o9HKdHs22cjbXr06LDmiUjChAX4s4A1wHrg\nAPAwMCXH9tcBDxWlZR3EKc9A6Us0a9bYUrrdurV/fPhwePtt+PDD4P/rZO9axEtEogoL8IOAja77\nm9KP+TkCmAg8lmuHqRS8807k9hWd08EKpc/g/cozYJfhGzwY1q0L/r8qz4hIXGHrwceZ5zkZ+CM5\nyjOzZs2itRUefxx+85sGGhoaYuy+OPwy+FSqNJnxqlXBF6F2Fh3zOwGAxsCLVIqmpiaampqKsq+w\nAL8ZGOK6PwTL4v1cQ0h5ZtasWfz+9/Czn9lSAeXgzuBrazOzWfv06fjXXrnSLjLiJ6wOrzHwIpWh\noaF98jt79uy89xVWolkIjASGAd2BqcBcn+2OAj4O/DbsBffvt38XL47eyGJyZrE6SlmmCcvgcwV4\nlWhEJK6wAN8GzAAWAMuAR4DlwPT0zXFlepu/hr2gE+AXLozd1qJwl2igtB2tuQJ82Fh4lWhEJK4o\n12R9On1zu8dz/4H0LdS+fVbvbm6OsnXxuUs0ULoM/r337L337+//vEo0IlJsJb/o9v79cNJJ5Qvw\nhWTw69ZZaemqq+K/rpO9B3XmDhoEu3fDZz9rY/QBZsyA8ePtZ5VoRCSuki9VsH+/XYd00yabUVrq\n13ZmsTriZPA//jHcfHN+a8jnGiEDFvgff9zWif/4x63z9667Ms9rmQIRiavkGfy+fXDkkRbkFy+G\nCy4o3Wu7Z7E6Bg6EP/wh2v9vbITt22HpUjjllHivnav+7rjkkszPl14Ko0fb5Kfu3ZXBi0h8Zcng\nDz/cSg+l7mj1lmfA7kfJ4FevtiD7uc/ZBbPjihLg3fr3t4zfOfmok1VE4iprgC91Hd7bwQrRSzTz\n5sEnPwlXXGGZfFxhJRo/kydnXkudrCISV8kD/L595Qvw3jHwYBn8li3hdfXGRgu4F1wAy5fDtm3R\nX/fQIVuHZuTIeO11AnwqpRKNiMRXlgy+Rw8YM6b0Ha1+JZraWrvlujbrzp1WTpowwerhF18MTz4Z\n/XU3b7bySq9e8dp7yil2ib/ly1WiEZH4ylaiqanJdLSWil+JBuyxXEMl58+H88+3a6dC+9JJFCtX\nxqu/O6qq7OpP8+apRCMi8ZUtwEPpyzR+GTyEd7TOm2dB3XHppfD885lZuWGCVpGMYvJkmDvXvun0\n7p3fPkSkMpWlBu9ctKLUI2lyZfBBAb6tDZ5+uv11VI87ziZrRV3wLe4IGrcLL4QlS+yYedeRFxHJ\npeIy+Lglmpdesot0DB7c/vE4ZZp8SzRggX3CBJVnRCS+sixV4AR4p6P1zjvbTz7qCKmUlTn8lgUe\nMAAefRSqq7Ofe+GF9uUZx+TJ1tk6dGj4ay9alH+JxnmtKBflFhFxK8tMVqdEU1MD3/++DSEshbvv\n9j+RXH65jXTZvj37uVNPhS99KfvxsWPhG9+INob+H/4BTjghfnsdV19ts39FROIo5RU+U6lUiksu\ngX/+Z5g4sYSvLCLSRVXZCoV5xeqy1uBFRKTjlHUUjYiIdBxl8CIiCaUALyKSUCrRiIgkVJQAPwlY\nAawGZgZs0wAsBv4MNOXamTJ4EZHSCBsHXw3MASYAm4HXgbnActc2RwP/F5gIbAL6koMCvIhIaYRl\n8GcBa4Ddouj8AAAJ0klEQVT1wAHgYWCKZ5vrgMew4A7gM10ow1kuWEREOlZYgB8EbHTd35R+zG0k\ncCzwArAQ+EyuHToX/BARkY4VVqIJuc4RAN2A04GLgCOAl4FXsJp9O//6r7M4eBD+/d/hwgsbaGho\niNlcEZFka2pqoinqUrUhwqa/ng3MwjpaAW4FDgF3ubaZCdSmtwP4OTAfeNSzr9SePSn69oW9ewto\nsYhIBenIpQoWYiWYYUB3YCrWyer2W+A8rEP2COCjwDK/nak8IyJSOmElmjZgBrAAC+D3YSNopqef\nvwcbQjkfeBPL7u8lIMBrBI2ISOmUdDXJdetSXHABbNhQwlcVEenCusxqkprFKiJSOiUN8CrRiIiU\njgK8iEhCqUQjIpJQyuBFRBJKAV5EJKFUohERSShl8CIiCaUALyKSUCUP8CrRiIiURslr8MrgRURK\nQyUaEZGEUolGRCShVKIREUkolWhERBJKJRoRkYRSiUZEJKFUohERSSiVaEREEipKgJ+EXVh7NTDT\n5/kGYBewOH37VtCOVKIRESmdmpDnq4E5wARgM/A6MBdY7tnuReCKsBdTiUZEpHTCMvizgDXAeuAA\n8DAwxWe7SFf8VoAXESmdsAA/CNjour8p/ZhbCjgHWAI8BYwN2pnWgxcRKZ2wEk0qwj4WAUOAvcCl\nwBNAvd+GGzbM4v77Yf58aGhooKGhIU5bRUQSr6mpiaampqLsK6y0cjYwC+toBbgVOATcleP/rAPG\nA+96Hk+NHp3iscdgbGCOLyIiblVVVRCxDO4VVqJZCIwEhgHdgalYJ6vbR1wvflb6Z29wBzRMUkSk\nlMJKNG3ADGABNqLmPmwEzfT08/cAVwNfSm+7F7gmaGcaJikiUjp5pf15Sh17bIqVK6Fv3xK+qohI\nF9aRJZqiUolGRKR0tNiYiEhClTTAHzoENWFVfxERKYqSBvgePaCqlFV/EZEKVtIAr/KMiEjpKMCL\niCRUyUs0IiJSGsrgRUQSSgFeRCShVKIREUkoZfAiIgmlAC8iklAq0YiIJJQyeBGRhFKAFxFJKAV4\nEZGEUg1eRCShlMGLiCSUAryISEJFCfCTgBXAamBmju3OxC68fVXQBirRiIiUTliArwbmYEF+LHAt\nMCZgu7uA+eS4OKwyeBGR0gkL8GcBa4D1wAHgYWCKz3ZfBh4F3sm1MwV4EZHSCQvwg4CNrvub0o95\nt5kC/CR9PxW0M5VoRERKJ+wS2IHB2uUHwC3pbavIUaJZsGAW76Rz/IaGBhoaGiI1UkSkUjQ1NdHU\n1FSUfYVdAvtsYBZWgwe4FTiE1dsda1376QvsBb4AzPXsK/WLX6T4zGcKaa6ISGWpqqqC8FjtKyyD\nXwiMBIYBLcBUrKPV7QTXz/cDjWQHd0AlGhGRUgoL8G3ADGABNlLmPmA5MD39/D1xXkydrCIipZNX\n2p+n1Pz5KSZOLOErioh0cYWUaLQWjYhIQmmpAhGRhFKAFxFJKJVoREQSShm8iEhCKcCLiCSUSjQi\nIgmlDF5EJKEU4EVEEqqkAb4mbGEEEREpmpIG+KpSLowgIlLhShrgRUSkdBTgRUQSSgFeRCShFOBF\nRBJKAV5EJKEU4EVEEkoBXkQkoaIE+EnACmA1MNPn+SnAEmAx0Ax8omitExGRvIVNPaoGVgITgM3A\n68C12IW3HT2BPemfTwb+Fxjhs69UKpUqqLEiIpWmI6/JehawBlgPHAAexjJ2tz2un48EtufTEBER\nKa6wAD8I2Oi6vyn9mNeVWFb/NPCPxWmaiIgUIizAR62pPAGMASYD/1NQi0REpCjC1nfcDAxx3R+C\nZfFB/pDeZx9gh/fJWbNm/e3nhoYGGhoaIjZTRKQyNDU10dTUVJR9hRXua7BO1ouAFuA1sjtZhwNr\nsWz/dOA36ce81MkqIhJTIZ2sYRl8GzADWICNqLkPC+7T08/fA/wf4EasE/YD4Jp8GiIiIsVVyhXa\nlcGLiMTUkcMkRUSki1KAFxFJKAV4EZGEUoAXEUkoBXgRkYRSgBcRSSgFeBGRhFKAFxFJKAV4EZGE\nUoAXEUkoBXgRkYRSgBcRSSgFeBGRhFKAFxFJKAV4EZGEUoAXEUkoBXgRkYRSgBcRSSgFeBGRhIoa\n4CcBK4DVwEyf568HlgBvAn8CTilK60REJG9RAnw1MAcL8mOBa4Exnm3WAh/HAvu/AT8rYhsTp6mp\nqdxN6DR0LDJ0LDJ0LIojSoA/C1gDrAcOAA8DUzzbvAzsSv/8KjC4SO1LJP3xZuhYZOhYZOhYFEeU\nAD8I2Oi6vyn9WJDPA08V0igRESlcTYRtUjH2dyHwOeDc/JojIiLFUhVhm7OBWVgNHuBW4BBwl2e7\nU4DH09ut8dnPGmB4Xq0UEalcbwEjOmrnNekXGAZ0B94gu5N1KBbAz+6oRoiISMe4FFiJBfFb049N\nT98Afg7sABanb6+VuoEiIiIiIlIkYZOkkmwI8ALwF+DPwD+mHz8WeBZYBTwDHF2W1pVHNfYtrzF9\nv1KPxdHAo8ByYBnwUSr3WNyKfUaWAr8CDqdyjsV/A1ux9+7I9d5vxWLpCuCSErUxUDVW1hkGdMO/\nfp9k/YFT0z8fiZW5xgDfBb6RfnwmcGfpm1Y2/wT8Epibvl+px+IBbMQZWD/XUVTmsRiGTZQ8PH3/\nEeCzVM6xOB84jfYBPui9j8ViaDfsuK2hzMvNfAyY77p/S/pWqZ4AJmBn34+kH+ufvl8JBgPPYcNp\nnQy+Eo/FUVhQ86rEY3Eslvgcg53oGoGLqaxjMYz2AT7ovd9K+yrIfEIGtnR09I87SSrJhmFn6lex\nX97W9ONbyfwyk+77wNexYbaOSjwWxwPvAPcDi4B7gZ5U5rF4F/gP4G2gBdiJlScq8Vg4gt77QCyG\nOkLjaUcH+DiTpJLsSOAx4CvAbs9zKSrjOF0ObMPq70HzLyrlWNQApwM/Tv+7h+xvtpVyLIYDX8US\noIHYZ+UGzzaVciz8hL33nMelowP8Zqyj0TGE9megStANC+7/g5VowM7K/dM/D8ACX9KdA1wBrAMe\nAj6BHZNKPBab0rfX0/cfxQL9FirvWJwBvIQNs27DJkt+jMo8Fo6gz4Q3ng5OPxaoowP8QmAkmUlS\nU8l0rlWCKuA+bJTED1yPz8U6kkj/+wTJdxv2x3k8cA3wO+AzVOax2IKVLuvT9ydgo0gaqbxjsQKr\nI9din5cJ2OelEo+FI+gzMRf77HTHPkcj6QRzjvwmSVWK87B68xtkJoFNwjqWniP5Q8CCXEDmRF+p\nx2IclsEvwbLWo6jcY/ENMsMkH8C+9VbKsXgI63v4EDvpTyP3e78Ni6UrgIklbamIiIiIiIiIiIiI\niIiIiIiIiIiIiIiIiIiISD7+P2gWSVmM9X4PAAAAAElFTkSuQmCC\n", "text": [ "" ] } ], "prompt_number": 190 }, { "cell_type": "code", "collapsed": false, "input": [ "# a quick and dirty look at how different # of neurons in the hidden layers matters (or not)\n", "for n_hidden_neurons in range(4,8):\n", " ann = buildNetwork(4, n_hidden_neurons, 3, bias=True)\n", " trainer = BackpropTrainer(ann, momentum=0.1, verbose=False, weightdecay=0.01, learningrate=0.01)\n", " scores = [accuracy_score(map(interpret_array, ann.activateOnDataset(ds_test)), Y_test)]\n", " for n in xrange(100):\n", " trainer.trainOnDataset(ds_train)\n", " scores.append(accuracy_score(map(interpret_array, ann.activateOnDataset(ds_test)), Y_test))\n", " plt.plot(scores)\n", " plt.show()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\nAABJRU5ErkJggg==\n", "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 195 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Character Recognition" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Character recognition in images is a classic problem solved with neural networks." ] }, { "cell_type": "code", "collapsed": false, "input": [ "import sklearn\n", "digits = sklearn.datasets.load_digits()" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 308 }, { "cell_type": "code", "collapsed": false, "input": [ "X = digits['data']\n", "Y = digits['target']" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 309 }, { "cell_type": "code", "collapsed": false, "input": [ "plt.imshow(X[7].reshape((8,8)), plt.get_cmap('Greys_r'), interpolation='nearest') #example image in the set" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 310, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nSUVORK5CYII=\n", "text": [ "" ] } ], "prompt_number": 310 }, { "cell_type": "code", "collapsed": false, "input": [ "X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.33)\n", "X_train = X_train/X.max() # normalizing the dataset is good practice. You can run into float overflow with neural networks if not.\n", "X_test = X_test/X.max()" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 311 }, { "cell_type": "code", "collapsed": false, "input": [ "network = buildNetwork(64, 80, 10)\n", "\n", "def target_list(n):\n", " result = [0]*10\n", " result[n] = 1\n", " return result\n", "\n", "def target_int(a):\n", " return list(a).index(a.max())\n", "\n", "def pred_score(net):\n", " return accuracy_score(map(target_int, net.activateOnDataset(ds_test)), Y_test)\n", "\n", "ds_train = ClassificationDataSet(64, 10)\n", "ds_test = ClassificationDataSet(64, 10)\n", "\n", "\n", "ds_train.setField('input', X_train)\n", "ds_train.setField('target', map(target_list, Y_train))\n", "\n", "\n", "ds_test.setField('input', X_test)\n", "ds_test.setField('target', map(target_list, Y_test))\n", " \n", "trainer = BackpropTrainer(network, momentum=0.1, verbose=False, weightdecay=0.01, learningrate=0.02)\n", "\n", "# print network.activateOnDataset(ds_test)\n", "scores = [pred_score(network)]\n", "\n", "for i in xrange(50):\n", " trainer.trainOnDataset(ds_train)\n", " scores.append(pred_score(network))\n", " \n", "plt.plot(scores)\n", "plt.show()\n" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 312 }, { "cell_type": "markdown", "metadata": {}, "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A fun account of applying deep learning:\n", "- Spotify song recommendation algorithms" ] }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [] } ], "metadata": {} } ] }