diff --git a/.gitignore b/.gitignore index 19eb7a8..99c05c4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ .vagrant .ipynb_checkpoints -* -*~ \ No newline at end of file +*~ +*.pyc \ No newline at end of file diff --git a/notebooks/week-1/week 1 - VM test.ipynb b/notebooks/week-1/week 1 - VM test.ipynb index 235273c..5e853f1 100644 --- a/notebooks/week-1/week 1 - VM test.ipynb +++ b/notebooks/week-1/week 1 - VM test.ipynb @@ -11,22 +11,63 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "hello world\n" + ] + } + ], "source": [ "print \"hello world\"" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Using Theano backend.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "keras successfully imported\n", + "theano successfully imported\n", + "tensorflow successfully imported\n", + "sklearn successfully imported\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/vagrant/anaconda2/lib/python2.7/site-packages/matplotlib/font_manager.py:273: UserWarning: Matplotlib is building the font cache using fc-list. This may take a moment.\n", + " warnings.warn('Matplotlib is building the font cache using fc-list. This may take a moment.')\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "seaborn successfully imported\n" + ] + } + ], "source": [ "import keras\n", "print \"keras successfully imported\"\n", @@ -42,13 +83,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "uni: sw3036\n" + ] + } + ], "source": [ - "print \"uni:\", \"fill in your uni here\"" + "print \"uni:\", \"sw3036\"" ] } ], diff --git a/notebooks/week-2/01 - Introduction to Python - Variables.ipynb b/notebooks/week-2/01 - Introduction to Python - Variables.ipynb index 2e45e50..5c5f246 100644 --- a/notebooks/week-2/01 - Introduction to Python - Variables.ipynb +++ b/notebooks/week-2/01 - Introduction to Python - Variables.ipynb @@ -35,11 +35,19 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Hello World\n" + ] + } + ], "source": [ "print \"Hello World\"" ] @@ -591,7 +599,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 2", + "display_name": "Python [default]", "language": "python", "name": "python2" }, diff --git a/notebooks/week-2/02 - Introduction to Python - Conditionals and Loops.ipynb b/notebooks/week-2/02 - Introduction to Python - Conditionals and Loops.ipynb index 18b0187..f4ccc18 100644 --- a/notebooks/week-2/02 - Introduction to Python - Conditionals and Loops.ipynb +++ b/notebooks/week-2/02 - Introduction to Python - Conditionals and Loops.ipynb @@ -443,7 +443,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 2", + "display_name": "Python [default]", "language": "python", "name": "python2" }, diff --git a/notebooks/week-2/03 - Introduction to Python - Functions and Objects.ipynb b/notebooks/week-2/03 - Introduction to Python - Functions and Objects.ipynb index 26a33b8..c28e74e 100644 --- a/notebooks/week-2/03 - Introduction to Python - Functions and Objects.ipynb +++ b/notebooks/week-2/03 - Introduction to Python - Functions and Objects.ipynb @@ -322,8 +322,9 @@ } ], "metadata": { + "anaconda-cloud": {}, "kernelspec": { - "display_name": "Python 2", + "display_name": "Python [default]", "language": "python", "name": "python2" }, diff --git a/notebooks/week-2/04 - Lab 2 Assignment.ipynb b/notebooks/week-2/04 - Lab 2 Assignment.ipynb index 5d51991..29e4eb6 100644 --- a/notebooks/week-2/04 - Lab 2 Assignment.ipynb +++ b/notebooks/week-2/04 - Lab 2 Assignment.ipynb @@ -13,7 +13,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": { "collapsed": true }, @@ -60,12 +60,15 @@ " \n", " # create here two local variables to store a unique ID for each player and the player's current 'pot' of money\n", " # [FILL IN YOUR VARIABLES HERE]\n", + " js=0\n", + " pot=0\n", " \n", " # in the __init__() function, use the two input variables to initialize the ID and starting pot of each player\n", " \n", " def __init__(self, inputID, startingPot):\n", " # [CREATE YOUR INITIALIZATIONS HERE]\n", - " \n", + " self.js=inputID\n", + " self.pot=startingPot\n", " # create a function for playing the game. This function starts by taking an input for the dealer's card\n", " # and picking a random number from the 'cards' list for the player's card\n", "\n", @@ -79,16 +82,22 @@ " # the 'pot' variable tracks the player's money\n", " \n", " if playerCard < dealerCard:\n", + " self.pot=self.pot-gameStake\n", + " print 'player '+str(self.js)+' lose,'+str(playerCard)+' vs '+str(dealerCard)\n", " # [INCREMENT THE PLAYER'S POT, AND RETURN A MESSAGE]\n", " else:\n", + " self.pot=self.pot+gameStake\n", + " print 'player '+str(self.js)+' win,'+str(playerCard)+' vs '+str(dealerCard)\n", " # [INCREMENT THE PLAYER'S POT, AND RETURN A MESSAGE]\n", " \n", " # create an accessor function to return the current value of the player's pot\n", " def returnPot(self):\n", + " return self.pot\n", " # [FILL IN THE RETURN STATEMENT]\n", " \n", " # create an accessor function to return the player's ID\n", " def returnID(self):\n", + " return self.js\n", " # [FILL IN THE RETURN STATEMENT]" ] }, @@ -111,6 +120,7 @@ " \n", " for player in players:\n", " dealerCard = random.choice(cards)\n", + " player.play(dealerCard)\n", " #[EXECUTE THE PLAY() FUNCTION FOR EACH PLAYER USING THE DEALER CARD, AND PRINT OUT THE RESULTS]" ] }, @@ -132,6 +142,7 @@ "def checkBalances(players):\n", " \n", " for player in players:\n", + " print 'player '+str(player.returnID())+ ' has $ '+str(player.returnPot())+ ' left'\n", " #[PRINT OUT EACH PLAYER'S BALANCE BY USING EACH PLAYER'S ACCESSOR FUNCTIONS]" ] }, @@ -307,7 +318,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 2", + "display_name": "Python [default]", "language": "python", "name": "python2" }, diff --git a/notebooks/week-2/Assignment2 sw3036.ipynb b/notebooks/week-2/Assignment2 sw3036.ipynb new file mode 100644 index 0000000..36b0a19 --- /dev/null +++ b/notebooks/week-2/Assignment2 sw3036.ipynb @@ -0,0 +1,194 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "start game 0\n", + "player 0 lose,6 vs 9\n", + "player 1 win,0 vs 0\n", + "player 2 win,8 vs 0\n", + "player 3 win,5 vs 0\n", + "player 4 win,6 vs 3\n", + "\n", + "start game 1\n", + "player 0 lose,0 vs 8\n", + "player 1 win,6 vs 0\n", + "player 2 win,3 vs 0\n", + "player 3 lose,4 vs 5\n", + "player 4 lose,4 vs 7\n", + "\n", + "start game 2\n", + "player 0 lose,5 vs 7\n", + "player 1 win,0 vs 0\n", + "player 2 lose,0 vs 7\n", + "player 3 win,8 vs 4\n", + "player 4 win,4 vs 1\n", + "\n", + "start game 3\n", + "player 0 lose,2 vs 8\n", + "player 1 win,5 vs 3\n", + "player 2 lose,5 vs 7\n", + "player 3 win,5 vs 1\n", + "player 4 win,9 vs 6\n", + "\n", + "start game 4\n", + "player 0 win,5 vs 4\n", + "player 1 lose,0 vs 9\n", + "player 2 lose,0 vs 1\n", + "player 3 lose,1 vs 4\n", + "player 4 win,6 vs 2\n", + "\n", + "start game 5\n", + "player 0 win,5 vs 4\n", + "player 1 lose,1 vs 5\n", + "player 2 win,9 vs 7\n", + "player 3 lose,5 vs 6\n", + "player 4 win,3 vs 1\n", + "\n", + "start game 6\n", + "player 0 win,8 vs 4\n", + "player 1 lose,0 vs 9\n", + "player 2 win,9 vs 1\n", + "player 3 win,9 vs 0\n", + "player 4 lose,6 vs 9\n", + "\n", + "start game 7\n", + "player 0 win,8 vs 2\n", + "player 1 lose,4 vs 6\n", + "player 2 lose,1 vs 7\n", + "player 3 win,9 vs 2\n", + "player 4 win,8 vs 1\n", + "\n", + "start game 8\n", + "player 0 win,5 vs 3\n", + "player 1 win,6 vs 1\n", + "player 2 lose,5 vs 7\n", + "player 3 win,8 vs 1\n", + "player 4 win,8 vs 1\n", + "\n", + "start game 9\n", + "player 0 win,7 vs 5\n", + "player 1 win,7 vs 5\n", + "player 2 win,5 vs 0\n", + "player 3 win,9 vs 9\n", + "player 4 win,2 vs 1\n", + "\n", + "game results:\n", + "player 0 has $ 600 left\n", + "player 1 has $ 600 left\n", + "player 2 has $ 500 left\n", + "player 3 has $ 700 left\n", + "player 4 has $ 800 left\n" + ] + } + ], + "source": [ + "import random\n", + "\n", + "gameStake = 50 \n", + "cards = range(10)\n", + "\n", + "class Player:\n", + " \n", + " # create here two local variables to store a unique ID for each player and the player's current 'pot' of money\n", + " # [FILL IN YOUR VARIABLES HERE]\n", + " js=0\n", + " pot=0\n", + " \n", + " # in the __init__() function, use the two input variables to initialize the ID and starting pot of each player\n", + " \n", + " def __init__(self, inputID, startingPot):\n", + " # [CREATE YOUR INITIALIZATIONS HERE]\n", + " self.js=inputID\n", + " self.pot=startingPot\n", + " # create a function for playing the game. This function starts by taking an input for the dealer's card\n", + " # and picking a random number from the 'cards' list for the player's card\n", + "\n", + " def play(self, dealerCard):\n", + " # we use the random.choice() function to select a random item from a list\n", + " playerCard = random.choice(cards)\n", + " \n", + " # here we should have a conditional that tests the player's card value against the dealer card\n", + " # and returns a statement saying whether the player won or lost the hand\n", + " # before returning the statement, make sure to either add or subtract the stake from the player's pot so that\n", + " # the 'pot' variable tracks the player's money\n", + " \n", + " if playerCard < dealerCard:\n", + " self.pot=self.pot-gameStake\n", + " print 'player '+str(self.js)+' lose,'+str(playerCard)+' vs '+str(dealerCard)\n", + " # [INCREMENT THE PLAYER'S POT, AND RETURN A MESSAGE]\n", + " else:\n", + " self.pot=self.pot+gameStake\n", + " print 'player '+str(self.js)+' win,'+str(playerCard)+' vs '+str(dealerCard)\n", + " # [INCREMENT THE PLAYER'S POT, AND RETURN A MESSAGE]\n", + " \n", + " # create an accessor function to return the current value of the player's pot\n", + " def returnPot(self):\n", + " return self.pot\n", + " # [FILL IN THE RETURN STATEMENT]\n", + " \n", + " # create an accessor function to return the player's ID\n", + " def returnID(self):\n", + " return self.js\n", + " # [FILL IN THE RETURN STATEMENT]\n", + " \n", + "def playHand(players):\n", + " \n", + " for player in players:\n", + " dealerCard = random.choice(cards)\n", + " player.play(dealerCard)\n", + " #[EXECUTE THE PLAY() FUNCTION FOR EACH PLAYER USING THE DEALER CARD, AND PRINT OUT THE RESULTS]\n", + " \n", + "def checkBalances(players):\n", + " \n", + " for player in players:\n", + " print 'player '+str(player.returnID())+ ' has $ '+str(player.returnPot())+ ' left'\n", + " #[PRINT OUT EACH PLAYER'S BALANCE BY USING EACH PLAYER'S ACCESSOR FUNCTIONS]\n", + " \n", + "players = [] \n", + "\n", + "for i in range(5):\n", + " players.append(Player(i, 500))\n", + "\n", + "for i in range(10):\n", + " print ''\n", + " print 'start game ' + str(i)\n", + " playHand(players)\n", + " \n", + "print ''\n", + "print 'game results:'\n", + "checkBalances(players)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python [default]", + "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.12" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/notebooks/week-3/01-basic ann.ipynb b/notebooks/week-3/01-basic ann.ipynb new file mode 100644 index 0000000..cf18561 --- /dev/null +++ b/notebooks/week-3/01-basic ann.ipynb @@ -0,0 +1,369 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Lab 3 - Basic Artificial Neural Network\n", + "\n", + "Here we will build a very rudimentary Artificial Neural Network (ANN) and use it to solve some basic classification problems. This example is implemented using only basic math and linear algebra functions, which will allow us to study how each aspect of the network works, and to gain an intuitive understanding of its functions. In future labs we will use pre-built libraries such as Keras which automate and optimize much of these functions, making the network much faster and easier to use.\n", + "\n", + "The code and MNIST test data is taken directly from [http://neuralnetworksanddeeplearning.com/](http://neuralnetworksanddeeplearning.com/) by [Michael Nielsen](http://michaelnielsen.org/). Please review the [first chapter](http://neuralnetworksanddeeplearning.com/chap1.html) of the book for a thorough explanation of the code." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import random\n", + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "class Network(object):\n", + " \n", + " def __init__(self, sizes):\n", + " \n", + " \"\"\"The list ``sizes`` contains the number of neurons in the\n", + " respective layers of the network. For example, if the list\n", + " was [2, 3, 1] then it would be a three-layer network, with the\n", + " first layer containing 2 neurons, the second layer 3 neurons,\n", + " and the third layer 1 neuron. The biases and weights for the\n", + " network are initialized randomly, using a Gaussian\n", + " distribution with mean 0, and variance 1. Note that the first\n", + " layer is assumed to be an input layer, and by convention we\n", + " won't set any biases for those neurons, since biases are only\n", + " ever used in computing the outputs from later layers.\"\"\"\n", + " \n", + " self.num_layers = len(sizes)\n", + " self.sizes = sizes\n", + " self.biases = [np.random.randn(y, 1) for y in sizes[1:]]\n", + " self.weights = [np.random.randn(y, x)\n", + " for x, y in zip(sizes[:-1], sizes[1:])]\n", + " \n", + " def feedforward (self, a):\n", + " \n", + " #Return the output of the network if \"a\" is input.\n", + " \n", + " for b, w in zip(self.biases, self.weights):\n", + " a = sigmoid(np.dot(w, a)+b)\n", + " return a\n", + " \n", + " def SGD(self, training_data, epochs, mini_batch_size, eta,\n", + " test_data=None):\n", + " \n", + " \"\"\"Train the neural network using mini-batch stochastic\n", + " gradient descent. The \"training_data\" is a list of tuples\n", + " \"(x, y)\" representing the training inputs and the desired\n", + " outputs. The other non-optional parameters are\n", + " self-explanatory. If \"test_data\" is provided then the\n", + " network will be evaluated against the test data after each\n", + " epoch, and partial progress printed out. This is useful for\n", + " tracking progress, but slows things down substantially.\"\"\"\n", + "\n", + " if test_data: n_test = len(test_data)\n", + " n = len(training_data)\n", + " for j in xrange(epochs):\n", + " random.shuffle(training_data)\n", + " mini_batches = [\n", + " training_data[k:k+mini_batch_size]\n", + " for k in xrange(0, n, mini_batch_size)]\n", + " for mini_batch in mini_batches:\n", + " self.update_mini_batch(mini_batch, eta)\n", + " \n", + " if test_data:\n", + " print \"Epoch {0}: {1} / {2}\".format(\n", + " j, self.evaluate(test_data), n_test)\n", + " else:\n", + " print \"Epoch {0} complete\".format(j)\n", + " \n", + " def update_mini_batch(self, mini_batch, eta):\n", + " \n", + " \"\"\"Update the network's weights and biases by applying\n", + " gradient descent using backpropagation to a single mini batch.\n", + " The \"mini_batch\" is a list of tuples \"(x, y)\", and \"eta\"\n", + " is the learning rate.\"\"\"\n", + "\n", + " nabla_b = [np.zeros(b.shape) for b in self.biases]\n", + " nabla_w = [np.zeros(w.shape) for w in self.weights]\n", + " for x, y in mini_batch:\n", + " delta_nabla_b, delta_nabla_w = self.backprop(x, y)\n", + " nabla_b = [nb+dnb for nb, dnb in zip(nabla_b, delta_nabla_b)]\n", + " nabla_w = [nw+dnw for nw, dnw in zip(nabla_w, delta_nabla_w)]\n", + " self.weights = [w-(eta/len(mini_batch))*nw \n", + " for w, nw in zip(self.weights, nabla_w)]\n", + " self.biases = [b-(eta/len(mini_batch))*nb \n", + " for b, nb in zip(self.biases, nabla_b)]\n", + " \n", + " def backprop(self, x, y):\n", + " \n", + " \"\"\"Return a tuple ``(nabla_b, nabla_w)`` representing the\n", + " gradient for the cost function C_x. ``nabla_b`` and\n", + " ``nabla_w`` are layer-by-layer lists of numpy arrays, similar\n", + " to ``self.biases`` and ``self.weights``.\"\"\"\n", + " \n", + " nabla_b = [np.zeros(b.shape) for b in self.biases]\n", + " nabla_w = [np.zeros(w.shape) for w in self.weights]\n", + " \n", + " # feedforward\n", + " activation = x\n", + " activations = [x] # list to store all the activations, layer by layer\n", + " zs = [] # list to store all the z vectors, layer by layer\n", + " for b, w in zip(self.biases, self.weights):\n", + " z = np.dot(w, activation)+b\n", + " zs.append(z)\n", + " activation = sigmoid(z)\n", + " activations.append(activation)\n", + " # backward pass\n", + " delta = self.cost_derivative(activations[-1], y) * \\\n", + " sigmoid_prime(zs[-1])\n", + " nabla_b[-1] = delta\n", + " nabla_w[-1] = np.dot(delta, activations[-2].transpose())\n", + " \n", + " \"\"\"Note that the variable l in the loop below is used a little\n", + " differently to the notation in Chapter 2 of the book. Here,\n", + " l = 1 means the last layer of neurons, l = 2 is the\n", + " second-last layer, and so on. It's a renumbering of the\n", + " scheme in the book, used here to take advantage of the fact\n", + " that Python can use negative indices in lists.\"\"\"\n", + " \n", + " for l in xrange(2, self.num_layers):\n", + " z = zs[-l]\n", + " sp = sigmoid_prime(z)\n", + " delta = np.dot(self.weights[-l+1].transpose(), delta) * sp\n", + " nabla_b[-l] = delta\n", + " nabla_w[-l] = np.dot(delta, activations[-l-1].transpose())\n", + " return (nabla_b, nabla_w)\n", + "\n", + " def evaluate(self, test_data):\n", + " \n", + " \"\"\"Return the number of test inputs for which the neural\n", + " network outputs the correct result. Note that the neural\n", + " network's output is assumed to be the index of whichever\n", + " neuron in the final layer has the highest activation.\"\"\"\n", + " \n", + " test_results = [(np.argmax(self.feedforward(x)), y)\n", + " for (x, y) in test_data]\n", + " return sum(int(x == y) for (x, y) in test_results)\n", + "\n", + " def cost_derivative(self, output_activations, y):\n", + " \"\"\"Return the vector of partial derivatives \\partial C_x /\n", + " \\partial a for the output activations.\"\"\"\n", + " return (output_activations-y)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def sigmoid(z):\n", + "# The sigmoid function.\n", + " return 1.0/(1.0 + np.exp(-z))\n", + "\n", + "def sigmoid_prime(z):\n", + "# Derivative of the sigmoid function.\n", + " return sigmoid(z)*(1-sigmoid(z))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Iris dataset example\n", + "\n", + "Now we will test our basic artificial neural network on a very simple classification problem. First we will use the [seaborn data visualization library](https://stanford.edu/~mwaskom/software/seaborn/) to load the ['iris' dataset](https://en.wikipedia.org/wiki/Iris_flower_data_set), \n", + "which consists of 50 samples from each of three species of Iris (Iris setosa, Iris virginica and Iris versicolor), with four features measuring the length and the width of each flower's sepals and petals. After we load the data we will vizualize it using some functions in seaborn." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "import seaborn as sns; sns.set(style=\"ticks\", color_codes=True)\n", + "from sklearn.preprocessing import OneHotEncoder\n", + "from sklearn.utils import shuffle\n", + "\n", + "iris_data = sns.load_dataset(\"iris\")\n", + "\n", + "# randomly shuffle data\n", + "iris_data = shuffle(iris_data)\n", + "\n", + "# print first 5 data points\n", + "print iris_data[:5]\n", + "\n", + "# create pairplot of iris data\n", + "g = sns.pairplot(iris_data, hue=\"species\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, we will prepare the data set for training in our ANN. In order to work with our functions, the data needs to be converted to numpy format, split into feature and target sets, and then recombined as separate lists within a single dataset. Finally, we split the data set into training and testing sets, and convert the targets of the training set to 'one-hot' encoding (OHE). OHE takes each piece of categorical data and converts it to a list of binary values the length of which is equal to the number of categories, and the position of the current category denoted with a '1' and '0' for all others. For example, in our dataset we have 3 possible categories: versicolor, virginica, and setosa. After applying OHE, versicolor becomes [1,0,0], virginica becomes [0,1,0], and setosa becomes [0,0,1]. OHE is a standard format for target data as it allows easy application of the cost function during training." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# convert iris data to numpy format\n", + "iris_array = iris_data.as_matrix()\n", + "\n", + "# split data into feature and \n", + "X = iris_array[:, :4].astype(float)\n", + "y = iris_array[:, -1]\n", + "\n", + "_, y = np.unique(y, return_inverse=True)\n", + "y = y.reshape(-1,1)\n", + "\n", + "# create on-hot encoding function\n", + "enc = OneHotEncoder()\n", + "enc.fit(y)\n", + "\n", + "# combine feature and target data\n", + "data = []\n", + "for i in range(X.shape[0]):\n", + " data.append(tuple([X[i].reshape(-1,1), y[i][0]]))\n", + "\n", + "# split data into training and test sets\n", + "trainingSplit = int(.8 * len(data))\n", + "training_data = data[:trainingSplit]\n", + "test_data = data[trainingSplit:]\n", + "\n", + "# convert training targets to on-hot encoding\n", + "training_data = [[_x, enc.transform(_y.reshape(-1,1)).toarray().reshape(-1,1)] for _x, _y in training_data]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "net = Network([4, 25, 3])\n", + "net.SGD(training_data, 21, 10, .1, test_data=test_data)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### MNIST dataset example\n", + "\n", + "Next, we will test our ANN on another, slightly more difficult classification problem. The data set we'll be using is called MNIST, which contains tens of thousands of scanned images of handwritten digits, classified according to the digit type from 0-9. The name MNIST comes from the fact that it is a Modified (M) version of a dataset originally developed by the United States' National Institute of Standards and Technology (NIST). This is a very popular dataset used to measure the effectiveness of Machine Learning models for image recongnition. This time we don't have to do as much data management since the data is already provided in the right format [here](https://github.com/mnielsen/neural-networks-and-deep-learning/tree/master/data). \n", + "\n", + "We will get into more details about working with images and proper data formats for image data in later labs, but you can already use this data to test the effectiveness of our network. With the default settings you should be able to get a classification accuracy of 95% in the test set." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import mnist_loader\n", + "\n", + "training_data, validation_data, test_data = mnist_loader.load_data_wrapper()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can use the matplotlib library to visualize one of the training images. In the data set, the pixel values of each 28x28 pixel image is encoded in a straight list of 784 numbers, so before we visualize it we have to use numpy's reshape function to convert it back t" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAP4AAAD8CAYAAABXXhlaAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAABqVJREFUeJzt3TtI1n0fx/HneoqGOypxKQgibDAqwqWCCCJCIqjBahGa\niqaEJpe2BiPoMEQNTkFLNHZYarDDEAjSYRHaC7eyg50wr3tz6vmKXF6P5uf1Gv3Q/f8P95vf8Otv\njWaz+R8gy38X+wWA/z/hQyDhQyDhQyDhQyDhQyDhQ6CV7X5Ao9HwFwVgkTSbzcaffu7Eh0DCh0DC\nh0DCh0DCh0DCh0DCh0DCh0DCh0DCh0DCh0DCh0DCh0DCh0DCh0DCh0DCh0DCh0DCh0DCh0DCh0DC\nh0DCh0DCh0DCh0DCh0DCh0DCh0DCh0DCh0DCh0DCh0DCh0DCh0DCh0DCh0DCh0DCh0ArF/sFaK8V\nK1aU+7p169r6/IGBgXL/559/yr27u7vcz549W+5Xrlwp9/7+/nL/8eNHuV+6dKncL1y4UO6LxYkP\ngYQPgYQPgYQPgYQPgYQPgYQPgdzjt9mmTZvKfdWqVeW+d+/ect+3b1+5d3R0lPvx48fLfbG9e/eu\n3K9fv17ufX195f7ly5dyf/PmTbk/e/as3JcqJz4EEj4EEj4EEj4EEj4EEj4EEj4EajSbzfY+oNFo\n7wMWWU9PT7mPjIyUe7u/h1/qZmZmyv3UqVPl/vXr15aePzExUe4fP34s97dv37b0/HZrNpuNP/3c\niQ+BhA+BhA+BhA+BhA+BhA+BhA+B3OO3qLOzs9xHR0fLvaurayFfZ8HN9f6Tk5PlfuDAgXL/9etX\nuaf/PYdWuccHZgkfAgkfAgkfAgkfAgkfAgkfAvm9+i368OFDuQ8ODpb7kSNHyv3Vq1flPtfvlZ/L\n69evy723t7fcp6amyn379u3lfu7cuXKnPZz4EEj4EEj4EEj4EEj4EEj4EEj4EMj3+Its7dq15T7X\nv98+PDxc7qdPny73kydPlvudO3fKnaXN9/jALOFDIOFDIOFDIOFDIOFDIOFDIN/jL7LPnz+39Oc/\nffrU0p8/c+ZMud+9e7fc5/r37VmanPgQSPgQSPgQSPgQSPgQSPgQSPgQyPf4f7nVq1eX+4MHD8p9\n//795X748OFyf/z4cbmzuHyPD8wSPgQSPgQSPgQSPgQSPgQSPgRyj7/MbdmypdxfvnxZ7pOTk+X+\n5MmTch8bGyv3mzdvlnu7//9c7tzjA7OED4GED4GED4GED4GED4GED4Hc44fr6+sr91u3bpX7mjVr\nWnr++fPny/327dvlPjEx0dLzlzv3+MAs4UMg4UMg4UMg4UMg4UMg4UMg9/iUduzYUe7Xrl0r94MH\nD7b0/OHh4XIfGhoq9/fv37f0/L+de3xglvAhkPAhkPAhkPAhkPAhkPAhkHt8WtLR0VHuR48eLfe5\nvvdvNP54DT1rZGSk3Ht7e8t9uXOPD8wSPgQSPgQSPgQSPgQSPgQSPgRyj8+i+vnzZ7mvXLmy3Ken\np8v90KFD5f706dNy/9u5xwdmCR8CCR8CCR8CCR8CCR8CCR8C1ZekxNu5c2e5nzhxotx37dpV7nPd\n089lfHy83J8/f97Sf3+5cuJDIOFDIOFDIOFDIOFDIOFDIOFDIPf4y1x3d3e5DwwMlPuxY8fKfcOG\nDfN+p/n4/ft3uU9MTJT7zMzMQr7OsuHEh0DCh0DCh0DCh0DCh0DCh0DCh0Du8Ze4ue7J+/v7y32u\ne/rNmzfP95UW1NjYWLkPDQ2V+/379xfydWI48SGQ8CGQ8CGQ8CGQ8CGQ8CGQ8CGQe/w2W79+fblv\n27at3G/cuFHuW7dunfc7LaTR0dFyv3z5crnfu3ev3H1P3x5OfAgkfAgkfAgkfAgkfAgkfAgkfAjk\nHn8OnZ2d5T48PFzuPT095d7V1TXvd1pIL168KPerV6+W+6NHj8r9+/fv834n2s+JD4GED4GED4GE\nD4GED4GED4GED4GW/T3+nj17yn1wcLDcd+/eXe4bN26c9zstpG/fvpX79evXy/3ixYvlPjU1Ne93\nYulz4kMg4UMg4UMg4UMg4UMg4UMg4UOgZX+P39fX19LeqvHx8XJ/+PBhuU9PT5f7XN/LT05OljuZ\nnPgQSPgQSPgQSPgQSPgQSPgQSPgQqNFsNtv7gEajvQ8A/qdms9n408+d+BBI+BBI+BBI+BBI+BBI\n+BBI+BBI+BBI+BBI+BBI+BBI+BBI+BBI+BBI+BBI+BBI+BBI+BBI+BBI+BBI+BBI+BBI+BCo7b9X\nH1h6nPgQSPgQSPgQSPgQSPgQSPgQSPgQSPgQSPgQSPgQSPgQSPgQSPgQSPgQSPgQSPgQSPgQSPgQ\nSPgQSPgQ6F87rjU5dRj2oAAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%matplotlib inline\n", + "import matplotlib.pylab as plt\n", + "\n", + "img = training_data[0][0][:,0].reshape((28,28))\n", + "\n", + "fig = plt.figure()\n", + "plt.imshow(img, interpolation='nearest', vmin = 0, vmax = 1, cmap=plt.cm.gray)\n", + "plt.axis('off')\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "net = Network([784, 30, 10])\n", + "net.SGD(training_data, 30, 10, 3.0, test_data=test_data)" + ] + } + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Python [default]", + "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.12" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/notebooks/week-3/Assignment3_1.ipynb b/notebooks/week-3/Assignment3_1.ipynb new file mode 100644 index 0000000..2bfd715 --- /dev/null +++ b/notebooks/week-3/Assignment3_1.ipynb @@ -0,0 +1,181 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'Network' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0msklearn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mutils\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mshuffle\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 8\u001b[0;31m \u001b[0;32mclass\u001b[0m \u001b[0mNetwork\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobject\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 9\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 10\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__init__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msizes\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m\u001b[0m in \u001b[0;36mNetwork\u001b[0;34m()\u001b[0m\n\u001b[1;32m 122\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 123\u001b[0m \u001b[0mtraining_data\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0m_x\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0menc\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtransform\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0m_y\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreshape\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtoarray\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreshape\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0m_x\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0m_y\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mtraining_data\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 124\u001b[0;31m \u001b[0mnet\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mNetwork\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m13\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m30\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m3\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 125\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 126\u001b[0m \u001b[0mresults\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnet\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mSGD\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtraining_data\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m30\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m1.5\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtest_data\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtest_data\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mNameError\u001b[0m: name 'Network' is not defined" + ] + } + ], + "source": [ + "%matplotlib inline\n", + "import random\n", + "import numpy as np\n", + "import seaborn as sns; sns.set(style=\"ticks\", color_codes = True)\n", + "from sklearn.preprocessing import OneHotEncoder\n", + "from sklearn.utils import shuffle\n", + "\n", + "class Network(object):\n", + " \n", + " def __init__(self, sizes):\n", + " \n", + " self.num_layers = len(sizes)\n", + " self.sizes = sizes\n", + " self.biases = [np.random.randn(y, 1) for y in sizes[1:]]\n", + " self.weights = [np.random.randn(y, x) for x, y in zip(sizes[:1], sizes[1:])]\n", + " \n", + " def feedforward (self, a):\n", + " \n", + " for b, w in zip(self.biases, self.weights):\n", + " a = sigmoid(np.dot(w, a)+b)\n", + " return a\n", + " \n", + " def SGD(self, training_data, epochs, mini_batch_size, eta, test_data=None):\n", + " results = []\n", + " \n", + " n = len(training_data)\n", + " \n", + " if test_data:\n", + " n_test = len(test_data)\n", + " for j in xrange(epochs):\n", + " random.shuffle(training_data)\n", + " mini_batches = [ training_data[k:k+mini_batch_size]\n", + " for k in xrange(0, n, mini_batch_size) ]\n", + " for mini_batch in mini_batches:\n", + " self.update_mini_batch(mini_batch, eta)\n", + " \n", + " if test_data:\n", + " num_correct = self.evaluate(test_data)\n", + " accuracy = \"%.2f\" % (100 * (float(num_correct) / n_test))\n", + " print \"Epoch\", j, \":\", num_correct, \"/\", n_test, \"-\", accuracy, \"% acc\"\n", + " results.append(accuracy)\n", + " \n", + " else:\n", + " print \"Epoch\", j, \"complete\"\n", + " \n", + " return results\n", + " \n", + " def update_mini_batch(self, mini_batch, eta):\n", + " nabla_b = [np.zeros(b.shape) for b in self.biases]\n", + " nabla_w = [np.zeros(w.shape) for w in self.weights]\n", + " for x, y in mini_batch:\n", + " delta_nabla_b, delta_nabla_w = self.backprop(x, y)\n", + " nabla_b = [nb+dnb for nb, dnb in zip(nabla_b, delta_nabla_b)]\n", + " nabla_w = [nw+dnw for nw, dnw in zip(nabla_w, delta_nabla_w)]\n", + " \n", + " self.weights = [w-(eta/len(mini_batch))*nw\n", + " for w, nw in zip(self.weights, nabla_w)]\n", + " self.biases = [b-(eta/len(mini_batch))*nb\n", + " for b, nb in zip(self.biases, nabla_b)]\n", + " \n", + " def backprop(self, x, y):\n", + " \n", + " nabla_b = [np.zeros(b.shape) for b in self.biases]\n", + " nabla_w = [np.zeros(w.shape) for w in self.weights]\n", + " \n", + " activation = x\n", + " activations = [x]\n", + " zs = []\n", + " \n", + " for b, w in zip(self.biases, self.weights):\n", + " z = np.dot(w, activation)+b\n", + " zs.append(z)\n", + " activation = sigmoid(z)\n", + " activations.append(activation)\n", + " \n", + " delta = self.cost_derivative(activations[-1], y) * \\\n", + " sigmoid_prime(zs[-1])\n", + " nabla_b[-1] = delta\n", + " nabla_w[-1] = np.dot(delta, activations[-2].transpose())\n", + " \n", + " for l in xrange(2, self.num_layers):\n", + " z = zs[-1]\n", + " sp = sigmoid_prime(z)\n", + " delta = np.dot(self.weights[-1+1].transpose())\n", + " return (nabla_b, nabla_w)\n", + " \n", + " def evaluate(self, test_data):\n", + " \n", + " test_results = [(np.argmax(self.feedforward(x)), y)\n", + " for (x, y) in test_data]\n", + " return sum(int(x == y) for (x,y) in test_results)\n", + " \n", + " def cost_derivative(self, output_activations, y):\n", + " return (output_activations-y)\n", + " \n", + " def sigmoid(z):\n", + " return 1.0/(1.0 + np.exp(-z))\n", + " \n", + " def sigmoid_prime(z):\n", + " return sigmoid(z)*(1-sigmoid(z))\n", + "\n", + " wine_data = np.loadtxt(open(\"./data/wine.csv\",\"rb\"), delimiter=\",\")\n", + " wine_data = shuffle(wine_data)\n", + " \n", + " X = wine_data[:,1:]\n", + " y = wine_data[:, 0]\n", + " \n", + " X = X / X.max(axis=0)\n", + " \n", + " _, y = np.unique(y, return_inverse=True)\n", + " y = y.reshape(-1,1)\n", + " \n", + " data = []\n", + " for i in range(X.shape[0]):\n", + " data.append(tuple([X[i].reshape(-1,1), y[i][0]]))\n", + " \n", + " trainingSplit = int(.8 * len(data))\n", + " training_data = data[:trainingSplit]\n", + " test_data = data[trainingSplit:]\n", + " \n", + " enc = OneHotEncoder()\n", + " enc.fit(y)\n", + " \n", + " training_data = [[_x, enc.transform(_y.reshape(-1,1)).toarray().reshape(-1,1)] for _x, _y in training_data]\n", + " net = Network([13, 30, 3])\n", + " \n", + " results = net.SGD(training_data, 30, 2, 1.5, test_data=test_data)\n", + " \n", + " plt.plot(results)\n", + " plt.ylabel('accuracy (%)')\n", + " plt.ylim([0,100.0])\n", + " plt.show()" + ] + } + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Python [default]", + "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.12" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/notebooks/week-3/Lab 3 sw3036.ipynb b/notebooks/week-3/Lab 3 sw3036.ipynb new file mode 100644 index 0000000..819b51e --- /dev/null +++ b/notebooks/week-3/Lab 3 sw3036.ipynb @@ -0,0 +1,174 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 0: 9001 / 10000\n", + "Epoch 1: 9200 / 10000\n", + "Epoch 2: 9295 / 10000\n", + "Epoch 3: 9322 / 10000\n", + "Epoch 4: 9366 / 10000\n", + "Epoch 5: 9374 / 10000\n", + "Epoch 6: 9410 / 10000\n", + "Epoch 7: 9433 / 10000\n", + "Epoch 8: 9419 / 10000\n", + "Epoch 9: 9443 / 10000\n", + "Epoch 10: 9458 / 10000\n", + "Epoch 11: 9436 / 10000\n", + "Epoch 12: 9497 / 10000\n", + "Epoch 13: 9471 / 10000\n", + "Epoch 14: 9468 / 10000\n", + "Epoch 15: 9493 / 10000\n", + "Epoch 16: 9492 / 10000\n", + "Epoch 17: 9504 / 10000\n", + "Epoch 18: 9505 / 10000\n", + "Epoch 19: 9487 / 10000\n", + "Epoch 20: 9514 / 10000\n", + "Epoch 21: 9492 / 10000\n", + "Epoch 22: 9487 / 10000\n", + "Epoch 23: 9476 / 10000\n", + "Epoch 24: 9494 / 10000\n", + "Epoch 25: 9490 / 10000\n", + "Epoch 26: 9509 / 10000\n", + "Epoch 27: 9515 / 10000\n", + "Epoch 28: 9487 / 10000\n", + "Epoch 29: 9512 / 10000\n" + ] + } + ], + "source": [ + "import random\n", + "import numpy as np\n", + "\n", + "class Network(object):\n", + "\n", + " def __init__(self, sizes):\n", + " self.num_layers = len(sizes)\n", + " self.sizes = sizes\n", + " self.biases = [np.random.randn(y, 1) for y in sizes[1:]]\n", + " self.weights = [np.random.randn(y, x)\n", + " for x, y in zip(sizes[:-1], sizes[1:])]\n", + " \n", + " \n", + " \n", + " def feedforward (self, a):\n", + " for b, w in zip(self.biases, self.weights):\n", + " a = sigmoid(np.dot(w, a)+b)\n", + " return a\n", + " \n", + " def SGD(self, training_data, epochs, mini_batch_size, eta, test_data=None):\n", + " if test_data: n_test = len(test_data)\n", + " n = len(training_data)\n", + " for j in xrange(epochs):\n", + " random.shuffle(training_data)\n", + " mini_batches = [\n", + " training_data[k:k+mini_batch_size]\n", + " for k in xrange(0, n, mini_batch_size)]\n", + " for mini_batch in mini_batches:\n", + " self.update_mini_batch(mini_batch, eta)\n", + " \n", + " if test_data:\n", + " print \"Epoch {0}: {1} / {2}\".format(\n", + " j, self.evaluate(test_data), n_test)\n", + " else:\n", + " print \"Epoch {0} complete\".format(j)\n", + " \n", + " \n", + " \n", + " def update_mini_batch(self, mini_batch, eta):\n", + " nabla_b = [np.zeros(b.shape) for b in self.biases]\n", + " nabla_w = [np.zeros(w.shape) for w in self.weights]\n", + " for x, y in mini_batch:\n", + " delta_nabla_b, delta_nabla_w = self.backprop(x, y)\n", + " nabla_b = [nb+dnb for nb, dnb in zip(nabla_b, delta_nabla_b)]\n", + " nabla_w = [nw+dnw for nw, dnw in zip(nabla_w, delta_nabla_w)]\n", + " self.weights = [w-(eta/len(mini_batch))*nw \n", + " for w, nw in zip(self.weights, nabla_w)]\n", + " self.biases = [b-(eta/len(mini_batch))*nb \n", + " for b, nb in zip(self.biases, nabla_b)]\n", + " \n", + " \n", + " \n", + " def backprop(self, x, y):\n", + " nabla_b = [np.zeros(b.shape) for b in self.biases]\n", + " nabla_w = [np.zeros(w.shape) for w in self.weights]\n", + " \n", + " activation = x\n", + " activations = [x] \n", + " zs = [] \n", + " for b, w in zip(self.biases, self.weights):\n", + " z = np.dot(w, activation)+b\n", + " zs.append(z)\n", + " activation = sigmoid(z)\n", + " activations.append(activation)\n", + " \n", + " delta = self.cost_derivative(activations[-1], y) * \\\n", + " sigmoid_prime(zs[-1])\n", + " nabla_b[-1] = delta\n", + " nabla_w[-1] = np.dot(delta, activations[-2].transpose())\n", + " \n", + " for l in xrange(2, self.num_layers):\n", + " z = zs[-l]\n", + " sp = sigmoid_prime(z)\n", + " delta = np.dot(self.weights[-l+1].transpose(), delta) * sp\n", + " nabla_b[-l] = delta\n", + " nabla_w[-l] = np.dot(delta, activations[-l-1].transpose())\n", + " return (nabla_b, nabla_w)\n", + " \n", + " \n", + " \n", + " def evaluate(self, test_data):\n", + " test_results = [(np.argmax(self.feedforward(x)), y)\n", + " for (x, y) in test_data]\n", + " return sum(int(x == y) for (x, y) in test_results)\n", + " \n", + " def cost_derivative(self, output_activations, y):\n", + " return (output_activations-y)\n", + " \n", + "def sigmoid(z):\n", + " return 1.0/(1.0 + np.exp(-z))\n", + " \n", + "def sigmoid_prime(z):\n", + " return sigmoid(z)*(1-sigmoid(z))\n", + "\n", + "\n", + "import mnist_loader\n", + "training_data, validation_data, test_data = mnist_loader.load_data_wrapper()\n", + "\n", + "\n", + "net = Network([784, 30, 10])\n", + "net.SGD(training_data, 30, 10, 3.0, test_data=test_data)" + ] + } + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Python [default]", + "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.12" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/notebooks/week-3/Lab3_1.ipynb b/notebooks/week-3/Lab3_1.ipynb new file mode 100644 index 0000000..6252788 --- /dev/null +++ b/notebooks/week-3/Lab3_1.ipynb @@ -0,0 +1,129 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import random\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import seaborn as sns; sns.set(style=\"ticks\", color_codes=True)\n", + "from sklearn.preprocessing import OneHotEncoder\n", + "from sklearn.utils import shuffle" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "class Network(object):\n", + " \n", + " def __init__(self, sizes):\n", + " \n", + " self.num_layers = len(sizes)\n", + " self.sizes = sizes\n", + " self.biases = [np.random.randn(y, 1) for y in sizes[1:]]\n", + " self.weights = [np.random.randn(y, x) for x, y in zip(sizes[:-1], sizes[1:])]\n", + " \n", + " def feedforward (self, a):\n", + " \n", + " for b, w in zip(self.biases, self.weights):\n", + " a = sigmoid(np.dot(w, a)+b)\n", + " return a\n", + " \n", + " def SGD(self, training_data, epoch, mini_batch_size, eta, test_data=None):\n", + " \n", + " results = []\n", + " \n", + " n = len(training_data)\n", + " \n", + " if test_data:\n", + " n_test = len(test_data)\n", + " \n", + " for j in xrange(epochs):\n", + " \n", + " random.shuffle(training_data)\n", + " \n", + " mini_batches = [ training_data[k:k+mini_batch_size]\n", + " for k in xrange(0, n, mini_batch_size) ]\n", + " \n", + " for mini_batch in mini_batches:\n", + " self.update_mini_batch(mini_batch, eta)\n", + " \n", + " if test_data:\n", + " num_correct = self.evaluate(test_data)\n", + " accuracy = \"%.2f\" % (100 * (float(num_correct) / n_test))\n", + " print \"Epoch\", j, \":\", num_correct, \"/\", n_test, \"-\", accuracy, \"% acc\"\n", + " results.append(accuracy)\n", + " else:\n", + " print \"Epoch\", j, \"complete\"\n", + " \n", + " return results\n", + " \n", + " def update_mini_batch(self, mini_batch, eta)\n", + " \n", + " nabla_b = [np.zeros(b.shape) for b in self.biases]\n", + " nabla_w = [np.zeros(w.shape) for w in self.weights]\n", + " for x,y in mini_batch:\n", + " delta_nabla_b, delta_nabla_w = self.backprop(x, y)\n", + " nabla_b = [nb+dnb for nb, dnb in zip(nabla_b, delta_nabla_b)]\n", + " nabla_w = [nw+dnw for nw, dnw in zip(nabla_w, delta_babla_w)]\n", + " self.weights = [w-(eta/len(mini_batch))*nw\n", + " for b, nb in zip(self.biases, nabla_b)]\n", + " \n", + " def bachprop(self, x, y):\n", + " nabla_b = [np.zeros(b.shape) for b in self.biases]\n", + " nabla_w = [np.zeros(w.shape) for w in self.weights]\n", + " \n", + " activation = x\n", + " activations = [x]\n", + " zs = []\n", + " for b, w in zip(self.biases, self.weights):\n", + " z = np.dot(w, activation)+b\n", + " zs.append(z)\n", + " activation = sigmoid(z)\n", + " activations.append(activation)\n", + " \n", + " delta = self.cost_derivative(activations[-1], y) * \\\n", + " sigmoid_prime(zs[-1])\n", + " nabla_b[-1] = delta\n", + " nabla_w[-1] = np.dot(delta, activations[-2].transpose())\n", + " \n", + " for l in xrange(2, self.num_layers):\n", + " z = zs[-1]\n", + " sp = sigmoid_prime(z)\n", + " delta = np.dot" + ] + } + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Python [default]", + "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.12" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/notebooks/week-3/data/01-basic ann.ipynb b/notebooks/week-3/data/01-basic ann.ipynb new file mode 100755 index 0000000..15da5f8 --- /dev/null +++ b/notebooks/week-3/data/01-basic ann.ipynb @@ -0,0 +1,474 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Lab 3 - Basic Artificial Neural Network\n", + "\n", + "In this lab we will build a very rudimentary Artificial Neural Network (ANN) and use it to solve some basic classification problems. This example is implemented with only basic math and linear algebra functions using Python's scientific computing library [numpy](http://www.numpy.org/). This will allow us to study how each aspect of the network works, and to gain an intuitive understanding of its functions. In future labs we will use higher-level libraries such as Keras and Tensorflow which automate and optimize most of these functions, making the network much faster and easier to use.\n", + "\n", + "The code and MNIST test data is taken directly from [http://neuralnetworksanddeeplearning.com/](http://neuralnetworksanddeeplearning.com/) by [Michael Nielsen](http://michaelnielsen.org/). Please review the [first chapter](http://neuralnetworksanddeeplearning.com/chap1.html) of the book for a thorough explanation of the code." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "First we import the Python libraries we will be using, including the random library for generating random numbers, numpy for scientific computing, matplotlib and seaborn for creating data visualizations, and several helpful modules from the sci-kit learn machine learning library:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "import random\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import seaborn as sns; sns.set(style=\"ticks\", color_codes=True)\n", + "from sklearn.preprocessing import OneHotEncoder\n", + "from sklearn.utils import shuffle" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, we will build the artificial neural network by defining a new class called `Network`. This class will contain all the data for our neural network, as well as all the methods we need to compute activations between each layer, and train the network through backpropagation and stochastic gradient descent (SGD)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "class Network(object):\n", + " \n", + " def __init__(self, sizes):\n", + " \n", + " \"\"\"The list ``sizes`` contains the number of neurons in the\n", + " respective layers of the network. For example, if the list\n", + " was [2, 3, 1] then it would be a three-layer network, with the\n", + " first layer containing 2 neurons, the second layer 3 neurons,\n", + " and the third layer 1 neuron. The biases and weights for the\n", + " network are initialized randomly, using a Gaussian\n", + " distribution with mean 0, and variance 1. Note that the first\n", + " layer is assumed to be an input layer, and by convention we\n", + " won't set any biases for those neurons, since biases are only\n", + " ever used in computing the outputs for later layers.\"\"\"\n", + " \n", + " self.num_layers = len(sizes)\n", + " self.sizes = sizes\n", + " self.biases = [np.random.randn(y, 1) for y in sizes[1:]]\n", + " self.weights = [np.random.randn(y, x) for x, y in zip(sizes[:-1], sizes[1:])]\n", + " \n", + " def feedforward (self, a):\n", + " \n", + " \"\"\"Return the output of the network if \"a\" is input. The np.dot() \n", + " function computes the matrix multiplication between the weight and input\n", + " matrices for each set of layers. When used with numpy arrays, the '+'\n", + " operator performs matrix addition.\"\"\"\n", + " \n", + " for b, w in zip(self.biases, self.weights):\n", + " a = sigmoid(np.dot(w, a)+b)\n", + " return a\n", + " \n", + " def SGD(self, training_data, epochs, mini_batch_size, eta, test_data=None):\n", + " \n", + " \"\"\"Train the neural network using mini-batch stochastic\n", + " gradient descent. The \"training_data\" is a list of tuples\n", + " \"(x, y)\" representing the training inputs and the desired\n", + " outputs. The other non-optional parameters specify the number \n", + " of epochs, size of each mini-batch, and the learning rate. \n", + " If \"test_data\" is provided then the network will be evaluated \n", + " against the test data after each epoch, and partial progress \n", + " printed out. This is useful for tracking progress, but slows\n", + " things down substantially.\"\"\"\n", + " \n", + " # create an empty array to store the accuracy results from each epoch\n", + " results = []\n", + "\n", + " n = len(training_data)\n", + " \n", + " if test_data: \n", + " n_test = len(test_data)\n", + " \n", + " # this is the code for one training step, done once for each epoch\n", + " for j in xrange(epochs):\n", + " \n", + " # before each epoch, the data is randomly shuffled\n", + " random.shuffle(training_data)\n", + " \n", + " # training data is broken up into individual mini-batches\n", + " mini_batches = [ training_data[k:k+mini_batch_size] \n", + " for k in xrange(0, n, mini_batch_size) ]\n", + " \n", + " # then each mini-batch is used to update the parameters of the \n", + " # network using backpropagation and the specified learning rate\n", + " for mini_batch in mini_batches:\n", + " self.update_mini_batch(mini_batch, eta)\n", + " \n", + " # if a test data set is provided, the accuracy results \n", + " # are displayed and stored in the 'results' array\n", + " if test_data:\n", + " num_correct = self.evaluate(test_data)\n", + " accuracy = \"%.2f\" % (100 * (float(num_correct) / n_test))\n", + " print \"Epoch\", j, \":\", num_correct, \"/\", n_test, \"-\", accuracy, \"% acc\"\n", + " results.append(accuracy)\n", + " else:\n", + " print \"Epoch\", j, \"complete\"\n", + " \n", + " return results\n", + " \n", + " def update_mini_batch(self, mini_batch, eta):\n", + " \n", + " \"\"\"Update the network's weights and biases by applying\n", + " gradient descent using backpropagation to a single mini batch.\n", + " The \"mini_batch\" is a list of tuples \"(x, y)\", and \"eta\"\n", + " is the learning rate.\"\"\"\n", + "\n", + " nabla_b = [np.zeros(b.shape) for b in self.biases]\n", + " nabla_w = [np.zeros(w.shape) for w in self.weights]\n", + " for x, y in mini_batch:\n", + " delta_nabla_b, delta_nabla_w = self.backprop(x, y)\n", + " nabla_b = [nb+dnb for nb, dnb in zip(nabla_b, delta_nabla_b)]\n", + " nabla_w = [nw+dnw for nw, dnw in zip(nabla_w, delta_nabla_w)]\n", + " self.weights = [w-(eta/len(mini_batch))*nw \n", + " for w, nw in zip(self.weights, nabla_w)]\n", + " self.biases = [b-(eta/len(mini_batch))*nb \n", + " for b, nb in zip(self.biases, nabla_b)]\n", + " \n", + " def backprop(self, x, y):\n", + " \n", + " \"\"\"Return a tuple ``(nabla_b, nabla_w)`` representing the\n", + " gradient for the cost function C_x. ``nabla_b`` and\n", + " ``nabla_w`` are layer-by-layer lists of numpy arrays, similar\n", + " to ``self.biases`` and ``self.weights``.\"\"\"\n", + " \n", + " nabla_b = [np.zeros(b.shape) for b in self.biases]\n", + " nabla_w = [np.zeros(w.shape) for w in self.weights]\n", + " \n", + " # feedforward\n", + " activation = x\n", + " activations = [x] # list to store all the activations, layer by layer\n", + " zs = [] # list to store all the z vectors, layer by layer\n", + " for b, w in zip(self.biases, self.weights):\n", + " z = np.dot(w, activation)+b\n", + " zs.append(z)\n", + " activation = sigmoid(z)\n", + " activations.append(activation)\n", + " # backward pass\n", + " delta = self.cost_derivative(activations[-1], y) * \\\n", + " sigmoid_prime(zs[-1])\n", + " nabla_b[-1] = delta\n", + " nabla_w[-1] = np.dot(delta, activations[-2].transpose())\n", + " \n", + " \"\"\"Note that the variable l in the loop below is used a little\n", + " differently to the notation in Chapter 2 of the book. Here,\n", + " l = 1 means the last layer of neurons, l = 2 is the\n", + " second-last layer, and so on. It's a renumbering of the\n", + " scheme in the book, used here to take advantage of the fact\n", + " that Python can use negative indices in lists.\"\"\"\n", + " \n", + " for l in xrange(2, self.num_layers):\n", + " z = zs[-l]\n", + " sp = sigmoid_prime(z)\n", + " delta = np.dot(self.weights[-l+1].transpose(), delta) * sp\n", + " nabla_b[-l] = delta\n", + " nabla_w[-l] = np.dot(delta, activations[-l-1].transpose())\n", + " return (nabla_b, nabla_w)\n", + "\n", + " def evaluate(self, test_data):\n", + " \n", + " \"\"\"Return the number of test inputs for which the neural\n", + " network outputs the correct result. Note that the neural\n", + " network's output is assumed to be the index of whichever\n", + " neuron in the final layer has the highest activation.\n", + " \n", + " Numpy's argmax() function returns the position of the \n", + " largest element in an array. We first create a list of \n", + " predicted value and target value pairs, and then count \n", + " the number of times those values match to get the total \n", + " number correct.\"\"\"\n", + " \n", + " test_results = [(np.argmax(self.feedforward(x)), y)\n", + " for (x, y) in test_data]\n", + " \n", + " return sum(int(x == y) for (x, y) in test_results)\n", + "\n", + " def cost_derivative(self, output_activations, y):\n", + " \"\"\"Return the vector of partial derivatives \\partial C_x /\n", + " \\partial a for the output activations.\"\"\"\n", + " return (output_activations-y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Finally, we define two helper functions which compute the sigmoid activation function and it's derivative which is used in backpropagation." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def sigmoid(z):\n", + "# The sigmoid activation function.\n", + " return 1.0/(1.0 + np.exp(-z))\n", + "\n", + "def sigmoid_prime(z):\n", + "# Derivative of the sigmoid function.\n", + " return sigmoid(z)*(1-sigmoid(z))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Iris dataset example\n", + "\n", + "Now we will test our basic artificial neural network on a very simple classification problem. First we will use the [seaborn data visualization library](https://stanford.edu/~mwaskom/software/seaborn/) to load the ['iris' dataset](https://en.wikipedia.org/wiki/Iris_flower_data_set), \n", + "which consists of 50 samples from each of three species of Iris (Iris setosa, Iris virginica and Iris versicolor), with four features measuring the length and the width of each flower's sepals and petals. After we load the data we will vizualize it using a pairwise plot using a buit-in function in seaborn. A pairwise plot is a kind of exploratory data analysis that helps us to find relationships between pairs of features within a multi-dimensional data set. In this case, we can use it to understand which features might be most useful for determining the species of the flower." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "iris_data = sns.load_dataset(\"iris\")\n", + "\n", + "# randomly shuffle data\n", + "iris_data = shuffle(iris_data)\n", + "\n", + "# print first 5 data points\n", + "print iris_data[:5]\n", + "\n", + "# create pairplot of iris data\n", + "g = sns.pairplot(iris_data, hue=\"species\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, we will prepare the data set for training in our ANN. Here is a list of operations we need to perform on the data set so that it will work with the `Network class` we created above:\n", + "\n", + "1. Convert data to numpy format\n", + "2. Normalize the data so that each features is scaled from 0 to 1\n", + "2. Split data into feature and target data sets by extracting specific rows from the numpy array. In this case the features are in the first four columns, and the target is in the last column, which in Python we can access with a negative index\n", + "3. Recombine the data into a single Python array, so that each entry in the array represents one sample, and each sample is composed of two numpy arrays, one for the feature data, and one for the target\n", + "4. Split this data set into training and testing sets\n", + "\n", + "Finally, we also need to convert the targets of the training set to 'one-hot' encoding (OHE). OHE takes each piece of categorical data and converts it to a list of binary values the length of which is equal to the number of categories, and the position of the current category denoted with a '1' and '0' for all others. For example, in our dataset we have 3 possible categories: versicolor, virginica, and setosa. After applying OHE, versicolor becomes [1,0,0], virginica becomes [0,1,0], and setosa becomes [0,0,1]. OHE is often used to represent target data in neural networks because it allows easy comparison to the output coming from the network's final layer." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# convert iris data to numpy format\n", + "iris_array = iris_data.as_matrix()\n", + "\n", + "# split data into feature and target sets\n", + "X = iris_array[:, :4].astype(float)\n", + "y = iris_array[:, -1]\n", + "\n", + "# normalize the data per feature by dividing by the maximum value in each column\n", + "X = X / X.max(axis=0)\n", + "\n", + "# convert the textual category data to integer using numpy's unique() function\n", + "_, y = np.unique(y, return_inverse=True)\n", + "\n", + "# convert the list of targets to a vertical matrix with the dimensions [1 x number of samples]\n", + "# this is necessary for later computation\n", + "y = y.reshape(-1,1)\n", + "\n", + "# combine feature and target data into a new python array\n", + "data = []\n", + "for i in range(X.shape[0]):\n", + " data.append(tuple([X[i].reshape(-1,1), y[i][0]]))\n", + "\n", + "# split data into training and test sets\n", + "trainingSplit = int(.7 * len(data))\n", + "training_data = data[:trainingSplit]\n", + "test_data = data[trainingSplit:]\n", + "\n", + "# create an instance of the one-hot encoding function from the sci-kit learn library\n", + "enc = OneHotEncoder()\n", + "\n", + "# use the function to figure out how many categories exist in the data\n", + "enc.fit(y)\n", + "\n", + "# convert only the target data in the training set to one-hot encoding\n", + "training_data = [[_x, enc.transform(_y.reshape(-1,1)).toarray().reshape(-1,1)] for _x, _y in training_data]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# define the network\n", + "net = Network([4, 32, 3])\n", + "\n", + "# train the network using SGD, and output the results\n", + "results = net.SGD(training_data, 30, 10, 0.2, test_data=test_data)\n", + "\n", + "# visualize the results\n", + "plt.plot(results)\n", + "plt.ylabel('accuracy (%)')\n", + "plt.ylim([0,100.0])\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### MNIST dataset example\n", + "\n", + "Next, we will test our ANN on another, slightly more difficult classification problem. The data set we'll be using is called MNIST, which contains tens of thousands of scanned images of handwritten digits, classified according to the digit type from 0-9. The name MNIST comes from the fact that it is a Modified (M) version of a dataset originally developed by the United States' National Institute of Standards and Technology (NIST). This is a very popular dataset used to measure the effectiveness of Machine Learning models for image recongnition. This time we don't have to do as much data management since the data is already provided in the right format [here](https://github.com/mnielsen/neural-networks-and-deep-learning/tree/master/data). \n", + "\n", + "We will get into more details about working with images and proper data formats for image data in later labs, but you can already use this data to test the effectiveness of our network. With the default settings you should be able to get a classification accuracy of 95% in the test set.\n", + "\n", + "*note: since this is a much larger data set than the Iris data, the training will take substantially more time.*" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import mnist_loader\n", + "\n", + "training_data, validation_data, test_data = mnist_loader.load_data_wrapper()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can use the matplotlib library to visualize one of the training images. In the data set, the pixel values of each 28x28 pixel image is encoded in a straight list of 784 numbers, so before we visualize it we have to use numpy's reshape function to convert it back to a 2d matrix form" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "img = training_data[0][0][:,0].reshape((28,28))\n", + "\n", + "fig = plt.figure()\n", + "plt.imshow(img, interpolation='nearest', vmin = 0, vmax = 1, cmap=plt.cm.gray)\n", + "plt.axis('off')\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "net = Network([784, 30, 10])\n", + "results = net.SGD(training_data, 30, 10, 3.0, test_data=test_data)\n", + "\n", + "plt.plot(results)\n", + "plt.ylabel('accuracy (%)')\n", + "plt.ylim([0,100.0])\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Assignment 3 - classification\n", + "\n", + "Now that you have a basic understanding of how an artificial neural network works and have seen it applied to a classification task using two types of data, see if you can use the network to solve another classification problem using another data set. \n", + "\n", + "In the week-3 folder there is a data set called `wine.csv` which is another common data set used to test classification capabilities of machine learning algorithms. You can find a description of the data set here:\n", + "\n", + "https://archive.ics.uci.edu/ml/datasets/Wine\n", + "\n", + "The code below uses numpy to import this `.csv` file as a 2d numpy array. As before, we first shuffle the data set, and then split it into feature and target sets. This time, the target is in the first column of the data, with the rest of the columns representing the 13 features. \n", + "\n", + "From there you should be able to go through and format the data set in a similar way as we did for the Iris data above. Remember to split the data into both training and test sets, and encode the training targets as one-hot vectors. When you create the network, make sure to specify the proper dimensions for the input and output layer so that it matches the number of features and target categories in the data set. You can also experiment with different sizes for the hidden layer. If you are not achieving good results, try changing some of the hyper-parameters, including the size and quantity of hidden layers in the network specification, and the number of epochs, the size of a mini-batch, and the learning rate in the SGD function call. With a training/test split of 80/20 you should be able to achieve 100% accuracy Within 30 epochs.\n", + "\n", + "Remeber to commit your changes and submit a pull request when you are done.\n", + "\n", + "*Hint: do not be fooled by the category labels that come with this data set! Even though the labels are already integers (1,2,3) we need to always make sure that our category labels are sequential integers __and__ start with 0. To make sure this is the case you should always use the np.unique() function on the target data as we did with the Iris example above.*" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "wine_data = np.loadtxt(open(\"./data/wine.csv\",\"rb\"),delimiter=\",\")\n", + "\n", + "wine_data = shuffle(wine_data)\n", + "\n", + "X = wine_data[:,1:]\n", + "y = wine_data[:, 0]" + ] + } + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Python [default]", + "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.12" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/notebooks/week-3/data/mnist.pkl.gz b/notebooks/week-3/data/mnist.pkl.gz new file mode 100644 index 0000000..059aba0 Binary files /dev/null and b/notebooks/week-3/data/mnist.pkl.gz differ diff --git a/notebooks/week-3/data/mnist_loader.py b/notebooks/week-3/data/mnist_loader.py new file mode 100644 index 0000000..6ba9ab2 --- /dev/null +++ b/notebooks/week-3/data/mnist_loader.py @@ -0,0 +1,85 @@ +""" +mnist_loader +~~~~~~~~~~~~ + +A library to load the MNIST image data. For details of the data +structures that are returned, see the doc strings for ``load_data`` +and ``load_data_wrapper``. In practice, ``load_data_wrapper`` is the +function usually called by our neural network code. +""" + +#### Libraries +# Standard library +import cPickle +import gzip + +# Third-party libraries +import numpy as np + +def load_data(): + """Return the MNIST data as a tuple containing the training data, + the validation data, and the test data. + + The ``training_data`` is returned as a tuple with two entries. + The first entry contains the actual training images. This is a + numpy ndarray with 50,000 entries. Each entry is, in turn, a + numpy ndarray with 784 values, representing the 28 * 28 = 784 + pixels in a single MNIST image. + + The second entry in the ``training_data`` tuple is a numpy ndarray + containing 50,000 entries. Those entries are just the digit + values (0...9) for the corresponding images contained in the first + entry of the tuple. + + The ``validation_data`` and ``test_data`` are similar, except + each contains only 10,000 images. + + This is a nice data format, but for use in neural networks it's + helpful to modify the format of the ``training_data`` a little. + That's done in the wrapper function ``load_data_wrapper()``, see + below. + """ + f = gzip.open('./data/mnist.pkl.gz', 'rb') + training_data, validation_data, test_data = cPickle.load(f) + f.close() + return (training_data, validation_data, test_data) + +def load_data_wrapper(): + """Return a tuple containing ``(training_data, validation_data, + test_data)``. Based on ``load_data``, but the format is more + convenient for use in our implementation of neural networks. + + In particular, ``training_data`` is a list containing 50,000 + 2-tuples ``(x, y)``. ``x`` is a 784-dimensional numpy.ndarray + containing the input image. ``y`` is a 10-dimensional + numpy.ndarray representing the unit vector corresponding to the + correct digit for ``x``. + + ``validation_data`` and ``test_data`` are lists containing 10,000 + 2-tuples ``(x, y)``. In each case, ``x`` is a 784-dimensional + numpy.ndarry containing the input image, and ``y`` is the + corresponding classification, i.e., the digit values (integers) + corresponding to ``x``. + + Obviously, this means we're using slightly different formats for + the training data and the validation / test data. These formats + turn out to be the most convenient for use in our neural network + code.""" + tr_d, va_d, te_d = load_data() + training_inputs = [np.reshape(x, (784, 1)) for x in tr_d[0]] + training_results = [vectorized_result(y) for y in tr_d[1]] + training_data = zip(training_inputs, training_results) + validation_inputs = [np.reshape(x, (784, 1)) for x in va_d[0]] + validation_data = zip(validation_inputs, va_d[1]) + test_inputs = [np.reshape(x, (784, 1)) for x in te_d[0]] + test_data = zip(test_inputs, te_d[1]) + return (training_data, validation_data, test_data) + +def vectorized_result(j): + """Return a 10-dimensional unit vector with a 1.0 in the jth + position and zeroes elsewhere. This is used to convert a digit + (0...9) into a corresponding desired output from the neural + network.""" + e = np.zeros((10, 1)) + e[j] = 1.0 + return e diff --git a/notebooks/week-3/data/wine.csv b/notebooks/week-3/data/wine.csv new file mode 100644 index 0000000..a0b3962 --- /dev/null +++ b/notebooks/week-3/data/wine.csv @@ -0,0 +1,178 @@ +1,14.23,1.71,2.43,15.6,127,2.8,3.06,.28,2.29,5.64,1.04,3.92,1065 +1,13.2,1.78,2.14,11.2,100,2.65,2.76,.26,1.28,4.38,1.05,3.4,1050 +1,13.16,2.36,2.67,18.6,101,2.8,3.24,.3,2.81,5.68,1.03,3.17,1185 +1,14.37,1.95,2.5,16.8,113,3.85,3.49,.24,2.18,7.8,.86,3.45,1480 +1,13.24,2.59,2.87,21,118,2.8,2.69,.39,1.82,4.32,1.04,2.93,735 +1,14.2,1.76,2.45,15.2,112,3.27,3.39,.34,1.97,6.75,1.05,2.85,1450 +1,14.39,1.87,2.45,14.6,96,2.5,2.52,.3,1.98,5.25,1.02,3.58,1290 +1,14.06,2.15,2.61,17.6,121,2.6,2.51,.31,1.25,5.05,1.06,3.58,1295 +1,14.83,1.64,2.17,14,97,2.8,2.98,.29,1.98,5.2,1.08,2.85,1045 +1,13.86,1.35,2.27,16,98,2.98,3.15,.22,1.85,7.22,1.01,3.55,1045 +1,14.1,2.16,2.3,18,105,2.95,3.32,.22,2.38,5.75,1.25,3.17,1510 +1,14.12,1.48,2.32,16.8,95,2.2,2.43,.26,1.57,5,1.17,2.82,1280 +1,13.75,1.73,2.41,16,89,2.6,2.76,.29,1.81,5.6,1.15,2.9,1320 +1,14.75,1.73,2.39,11.4,91,3.1,3.69,.43,2.81,5.4,1.25,2.73,1150 +1,14.38,1.87,2.38,12,102,3.3,3.64,.29,2.96,7.5,1.2,3,1547 +1,13.63,1.81,2.7,17.2,112,2.85,2.91,.3,1.46,7.3,1.28,2.88,1310 +1,14.3,1.92,2.72,20,120,2.8,3.14,.33,1.97,6.2,1.07,2.65,1280 +1,13.83,1.57,2.62,20,115,2.95,3.4,.4,1.72,6.6,1.13,2.57,1130 +1,14.19,1.59,2.48,16.5,108,3.3,3.93,.32,1.86,8.7,1.23,2.82,1680 +1,13.64,3.1,2.56,15.2,116,2.7,3.03,.17,1.66,5.1,.96,3.36,845 +1,14.06,1.63,2.28,16,126,3,3.17,.24,2.1,5.65,1.09,3.71,780 +1,12.93,3.8,2.65,18.6,102,2.41,2.41,.25,1.98,4.5,1.03,3.52,770 +1,13.71,1.86,2.36,16.6,101,2.61,2.88,.27,1.69,3.8,1.11,4,1035 +1,12.85,1.6,2.52,17.8,95,2.48,2.37,.26,1.46,3.93,1.09,3.63,1015 +1,13.5,1.81,2.61,20,96,2.53,2.61,.28,1.66,3.52,1.12,3.82,845 +1,13.05,2.05,3.22,25,124,2.63,2.68,.47,1.92,3.58,1.13,3.2,830 +1,13.39,1.77,2.62,16.1,93,2.85,2.94,.34,1.45,4.8,.92,3.22,1195 +1,13.3,1.72,2.14,17,94,2.4,2.19,.27,1.35,3.95,1.02,2.77,1285 +1,13.87,1.9,2.8,19.4,107,2.95,2.97,.37,1.76,4.5,1.25,3.4,915 +1,14.02,1.68,2.21,16,96,2.65,2.33,.26,1.98,4.7,1.04,3.59,1035 +1,13.73,1.5,2.7,22.5,101,3,3.25,.29,2.38,5.7,1.19,2.71,1285 +1,13.58,1.66,2.36,19.1,106,2.86,3.19,.22,1.95,6.9,1.09,2.88,1515 +1,13.68,1.83,2.36,17.2,104,2.42,2.69,.42,1.97,3.84,1.23,2.87,990 +1,13.76,1.53,2.7,19.5,132,2.95,2.74,.5,1.35,5.4,1.25,3,1235 +1,13.51,1.8,2.65,19,110,2.35,2.53,.29,1.54,4.2,1.1,2.87,1095 +1,13.48,1.81,2.41,20.5,100,2.7,2.98,.26,1.86,5.1,1.04,3.47,920 +1,13.28,1.64,2.84,15.5,110,2.6,2.68,.34,1.36,4.6,1.09,2.78,880 +1,13.05,1.65,2.55,18,98,2.45,2.43,.29,1.44,4.25,1.12,2.51,1105 +1,13.07,1.5,2.1,15.5,98,2.4,2.64,.28,1.37,3.7,1.18,2.69,1020 +1,14.22,3.99,2.51,13.2,128,3,3.04,.2,2.08,5.1,.89,3.53,760 +1,13.56,1.71,2.31,16.2,117,3.15,3.29,.34,2.34,6.13,.95,3.38,795 +1,13.41,3.84,2.12,18.8,90,2.45,2.68,.27,1.48,4.28,.91,3,1035 +1,13.88,1.89,2.59,15,101,3.25,3.56,.17,1.7,5.43,.88,3.56,1095 +1,13.24,3.98,2.29,17.5,103,2.64,2.63,.32,1.66,4.36,.82,3,680 +1,13.05,1.77,2.1,17,107,3,3,.28,2.03,5.04,.88,3.35,885 +1,14.21,4.04,2.44,18.9,111,2.85,2.65,.3,1.25,5.24,.87,3.33,1080 +1,14.38,3.59,2.28,16,102,3.25,3.17,.27,2.19,4.9,1.04,3.44,1065 +1,13.9,1.68,2.12,16,101,3.1,3.39,.21,2.14,6.1,.91,3.33,985 +1,14.1,2.02,2.4,18.8,103,2.75,2.92,.32,2.38,6.2,1.07,2.75,1060 +1,13.94,1.73,2.27,17.4,108,2.88,3.54,.32,2.08,8.90,1.12,3.1,1260 +1,13.05,1.73,2.04,12.4,92,2.72,3.27,.17,2.91,7.2,1.12,2.91,1150 +1,13.83,1.65,2.6,17.2,94,2.45,2.99,.22,2.29,5.6,1.24,3.37,1265 +1,13.82,1.75,2.42,14,111,3.88,3.74,.32,1.87,7.05,1.01,3.26,1190 +1,13.77,1.9,2.68,17.1,115,3,2.79,.39,1.68,6.3,1.13,2.93,1375 +1,13.74,1.67,2.25,16.4,118,2.6,2.9,.21,1.62,5.85,.92,3.2,1060 +1,13.56,1.73,2.46,20.5,116,2.96,2.78,.2,2.45,6.25,.98,3.03,1120 +1,14.22,1.7,2.3,16.3,118,3.2,3,.26,2.03,6.38,.94,3.31,970 +1,13.29,1.97,2.68,16.8,102,3,3.23,.31,1.66,6,1.07,2.84,1270 +1,13.72,1.43,2.5,16.7,108,3.4,3.67,.19,2.04,6.8,.89,2.87,1285 +2,12.37,.94,1.36,10.6,88,1.98,.57,.28,.42,1.95,1.05,1.82,520 +2,12.33,1.1,2.28,16,101,2.05,1.09,.63,.41,3.27,1.25,1.67,680 +2,12.64,1.36,2.02,16.8,100,2.02,1.41,.53,.62,5.75,.98,1.59,450 +2,13.67,1.25,1.92,18,94,2.1,1.79,.32,.73,3.8,1.23,2.46,630 +2,12.37,1.13,2.16,19,87,3.5,3.1,.19,1.87,4.45,1.22,2.87,420 +2,12.17,1.45,2.53,19,104,1.89,1.75,.45,1.03,2.95,1.45,2.23,355 +2,12.37,1.21,2.56,18.1,98,2.42,2.65,.37,2.08,4.6,1.19,2.3,678 +2,13.11,1.01,1.7,15,78,2.98,3.18,.26,2.28,5.3,1.12,3.18,502 +2,12.37,1.17,1.92,19.6,78,2.11,2,.27,1.04,4.68,1.12,3.48,510 +2,13.34,.94,2.36,17,110,2.53,1.3,.55,.42,3.17,1.02,1.93,750 +2,12.21,1.19,1.75,16.8,151,1.85,1.28,.14,2.5,2.85,1.28,3.07,718 +2,12.29,1.61,2.21,20.4,103,1.1,1.02,.37,1.46,3.05,.906,1.82,870 +2,13.86,1.51,2.67,25,86,2.95,2.86,.21,1.87,3.38,1.36,3.16,410 +2,13.49,1.66,2.24,24,87,1.88,1.84,.27,1.03,3.74,.98,2.78,472 +2,12.99,1.67,2.6,30,139,3.3,2.89,.21,1.96,3.35,1.31,3.5,985 +2,11.96,1.09,2.3,21,101,3.38,2.14,.13,1.65,3.21,.99,3.13,886 +2,11.66,1.88,1.92,16,97,1.61,1.57,.34,1.15,3.8,1.23,2.14,428 +2,13.03,.9,1.71,16,86,1.95,2.03,.24,1.46,4.6,1.19,2.48,392 +2,11.84,2.89,2.23,18,112,1.72,1.32,.43,.95,2.65,.96,2.52,500 +2,12.33,.99,1.95,14.8,136,1.9,1.85,.35,2.76,3.4,1.06,2.31,750 +2,12.7,3.87,2.4,23,101,2.83,2.55,.43,1.95,2.57,1.19,3.13,463 +2,12,.92,2,19,86,2.42,2.26,.3,1.43,2.5,1.38,3.12,278 +2,12.72,1.81,2.2,18.8,86,2.2,2.53,.26,1.77,3.9,1.16,3.14,714 +2,12.08,1.13,2.51,24,78,2,1.58,.4,1.4,2.2,1.31,2.72,630 +2,13.05,3.86,2.32,22.5,85,1.65,1.59,.61,1.62,4.8,.84,2.01,515 +2,11.84,.89,2.58,18,94,2.2,2.21,.22,2.35,3.05,.79,3.08,520 +2,12.67,.98,2.24,18,99,2.2,1.94,.3,1.46,2.62,1.23,3.16,450 +2,12.16,1.61,2.31,22.8,90,1.78,1.69,.43,1.56,2.45,1.33,2.26,495 +2,11.65,1.67,2.62,26,88,1.92,1.61,.4,1.34,2.6,1.36,3.21,562 +2,11.64,2.06,2.46,21.6,84,1.95,1.69,.48,1.35,2.8,1,2.75,680 +2,12.08,1.33,2.3,23.6,70,2.2,1.59,.42,1.38,1.74,1.07,3.21,625 +2,12.08,1.83,2.32,18.5,81,1.6,1.5,.52,1.64,2.4,1.08,2.27,480 +2,12,1.51,2.42,22,86,1.45,1.25,.5,1.63,3.6,1.05,2.65,450 +2,12.69,1.53,2.26,20.7,80,1.38,1.46,.58,1.62,3.05,.96,2.06,495 +2,12.29,2.83,2.22,18,88,2.45,2.25,.25,1.99,2.15,1.15,3.3,290 +2,11.62,1.99,2.28,18,98,3.02,2.26,.17,1.35,3.25,1.16,2.96,345 +2,12.47,1.52,2.2,19,162,2.5,2.27,.32,3.28,2.6,1.16,2.63,937 +2,11.81,2.12,2.74,21.5,134,1.6,.99,.14,1.56,2.5,.95,2.26,625 +2,12.29,1.41,1.98,16,85,2.55,2.5,.29,1.77,2.9,1.23,2.74,428 +2,12.37,1.07,2.1,18.5,88,3.52,3.75,.24,1.95,4.5,1.04,2.77,660 +2,12.29,3.17,2.21,18,88,2.85,2.99,.45,2.81,2.3,1.42,2.83,406 +2,12.08,2.08,1.7,17.5,97,2.23,2.17,.26,1.4,3.3,1.27,2.96,710 +2,12.6,1.34,1.9,18.5,88,1.45,1.36,.29,1.35,2.45,1.04,2.77,562 +2,12.34,2.45,2.46,21,98,2.56,2.11,.34,1.31,2.8,.8,3.38,438 +2,11.82,1.72,1.88,19.5,86,2.5,1.64,.37,1.42,2.06,.94,2.44,415 +2,12.51,1.73,1.98,20.5,85,2.2,1.92,.32,1.48,2.94,1.04,3.57,672 +2,12.42,2.55,2.27,22,90,1.68,1.84,.66,1.42,2.7,.86,3.3,315 +2,12.25,1.73,2.12,19,80,1.65,2.03,.37,1.63,3.4,1,3.17,510 +2,12.72,1.75,2.28,22.5,84,1.38,1.76,.48,1.63,3.3,.88,2.42,488 +2,12.22,1.29,1.94,19,92,2.36,2.04,.39,2.08,2.7,.86,3.02,312 +2,11.61,1.35,2.7,20,94,2.74,2.92,.29,2.49,2.65,.96,3.26,680 +2,11.46,3.74,1.82,19.5,107,3.18,2.58,.24,3.58,2.9,.75,2.81,562 +2,12.52,2.43,2.17,21,88,2.55,2.27,.26,1.22,2,.9,2.78,325 +2,11.76,2.68,2.92,20,103,1.75,2.03,.6,1.05,3.8,1.23,2.5,607 +2,11.41,.74,2.5,21,88,2.48,2.01,.42,1.44,3.08,1.1,2.31,434 +2,12.08,1.39,2.5,22.5,84,2.56,2.29,.43,1.04,2.9,.93,3.19,385 +2,11.03,1.51,2.2,21.5,85,2.46,2.17,.52,2.01,1.9,1.71,2.87,407 +2,11.82,1.47,1.99,20.8,86,1.98,1.6,.3,1.53,1.95,.95,3.33,495 +2,12.42,1.61,2.19,22.5,108,2,2.09,.34,1.61,2.06,1.06,2.96,345 +2,12.77,3.43,1.98,16,80,1.63,1.25,.43,.83,3.4,.7,2.12,372 +2,12,3.43,2,19,87,2,1.64,.37,1.87,1.28,.93,3.05,564 +2,11.45,2.4,2.42,20,96,2.9,2.79,.32,1.83,3.25,.8,3.39,625 +2,11.56,2.05,3.23,28.5,119,3.18,5.08,.47,1.87,6,.93,3.69,465 +2,12.42,4.43,2.73,26.5,102,2.2,2.13,.43,1.71,2.08,.92,3.12,365 +2,13.05,5.8,2.13,21.5,86,2.62,2.65,.3,2.01,2.6,.73,3.1,380 +2,11.87,4.31,2.39,21,82,2.86,3.03,.21,2.91,2.8,.75,3.64,380 +2,12.07,2.16,2.17,21,85,2.6,2.65,.37,1.35,2.76,.86,3.28,378 +2,12.43,1.53,2.29,21.5,86,2.74,3.15,.39,1.77,3.94,.69,2.84,352 +2,11.79,2.13,2.78,28.5,92,2.13,2.24,.58,1.76,3,.97,2.44,466 +2,12.37,1.63,2.3,24.5,88,2.22,2.45,.4,1.9,2.12,.89,2.78,342 +2,12.04,4.3,2.38,22,80,2.1,1.75,.42,1.35,2.6,.79,2.57,580 +3,12.86,1.35,2.32,18,122,1.51,1.25,.21,.94,4.1,.76,1.29,630 +3,12.88,2.99,2.4,20,104,1.3,1.22,.24,.83,5.4,.74,1.42,530 +3,12.81,2.31,2.4,24,98,1.15,1.09,.27,.83,5.7,.66,1.36,560 +3,12.7,3.55,2.36,21.5,106,1.7,1.2,.17,.84,5,.78,1.29,600 +3,12.51,1.24,2.25,17.5,85,2,.58,.6,1.25,5.45,.75,1.51,650 +3,12.6,2.46,2.2,18.5,94,1.62,.66,.63,.94,7.1,.73,1.58,695 +3,12.25,4.72,2.54,21,89,1.38,.47,.53,.8,3.85,.75,1.27,720 +3,12.53,5.51,2.64,25,96,1.79,.6,.63,1.1,5,.82,1.69,515 +3,13.49,3.59,2.19,19.5,88,1.62,.48,.58,.88,5.7,.81,1.82,580 +3,12.84,2.96,2.61,24,101,2.32,.6,.53,.81,4.92,.89,2.15,590 +3,12.93,2.81,2.7,21,96,1.54,.5,.53,.75,4.6,.77,2.31,600 +3,13.36,2.56,2.35,20,89,1.4,.5,.37,.64,5.6,.7,2.47,780 +3,13.52,3.17,2.72,23.5,97,1.55,.52,.5,.55,4.35,.89,2.06,520 +3,13.62,4.95,2.35,20,92,2,.8,.47,1.02,4.4,.91,2.05,550 +3,12.25,3.88,2.2,18.5,112,1.38,.78,.29,1.14,8.21,.65,2,855 +3,13.16,3.57,2.15,21,102,1.5,.55,.43,1.3,4,.6,1.68,830 +3,13.88,5.04,2.23,20,80,.98,.34,.4,.68,4.9,.58,1.33,415 +3,12.87,4.61,2.48,21.5,86,1.7,.65,.47,.86,7.65,.54,1.86,625 +3,13.32,3.24,2.38,21.5,92,1.93,.76,.45,1.25,8.42,.55,1.62,650 +3,13.08,3.9,2.36,21.5,113,1.41,1.39,.34,1.14,9.40,.57,1.33,550 +3,13.5,3.12,2.62,24,123,1.4,1.57,.22,1.25,8.60,.59,1.3,500 +3,12.79,2.67,2.48,22,112,1.48,1.36,.24,1.26,10.8,.48,1.47,480 +3,13.11,1.9,2.75,25.5,116,2.2,1.28,.26,1.56,7.1,.61,1.33,425 +3,13.23,3.3,2.28,18.5,98,1.8,.83,.61,1.87,10.52,.56,1.51,675 +3,12.58,1.29,2.1,20,103,1.48,.58,.53,1.4,7.6,.58,1.55,640 +3,13.17,5.19,2.32,22,93,1.74,.63,.61,1.55,7.9,.6,1.48,725 +3,13.84,4.12,2.38,19.5,89,1.8,.83,.48,1.56,9.01,.57,1.64,480 +3,12.45,3.03,2.64,27,97,1.9,.58,.63,1.14,7.5,.67,1.73,880 +3,14.34,1.68,2.7,25,98,2.8,1.31,.53,2.7,13,.57,1.96,660 +3,13.48,1.67,2.64,22.5,89,2.6,1.1,.52,2.29,11.75,.57,1.78,620 +3,12.36,3.83,2.38,21,88,2.3,.92,.5,1.04,7.65,.56,1.58,520 +3,13.69,3.26,2.54,20,107,1.83,.56,.5,.8,5.88,.96,1.82,680 +3,12.85,3.27,2.58,22,106,1.65,.6,.6,.96,5.58,.87,2.11,570 +3,12.96,3.45,2.35,18.5,106,1.39,.7,.4,.94,5.28,.68,1.75,675 +3,13.78,2.76,2.3,22,90,1.35,.68,.41,1.03,9.58,.7,1.68,615 +3,13.73,4.36,2.26,22.5,88,1.28,.47,.52,1.15,6.62,.78,1.75,520 +3,13.45,3.7,2.6,23,111,1.7,.92,.43,1.46,10.68,.85,1.56,695 +3,12.82,3.37,2.3,19.5,88,1.48,.66,.4,.97,10.26,.72,1.75,685 +3,13.58,2.58,2.69,24.5,105,1.55,.84,.39,1.54,8.66,.74,1.8,750 +3,13.4,4.6,2.86,25,112,1.98,.96,.27,1.11,8.5,.67,1.92,630 +3,12.2,3.03,2.32,19,96,1.25,.49,.4,.73,5.5,.66,1.83,510 +3,12.77,2.39,2.28,19.5,86,1.39,.51,.48,.64,9.899999,.57,1.63,470 +3,14.16,2.51,2.48,20,91,1.68,.7,.44,1.24,9.7,.62,1.71,660 +3,13.71,5.65,2.45,20.5,95,1.68,.61,.52,1.06,7.7,.64,1.74,740 +3,13.4,3.91,2.48,23,102,1.8,.75,.43,1.41,7.3,.7,1.56,750 +3,13.27,4.28,2.26,20,120,1.59,.69,.43,1.35,10.2,.59,1.56,835 +3,13.17,2.59,2.37,20,120,1.65,.68,.53,1.46,9.3,.6,1.62,840 +3,14.13,4.1,2.74,24.5,96,2.05,.76,.56,1.35,9.2,.61,1.6,560 diff --git a/notebooks/week-3/mnist_loader.py b/notebooks/week-3/mnist_loader.py new file mode 100644 index 0000000..6ba9ab2 --- /dev/null +++ b/notebooks/week-3/mnist_loader.py @@ -0,0 +1,85 @@ +""" +mnist_loader +~~~~~~~~~~~~ + +A library to load the MNIST image data. For details of the data +structures that are returned, see the doc strings for ``load_data`` +and ``load_data_wrapper``. In practice, ``load_data_wrapper`` is the +function usually called by our neural network code. +""" + +#### Libraries +# Standard library +import cPickle +import gzip + +# Third-party libraries +import numpy as np + +def load_data(): + """Return the MNIST data as a tuple containing the training data, + the validation data, and the test data. + + The ``training_data`` is returned as a tuple with two entries. + The first entry contains the actual training images. This is a + numpy ndarray with 50,000 entries. Each entry is, in turn, a + numpy ndarray with 784 values, representing the 28 * 28 = 784 + pixels in a single MNIST image. + + The second entry in the ``training_data`` tuple is a numpy ndarray + containing 50,000 entries. Those entries are just the digit + values (0...9) for the corresponding images contained in the first + entry of the tuple. + + The ``validation_data`` and ``test_data`` are similar, except + each contains only 10,000 images. + + This is a nice data format, but for use in neural networks it's + helpful to modify the format of the ``training_data`` a little. + That's done in the wrapper function ``load_data_wrapper()``, see + below. + """ + f = gzip.open('./data/mnist.pkl.gz', 'rb') + training_data, validation_data, test_data = cPickle.load(f) + f.close() + return (training_data, validation_data, test_data) + +def load_data_wrapper(): + """Return a tuple containing ``(training_data, validation_data, + test_data)``. Based on ``load_data``, but the format is more + convenient for use in our implementation of neural networks. + + In particular, ``training_data`` is a list containing 50,000 + 2-tuples ``(x, y)``. ``x`` is a 784-dimensional numpy.ndarray + containing the input image. ``y`` is a 10-dimensional + numpy.ndarray representing the unit vector corresponding to the + correct digit for ``x``. + + ``validation_data`` and ``test_data`` are lists containing 10,000 + 2-tuples ``(x, y)``. In each case, ``x`` is a 784-dimensional + numpy.ndarry containing the input image, and ``y`` is the + corresponding classification, i.e., the digit values (integers) + corresponding to ``x``. + + Obviously, this means we're using slightly different formats for + the training data and the validation / test data. These formats + turn out to be the most convenient for use in our neural network + code.""" + tr_d, va_d, te_d = load_data() + training_inputs = [np.reshape(x, (784, 1)) for x in tr_d[0]] + training_results = [vectorized_result(y) for y in tr_d[1]] + training_data = zip(training_inputs, training_results) + validation_inputs = [np.reshape(x, (784, 1)) for x in va_d[0]] + validation_data = zip(validation_inputs, va_d[1]) + test_inputs = [np.reshape(x, (784, 1)) for x in te_d[0]] + test_data = zip(test_inputs, te_d[1]) + return (training_data, validation_data, test_data) + +def vectorized_result(j): + """Return a 10-dimensional unit vector with a 1.0 in the jth + position and zeroes elsewhere. This is used to convert a digit + (0...9) into a corresponding desired output from the neural + network.""" + e = np.zeros((10, 1)) + e[j] = 1.0 + return e diff --git a/notebooks/week-4/01-tensorflow ANN for regression as.ipynb b/notebooks/week-4/01-tensorflow ANN for regression as.ipynb new file mode 100644 index 0000000..2b54e21 --- /dev/null +++ b/notebooks/week-4/01-tensorflow ANN for regression as.ipynb @@ -0,0 +1,712 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Lab 4 - Tensorflow ANN for regression\n", + "\n", + "In this lab we will use Tensorflow to build an Artificial Neuron Network (ANN) for a regression task.\n", + "\n", + "As opposed to the low-level implementation from the previous week, here we will use Tensorflow to automate many of the computation tasks in the neural network. [Tensorflow](https://www.tensorflow.org/) is a higher-level open-source machine learning library [released by Google last year](https://googleblog.blogspot.com/2015/11/tensorflow-smarter-machine-learning-for.html) which is made specifically to optimize and speed up the development and training of neural networks. \n", + "\n", + "At its core, Tensorflow is very similar to numpy and other numerical computation libraries. Like numpy, it's main function is to do very fast computation on multi-dimensional datasets (such as computing the dot product between a vector of input values and a matrix of values representing the weights in a fully connected network). While numpy refers to such multi-dimensional data sets as 'arrays', Tensorflow calls them 'tensors', but fundamentally they are the same thing. The two main advantages of Tensorflow over custom low-level solutions are:\n", + "\n", + "- While it has a Python interface, much of the low-level computation is implemented in C/C++, making it run much faster than a native Python solution.\n", + "- Many common aspects of neural networks such as computation of various losses and a variety of modern optimization techniques are implemented as built in methods, reducing their implementation to a single line of code. This also helps in development and testing of various solutions, as you can easily swap in and try various solutions without having to write all the code by hand.\n", + "\n", + "You can get more details about various popular machine learning libraries in [this comparison](http://deeplearning4j.org/compare-dl4j-torch7-pylearn.html).\n", + "\n", + "To test our basic network, we will use the [Boston Housing Dataset](https://archive.ics.uci.edu/ml/datasets/Housing), which represents data on 506 houses in Boston across 14 different features. One of the features is the median value of the house in $1000’s. This is a common data set for testing regression performance of machine learning algorithms. All 14 features are continuous values, making them easy to plug directly into a neural network (after normalizing ofcourse!). The common goal is to predict the median house value using the other columns as features.\n", + "\n", + "This lab will conclude with two assignments:\n", + "\n", + "- Assignment 1 (at bottom of this notebook) asks you to experiment with various regularization parameters to reduce overfitting and improve the results of the model.\n", + "- Assignment 2 (in the next notebook) asks you to take our regression problem and convert it to a classification problem." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's start by importing some of the libraries we will use for this tutorial:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "import math\n", + "import random\n", + "\n", + "import seaborn as sns\n", + "import matplotlib.pyplot as plt\n", + "import pandas as pd\n", + "from sklearn.datasets import load_boston\n", + "\n", + "import numpy as np\n", + "import tensorflow as tf\n", + "\n", + "sns.set(style=\"ticks\", color_codes=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, let's import the Boston housing prices dataset. This is included with the scikit-learn library, so we can import it directly from there. The data will come in as two numpy arrays, one with all the features, and one with the target (price). We will use pandas to convert this data to a DataFrame so we can visualize it. We will then print the first 5 entries of the dataset to see the kind of data we will be working with." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " CRIM ZN INDUS CHAS NOX RM AGE DIS RAD TAX \\\n", + "0 0.00632 18.0 2.31 0.0 0.538 6.575 65.2 4.0900 1.0 296.0 \n", + "1 0.02731 0.0 7.07 0.0 0.469 6.421 78.9 4.9671 2.0 242.0 \n", + "2 0.02729 0.0 7.07 0.0 0.469 7.185 61.1 4.9671 2.0 242.0 \n", + "3 0.03237 0.0 2.18 0.0 0.458 6.998 45.8 6.0622 3.0 222.0 \n", + "4 0.06905 0.0 2.18 0.0 0.458 7.147 54.2 6.0622 3.0 222.0 \n", + "\n", + " PTRATIO B LSTAT target \n", + "0 15.3 396.90 4.98 24.0 \n", + "1 17.8 396.90 9.14 21.6 \n", + "2 17.8 392.83 4.03 34.7 \n", + "3 18.7 394.63 2.94 33.4 \n", + "4 18.7 396.90 5.33 36.2 \n" + ] + } + ], + "source": [ + "#load data from scikit-learn library\n", + "dataset = load_boston()\n", + "\n", + "#load data as DataFrame\n", + "houses = pd.DataFrame(dataset.data, columns=dataset.feature_names)\n", + "#add target data to DataFrame\n", + "houses['target'] = dataset.target\n", + "\n", + "#print first 5 entries of data\n", + "print houses.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can see that the dataset contains only continuous features, which we can feed directly into the neural network for training. The target is also a continuous variable, so we can use regression to try to predict the exact value of the target. You can see more information about this dataset by printing the 'DESCR' object stored in the data set." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Boston House Prices dataset\n", + "===========================\n", + "\n", + "Notes\n", + "------\n", + "Data Set Characteristics: \n", + "\n", + " :Number of Instances: 506 \n", + "\n", + " :Number of Attributes: 13 numeric/categorical predictive\n", + " \n", + " :Median Value (attribute 14) is usually the target\n", + "\n", + " :Attribute Information (in order):\n", + " - CRIM per capita crime rate by town\n", + " - ZN proportion of residential land zoned for lots over 25,000 sq.ft.\n", + " - INDUS proportion of non-retail business acres per town\n", + " - CHAS Charles River dummy variable (= 1 if tract bounds river; 0 otherwise)\n", + " - NOX nitric oxides concentration (parts per 10 million)\n", + " - RM average number of rooms per dwelling\n", + " - AGE proportion of owner-occupied units built prior to 1940\n", + " - DIS weighted distances to five Boston employment centres\n", + " - RAD index of accessibility to radial highways\n", + " - TAX full-value property-tax rate per $10,000\n", + " - PTRATIO pupil-teacher ratio by town\n", + " - B 1000(Bk - 0.63)^2 where Bk is the proportion of blacks by town\n", + " - LSTAT % lower status of the population\n", + " - MEDV Median value of owner-occupied homes in $1000's\n", + "\n", + " :Missing Attribute Values: None\n", + "\n", + " :Creator: Harrison, D. and Rubinfeld, D.L.\n", + "\n", + "This is a copy of UCI ML housing dataset.\n", + "http://archive.ics.uci.edu/ml/datasets/Housing\n", + "\n", + "\n", + "This dataset was taken from the StatLib library which is maintained at Carnegie Mellon University.\n", + "\n", + "The Boston house-price data of Harrison, D. and Rubinfeld, D.L. 'Hedonic\n", + "prices and the demand for clean air', J. Environ. Economics & Management,\n", + "vol.5, 81-102, 1978. Used in Belsley, Kuh & Welsch, 'Regression diagnostics\n", + "...', Wiley, 1980. N.B. Various transformations are used in the table on\n", + "pages 244-261 of the latter.\n", + "\n", + "The Boston house-price data has been used in many machine learning papers that address regression\n", + "problems. \n", + " \n", + "**References**\n", + "\n", + " - Belsley, Kuh & Welsch, 'Regression diagnostics: Identifying Influential Data and Sources of Collinearity', Wiley, 1980. 244-261.\n", + " - Quinlan,R. (1993). Combining Instance-Based and Model-Based Learning. In Proceedings on the Tenth International Conference of Machine Learning, 236-243, University of Massachusetts, Amherst. Morgan Kaufmann.\n", + " - many more! (see http://archive.ics.uci.edu/ml/datasets/Housing)\n", + "\n" + ] + } + ], + "source": [ + "print dataset['DESCR']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, we will do some exploratory data visualization to get a general sense of the data and how the different features are related to each other and to the target we will try to predict. First, let's plot the correlations between each feature. Larger positive or negative correlation values indicate that the two features are related (large positive or negative correlation), while values closer to zero indicate that the features are not related (no correlation)." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nXiYmqSD+pMwcvt0YQUsbn1krrT+PxzGqcyiuKhnBnmoGtwrmj2MlvxfRp2lAkTaTl51kwOw9DJ6z\nj8Fz9pGcpWPq8n/YcDyu3LHdSSKVYq9QILWTYiezx14ur7TPoApVX4Vngp999lneffdd+vTpg06n\nY/PmzZw/f54JEyYgkUjo06cPTz31FPv27bvrsmbNmsWUKVMYMWIEnp6eTJgwgaioKBSKwkeOCxYs\nYO7cuUyePJm0tDS8vLxo3rw5np4FpQI9evRg+/btjBw5kuzs7Ar9RFrDrn3JSLzB4onPYieT0aLv\nMMsb19mpSfwy+QVGzFyAk7sX6fHX2ff79+g0uTg4OlOrZUfaDi58iWnXz/NIi7uGvUJB3fbdaTt4\nVJlimTSwPe+t2E2n6YvxdXVk1lPdcVYq2HQikh/3nGDVG48DsO/8Vb7e/Bf5RhO+bo682acN7cML\nTq7Vvd2YNLAD45dsISdPT5Nqvnz4eNlrFwEOxqThqZYzqVst8k0mdkamWL7w4OogY2LXGny2K5LM\nvHxy9IWZfI3eiMlsJvfmuKiUXHZHpfB862qo5HakafT8fCy22Eedtrw3bjSTPv+OtkOfx9fLgzmT\nX8fZUc2G3QdYuHw96+cX1EP+sXM/U+Z8z63z7YbdEbz81GBefmowYx/vz8f/W0zf598iP99IvZrV\n+fCN58u1bcI79SY7+Qar338eO3sZDXoOtXweLSctmXUzXmbQB9+hdvNE6Vz4RQ2F2gmJVIrDzVpy\nkzGfv1YsJDs5Hqm9PZ4hNenxyjSkdmW/abkles5cak6ZQquNG9AlJXHx/fcx5uTg2f0RAp9+mpPP\njLK09erRg/S//iI/+/69xd2oWz8yEm/w49ujsZPJaNn3Catjasmk53nm04U4uXuRFh/Lnt/mo9Pk\norx5TLW7eUwF121M80eHsGb2ZPJys3Hx8qXPK1OsavjvZuqzQ5j83VLaPTcZXw9Xvhg/Gme1ig0R\nx/hh/Q7WzX4XgHkrNyO3t6f7q9Ms3wL+YOww+rRrxtkrsbwz72eyNXl4ODvSv2MLRpWjHriqbRuA\n0La9yE2JZ9vMl5Hay6jd7TG8ahTcJGjSU9gx6zUeeedrVK6eODgV7sdylSMSqRSFo4vV8mKPR9Bw\n4GjKY9/lVLwcFczoFY7BZGbrhSQib34ezU0p470etS3fAq7j48ioFkHI7aRkaA1svZBk9RTrtQ5h\n1PQqeKL2aoeCFzhaVJkAACAASURBVJ+nbjpvKbW4m8lDuvHe0i10nPwtvq5OzBrdF2eVA5uOnWfR\njiOsfrfg97Dv7GW++nP/zXOxMxMGdKJ93ZtZ/qxcPlu9i7QcDY4OCjrUrc74cn4eDWD5wasEe6jZ\n+G4XDPkmftgVbfk8mq+LA+ve7sSA2XtJvPlyYYswD+QyKfsvJFktJ1eXT+5tD/TyTSayNIZiS93K\no/fUV+nzweuWT2Y8OnkcS0a/zV+/rLlv66jKRE1w2UjMJRUK/sskJCTQuXNnFi9eTOvWrSs7HL47\nHFPZIViMSlhb2SFYmSKxnYGqLLMblv4JwIM2O+be69Xvpw7vle8FvgfhzBe/VnYIVsbIz1d2CBaL\n9HUqOwQrMWX8IxEPWkYpO6EVYa5j8V8BqgzNd9guF6wM7b8o+7fTH6T55pjKDqFMnDq+9cDXkb3v\n8we+jopS6S/G3YvDhw+j0WioVasWSUlJzJ49m6CgIFq0aFHZoQmCIAiCIAhV2L+6E5yfn8/cuXO5\nfv06arWapk2bMmfOHOzu4XGuIAiCIAjCv5FJlEOUyb+6E9y+fXva3+WvUQmCIAiCIAjCnf7VnWBB\nEARBEAShgLmcn3x9WFX4J9IEQRAEQRAEobKJTLAgCIIgCMJ/gPhEWtmITLAgCIIgCILw0BGZYEEQ\nBEEQhP8AkQkuG5EJFgRBEARBEB46IhMsCIIgCILwHyAywWUjMsGCIAiCIAjCQ0dkggVBEARBEP4D\nRCa4bEQmWBAEQRAEQXjoSMxms7mygxCKl5SUxPLlyxk2bBje3t6VHU6ViqcqxVLV4qlKsYh4/j2x\nVLV4qlIsVS2eqhSLiEf4txKZ4CouOTmZefPmkZycXNmhAFUrnqoUC1SteKpSLCDi+bfEAlUrnqoU\nC1SteKpSLCDiEf6dRCdYEARBEARBeOiITrAgCIIgCILw0BGdYEEQBEEQBOGhIzrBgiAIgiAIwkNH\ndIIFQRAEQRCEh47oBAuCIAiCIAgPHbtp06ZNq+wghJKp1WpatmyJWq2u7FCAqhVPVYoFqlY8VSkW\nEPH8W2KBqhVPVYoFqlY8VSkWEPEI/z7ij2UIgiAIgiAIDx1RDiEIgiAIgiA8dEQnWBAEQRAEQXjo\niE6wIAiCIAiC8NARnWBBEARBEAThoSM6wYIgCIIgCMJDR3SCBUEQBEEQhIeO6AQLgiAIgiAIDx3R\nCRYEQRAEQRAeOqITLAiCIAiCIDx0RCdYEARBqFTz5s3DaDQWOz0xMZGxY8dWYESCIDwMRCdYEMoh\nPz8fvV5vNS4lJYV58+Yxa9Ysjh07VkmRCWVhNptJTU2t7DAeeitWrODxxx8nOjq6yLSVK1fSp0+f\nEjvJgrBu3boi52QAvV7PunXrKiEi4d9AYjabzZUdhFCgTp06pWp3/vz5BxxJQWamNF555ZUHHMnd\nxcXFodVqCQ0NRSqtmPu6SZMmIZPJmDFjBgA5OTn07dsXnU6Hl5cX0dHR/O9//6NTp04VEk9pZGRk\n4OrqWtlhVKhGjRqxe/du3N3dAXj++ef56KOP8Pb2BgpuXDp06FAhx9QtaWlpaLVaAgICLOMiIyP5\n8ccf0Wg0PPLII/Tr16/C4qkKsrKymD59Otu3b+e1115jzJgxJCUlMXnyZE6cOMGbb77JU089VSmx\nJScns23bNmJiYgCoXr063bt3x8vLq1LiSU9Px83NDYD4+HhWrFhBXl4e3bp1o3nz5hUSw53HVVVQ\np04dIiIi8PDwsBqfnp5O27ZtK/QYF/497Cs7AKGQ2WzG39+fQYMGlbpD/KDs2LGj2GkSiYQrV66g\n0+kqtBO8atUqsrOzGT16tGXce++9x6pVq4CCi9OiRYvw8/N74LEcP36c9957zzK8fv16jEYj27Zt\nw8nJidmzZ/PDDz9UWCd4xIgRzJw5k8DAQJvTt23bxowZM4iIiHjgsRw9erRU7Vq0aPGAIwGdTsft\n9/lHjx5Fp9NZtanoPMCtTvi7774LQGpqKk899RTe3t4EBQUxadIkjEYjAwcOrJB4NBoNCxcuZPv2\n7cTFxQEQGBhIz549GTNmDEql8oHH4OzszBdffMHWrVuZNm0amzZtIjY2lvDwcNavX09QUNADj8GW\nZcuWMXPmTHQ6nWU7aLVaPvvsMyZPnsywYcMqLJaLFy/y0ksvER8fT0hICHPnzmXs2LFoNBokEglL\nlizh66+/5pFHHnngsdx5XFUFZrMZiURSZHxiYiJOTk6VEJHwbyA6wVXIypUrWbVqFT///DOBgYEM\nHjyYfv364eLiUuGxFPf46Pz583z++edERkYydOjQCo1pxYoVVhedffv2sWbNGj777DPCwsL48MMP\nmTdvHh9//PEDjyUxMZGQkBDL8KFDh+jZs6flZDto0CDWrFnzwOO4Ra1W079/fyZOnMgTTzxhGZ+R\nkcH06dPZuXMn48aNq5BYRowYYbkYFXehlEgkVSYzY+vC+SCdPHmSTz/91DK8bt06XFxcWLduHfb2\n9ixatIjffvutQjrBer2ep59+msjISDp27EiXLl0wm81ER0czf/589u/fz6+//opMJnvgsUDBjVHd\nunU5cOAASqWS119/vdI6wHv37mXGjBk89dRTPPvss5ab6/j4eBYtWsSMGTPw8/OjY8eOFRLP7Nmz\nqVWrFrNnz2b9+vW88MILdOrUiY8++giADz/8kAULFlRIJ7gqGThwIBKJBIlEwjPPPIO9fWG3xmg0\ncv36dTp06FCJEQpVmegEVyENGjSgQYMGTJ48mS1btrBmzRo+//xzunTpwpAhQ2jXrl2lxRYbG8tX\nX33F5s2b6d69Oxs2bKBatWoVGsPVq1epX7++ZXjnzp1069aN/v37A/DGG28wadKkColFoVBYZRRP\nnjzJxIkTraZrNJoKiQVg/vz5rFq1ik8//ZTt27fz8ccfc/r0aaZNm4aPjw+rVq2iVq1aFRKLi4sL\narWaQYMGMWDAAMujW6FASkqKVSnE4cOH6d69u+Xi3bVrVxYsWFAhsfz+++8kJiayfv16QkNDraZF\nR0czcuRIli1bxogRIx54LJs3b2b69OnUrFmTDRs2sHLlSkaNGsWIESN44403kMvlDzyG2/3www+M\nHTuWCRMmWI338/Nj6tSpKJVKFi5cWGGd4NOnT7NkyRLCw8MJDw9nxYoVDB8+3FIC9vTTT1doZnr9\n+vWo1eoS21REPLc6/efPn6d9+/ZWMclkMgICAujRo8cDj0P4dxKd4CpIoVAwYMAABgwYQGxsLFOm\nTGHs2LEcOnSowms609LS+Pbbb1m+fDnNmjXj999/p2HDhhUawy15eXk4Ojpahk+cOMGQIUMsw0FB\nQaSkpFRILLce07755pscO3aM1NRUWrdubZl+7do1S91pRRkyZAht27blnXfeoWfPnphMJl588UVe\nfPFF7OzsKiyO/fv3s2PHDlavXm0pCRk8eDAdO3as8KzrrQzR7cOVzdHRkezsbMvwqVOnrPZjiURi\n8wWfB2H79u28/PLLRTrAAGFhYbz44ots3br1gXeCx48fz549exg/fjzPPPMMEomESZMm0b17dyZP\nnsyePXv47LPPKvTcc/bsWaZNm1bs9IEDB7J06dIKiyczM9NSh6xWq1EqlVZPCV1cXMjNza2weH74\n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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Create a datset of correlations between house features\n", + "corrmat = houses.corr()\n", + "\n", + "# Set up the matplotlib figure\n", + "f, ax = plt.subplots(figsize=(9, 6))\n", + "\n", + "# Draw the heatmap using seaborn\n", + "sns.set_context(\"notebook\", font_scale=0.7, rc={\"lines.linewidth\": 1.5})\n", + "sns.heatmap(corrmat, annot=True, square=True)\n", + "f.tight_layout()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can get a more detailed picture of the relationship between any two variables in the dataset by using seaborn's `jointplot` function and passing it two features of our data. This will show a single-dimension histogram distribution for each feature, as well as a two-dimension density scatter plot for how the two features are related. From the correlation matrix above, we can see that the `RM` feature has a strong positive correlation to the target, while the `LSTAT` feature has a strong negative correlation to the target. Let's create `jointplots` for both sets of features to see how they relate in more detail:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n1lprf/nLX9otW7bYEydO2DiO7b333mvfeecda621x48ft6Ojo/PPs3v37lX/nQCgnfysgxmAbLz+\n+uv6/ve/r2q1qmazqQ984APz923ZskXXXXedJKlSqejEiRO6/fbbJUl33HGHyuWyJOno0aN66623\n9NBDD8mmk8/GGJ06darDvw0AtAfBCBggc+Gl2Wxq7969OnDggDZu3KhDhw7pBz/4wfzPFYvFJT/f\nNddcwyZrAH2DzdfAACmVSqpWq2o0GrLW6vLLL5cxRj/60Y8u+Zirr75ar7zyiiRpYmJC09PTkqRN\nmzYpiqL5+yTpjTfemH9cpVJZxd8GANqPYAQMkD179ujee+/VJz/5ST344IPavn27Pv7xj+vaa6+9\n5OO+8Y1v6IknntDdd9+t3/72t1q3bp3K5bJ839d3v/tdPfPMM9q5c6fuuusuPfvss5KkzZs3a926\nddqxY4e++tWvduLXA4CW8a00AIuamZmZX1577bXX9Oijj+oXv/hFxlUBQPuxxwjAol599VV95zvf\nkbVW+Xxe4+PjWZcEAKuCGSMAAIAUe4wAAABSBCMAAIAUwQgAACBFMAIAAEgRjAAAAFIEIwAAgBTB\nCAAAIEUwAgAASP0/SIcBFuu07esAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n3vcTbFq/FitWrJjrKS14S6LSREREtBQJw0AuV5jraSwaDE1ERERECTA0ERERESXA0ERERESUAEMT\nERERUQIMTUREREQJMDQdwbUNFLI2TEOkOm7WNWFZC2+5hQBacjbclOfuWgY8xwTvF01ERAvFkrhO\nUz2EELBMgULWRhgpVBq8ZpNlCmRdC6a58AITUFsPIQQynoAtFcp+jEZyjhC161VZpgEh0g2mRERE\nzcTQNAkhBFzHhGUKVMMYUVx/Ush5FmxrcYQDIQRsy0RL1kAQSfihrHsMzzHh2iaMlKt4RNR8/f39\n+NjHPobu7m6cfPLJ+NKXvgTHcca85q677sKePXsghEC1WkVfXx9++ctfjj7f09OD9773vfjEJz6B\nD33oQ7P9I+DDH/4went74bouhBDYtWvXuJ/h3nvvxb//+79j//79eOqpp5DJZOr6Ht/5znfwr//6\nrwCAk046CZ///Odh2zaee+45fO5zn0MYhshms/jCF76A1atXp/az0exYmOWPWWSaBnKejXzGQtJD\nvW0ZaMnZcGxzUQSmwxmGgOeYKGTtxOHHMGqVO89hYCKajFJqXo/5b//2b9i4cSMeeeQRrFq1Cvfe\ne++411x11VXYvXs3HnjgAVx11VU4//zzxzz/j//4jzjnnHNSm9NM7NixY3SORwYmADjjjDPwjW98\nA0cfffSMxt+2bRu++c1vYs+ePdBa4wc/+AEA4Ktf/Squu+467N69G+973/vw9a9/vaGfg+YGK00J\njFRZCjmBIJAI4on/EC2VraexW5gS1WDyqlPWNWHbJoxFvB60tHR1dWHLli044YQT8Pzzz+P000/H\nbbfdBsMw8Mwzz2Dbtm2oVCro7OzEtm3b0NLSgn/6p3/CT37yE/i+j3POOQc33XQTAGDDhg248MIL\n8cQTT+CGG27AT3/6Uzz22GPwPA8bN27E3/7t32Lfvn3YunUrgiDAqaeeiltuuQWO42DDhg24+OKL\n8cMf/hC2beNf/uVf0N7ejptvvhmu6+LZZ5/F+eefj49+9KOp/NyPPfYY7rvvPgDA5s2b8aUvfWnK\natHDDz+MK6+8cvTf9+7di3w+P6668pnPfAZ//dd/jbVr1455/Oabb4bneXj66acRBAG2bt2KM888\ns+GfY7oguWbNGgAY129ZrVZxyy234IUXXoBSCp/85Cdx9tlnTzhGtVpFLpdDpVJBR0cHAMAwDJRK\nJQBAsVgcfZwWFoamOpiGMWlvj2ub8BwDhrF0ineGEHBtE7ZpoOzHkOq1BbEMgaxnwTDEog6QtDS9\n8MIL+PznP49TTz0V119/Pb797W/jr/7qr7Bt2zb88z//M1paWnDffffhzjvvxD/8wz/giiuuwN//\n/d8DAK699lr8+te/xpvf/GYAwKpVq3D//fdjYGAAn/rUp/CjH/0IAEYPsDfddBNuv/12nHbaadi6\ndSt27tw5GkZWrVqF3bt3Y/v27bj33nuxZcsWAMDg4CD+8z//c9y8f/azn+FLX/rSuP8m3/jGN+L2\n22+f8mcul8vI5/MAgJUrV6Knp2fS1/b39+P3v/893v72twMApJTYvn07duzYgXvuuWfMa2+99dZJ\nx+np6cH999+PF198EVdffTUeeeSRMc8PDAzgyiuvnPBvzP333z/h45/4xCdg2zbe9773jQl107nz\nzjtx3nnn4Y477kB/fz8uvfRSfO973xv3us9+9rO48MIL4XkezjrrrNGg98lPfhJXXXUVbr/9dmSz\n2QkrdTT/MTTV6cjenjCSyHm1Ru+lGA6EEDBHqk6xQsWPkfUsOIukl4toIq973etw6qmnAgAuvPBC\n/OhHP8LatWvx3HPP4YorroDWGlJKnHTSSQCAJ554At/4xjcQBAH6+vrwjne8YzQ0bdy4EQBQKBRQ\nKBRw88034/zzz8d5552HYrGIKIpw2mmnAQDe//734xvf+Mbowf6d73wnAGDt2rWjYQsA3vOe90w4\n73PPPRfnnntu+gtyhB/84AfYsGEDTLN2g/JvfvOb2LhxI1paWuoa54ILLgAAnHjiicjlcuju7sbK\nlStHn29tbcXu3bsTj/flL38ZnZ2dKJVK2LJlC17/+tdj3bp1ib72Zz/7GR5//HF87WtfAwAEQYBD\nhw6NuQluHMfYtWsXvvvd76KzsxOf/OQnsWfPHmzatAk7d+7ELbfcgne84x3YuXMn7rjjjikDI81P\nDE0zNNLb4zmLr29pJsRo1UksqWob0cgZpkopnHrqqbj77rvHPB+GIe644w488MADWLFiBbZt24Yw\nDEefH2k0Nk0T9913H5544gl897vfxbe//W3cdtttU16WY6QnxzRNSPnaNvlkzcsjlaYjnXrqqeMq\nTV/5ylfw4x//GMuWLcPdd9+NfD6PUqmEfD6Pnp4edHZ2Tjqvhx56aMy24G9+8xs89dRTuOuuuzA0\n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\nECgUCrjhhhuwadMm1n8BYWgiIiIiMoHTc0REREQmMDQRERERmcDQRERERGQCQxMRERGRCQxNRERE\nRCYwNBERERGZwNBEREREZAJDExEREZEJDE1EhAcffHDe/lZPTw927do1b3+PiMgqDE1EVFZoKhaL\nZf2t7u5uPPbYY2VtS0RUTbyNCtEn3E9+8hNs374dK1asgKZpuPLKK/Hss88il8uhvr4e9913H7xe\nL/bt24df/OIXaG5uxsGDB3H//fdDkiR8//vfRy6Xw5o1a7Bnzx5s374djY2NOHToEO69915Eo1FI\nkoStW7fivPPOwzXXXIPu7m60tLTgvPPOww9+8INql4CIyBSGJiLCihUrcODAAQBAJBKBx+MBAPz+\n97/H0NAQ7rzzTuzbtw+bN2/GY489hvb2dgDAtddeizvuuAOXX345nnvuOXzrW9/C7t27UVdXhxtv\nvBG/+tWvUF9fj56eHtx8883YvXs39u3bhwcffBB//OMfq/b/EhGVQ6l2B4hoYXnttdfw29/+FolE\nAtlsFosXLy79rqOjoxSY4vE4enp6cPnllwMArrzySrjdbgDAkSNHcOjQIdx22204cVxWKBQwMjIy\nz/8NEZF1GJqIqBRsstkstm7dip07d6KlpQV79uzBH/7wh9LzHA6H6faampq44JuITitcCE5EcLlc\nSCQSyGQyMAwDwWAQhUIBf/rTn6bdZtGiRXjhhRcAALt370YsFgMAtLa2IpfLlX4HAPv37y9tF4/H\n5/C/ISKaGwxNRIRbbrkFX/7yl/GNb3wDmzdvxvr16/HVr34VbW1t0273s5/9DA888ACuueYavPji\niwgEAnC73VAUBb/+9a+xbds2bNy4EVdffTUefvhhAMDy5csRCASwYcMG/PjHP56Pf4+IyBJcCE5E\nZUsmk6Upu1deeQX33HMPnn766Sr3iohobnBNExGV7eWXX8Yvf/lLGIYBm82G++67r9pdIiKaMxxp\nIiIiIjKBa5qIiIiITGBoIiIiIjKBoYmIiIjIBIYmIiIiIhMYmoiIiIhMYGgiIiIiMoGhiYiIiMgE\nhiYiIiIiE/4/uaZc8TIBg+gAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "sns.jointplot(houses['target'], houses['RM'], kind='hex')\n", + "sns.jointplot(houses['target'], houses['LSTAT'], kind='hex')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As expected, the plots show a positive relationship between the `RM` feature and the target, and a negative relationship between the `LSTAT` feature and the target.\n", + "\n", + "This type of exploratory visualization is not strictly necessary for using machine learning, but it does help to formulate your solution, and to troubleshoot your implementation incase you are not getting the results you want. For example, if you find that two features have a strong correlation with each other, you might want to include only one of them to speed up the training process. Similarly, you may want to exclude features that show little correlation to the target, since they have little influence over its value.\n", + "\n", + "Now that we know a little bit about the data, let's prepare it for training with our neural network. We will follow a process similar to the previous lab:\n", + "\n", + "- We will first re-split the data into a feature set (X) and a target set (y)\n", + "- Then we will normalize the feature set so that the values range from 0 to 1\n", + "- Finally, we will split both data sets into a training and test set." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "('Training set', (354, 13), (354,))\n", + "('Test set', (152, 13), (152,))\n" + ] + } + ], + "source": [ + "# convert housing data to numpy format\n", + "houses_array = houses.as_matrix().astype(float)\n", + "\n", + "# split data into feature and target sets\n", + "X = houses_array[:, :-1]\n", + "y = houses_array[:, -1]\n", + "\n", + "# normalize the data per feature by dividing by the maximum value in each column\n", + "X = X / X.max(axis=0)\n", + "\n", + "# split data into training and test sets\n", + "trainingSplit = int(.7 * houses_array.shape[0])\n", + "\n", + "X_train = X[:trainingSplit]\n", + "y_train = y[:trainingSplit]\n", + "X_test = X[trainingSplit:]\n", + "y_test = y[trainingSplit:]\n", + "\n", + "print('Training set', X_train.shape, y_train.shape)\n", + "print('Test set', X_test.shape, y_test.shape)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, we set up some variables that we will use to define our model. The first group are helper variables taken from the dataset which specify the number of samples in our training set, the number of features, and the number of outputs. The second group are the actual hyper-parameters which define how the model is structured and how it performs. In this case we will be building a neural network with two hidden layers, and the size of each hidden layer is controlled by a hyper-parameter. The other hyper-parameters include:\n", + "\n", + "- `batch size`, which sets how many training samples are used at a time\n", + "- `learning rate` which controls how quickly the gradient descent algorithm works\n", + "- `training epochs` which sets how many rounds of training occurs\n", + "- `dropout keep probability`, a regularization technique which controls how many neurons are 'dropped' randomly during each training step (note in Tensorflow this is specified as the 'keep probability' from 0 to 1, with 0 representing all neurons dropped, and 1 representing all neurons kept). You can read more about dropout [here](http://neuralnetworksanddeeplearning.com/chap3.html#other_techniques_for_regularization)." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# helper variables\n", + "num_samples = X_train.shape[0]\n", + "num_features = X_train.shape[1]\n", + "num_outputs = 1\n", + "\n", + "# Hyper-parameters\n", + "batch_size = 50\n", + "num_hidden_1 = 16\n", + "num_hidden_2 = 16\n", + "learning_rate = 0.0001\n", + "training_epochs = 200\n", + "dropout_keep_prob = 1.0 # set to no dropout by default\n", + "\n", + "# variable to control the resolution at which the training results are stored\n", + "display_step = 1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, we define a few helper functions which will dictate how error will be measured for our model, and how the weights and biases should be defined.\n", + "\n", + "The `accuracy()` function defines how we want to measure error in a regression problem. The function will take in two lists of values - `predictions` which represent predicted values, and `targets` which represent actual target values. In this case we simply compute the absolute difference between the two (the error) and return the average error using numpy's `mean()` fucntion.\n", + "\n", + "The `weight_variable()` and `bias_variable()` functions help create parameter variables for our neural network model, formatted in the proper type for Tensorflow. Both functions take in a shape parameter and return a variable of that shape using the specified initialization. In this case we are using a 'truncated normal' distribution for the weights, and a constant value for the bias. For more information about various ways to initialize parameters in Tensorflow you can consult the [documentation](https://www.tensorflow.org/versions/r0.11/api_docs/python/constant_op.html)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def accuracy(predictions, targets):\n", + " error = np.absolute(predictions.reshape(-1) - targets)\n", + " return np.mean(error)\n", + "\n", + "def weight_variable(shape):\n", + " initial = tf.truncated_normal(shape, stddev=0.1)\n", + " return tf.Variable(initial)\n", + "\n", + "def bias_variable(shape):\n", + " initial = tf.constant(0.1, shape=shape)\n", + " return tf.Variable(initial)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we are ready to build our neural network model in Tensorflow.\n", + "\n", + "Tensorflow operates in a slightly different way than the procedural logic we have been using in Python so far. Instead of telling Tensorflow the exact operations to run line by line, we build the entire neural network within a structure called a `Graph`. The Graph does several things:\n", + "\n", + "- describes the architecture of the network, including how many layers it has and how many neurons are in each layer\n", + "- initializes all the parameters of the network\n", + "- describes the 'forward' calculation of the network, or how input data is passed through the network layer by layer until it reaches the result\n", + "- defines the loss function which describes how well the model is performing\n", + "- specifies the optimization function which dictates how the parameters are tuned in order to minimize the loss\n", + "\n", + "Once this graph is defined, we can work with it by 'executing' it on sets of training data and 'calling' different parts of the graph to get back results. Every time the graph is executed, Tensorflow will only do the minimum calculations necessary to generate the requested results. This makes Tensorflow very efficient, and allows us to structure very complex models while only testing and using certain portions at a time. In programming language theory, this type of programming is called ['lazy evaluation'](https://en.wikipedia.org/wiki/Lazy_evaluation)." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "'''First we create a variable to store our graph'''\n", + "graph = tf.Graph()\n", + "\n", + "'''Next we build our neural network within this graph variable'''\n", + "with graph.as_default():\n", + " \n", + " '''Our training data will come in as x feature data and \n", + " y target data. We need to create tensorflow placeholders \n", + " to capture this data as it comes in'''\n", + " \n", + " x = tf.placeholder(tf.float32, shape=(None, num_features))\n", + " _y = tf.placeholder(tf.float32, shape=(None))\n", + " \n", + " '''Another placeholder stores the hyperparameter \n", + " that controls dropout'''\n", + " \n", + " keep_prob = tf.placeholder(tf.float32)\n", + " \n", + " '''Finally, we convert the test and train feature data sets \n", + " to tensorflow constants so we can use them to generate \n", + " predictions on both data sets'''\n", + " \n", + " tf_X_test = tf.constant(X_test, dtype=tf.float32)\n", + " tf_X_train = tf.constant(X_train, dtype=tf.float32)\n", + " \n", + " '''Next we create the parameter variables for the model.\n", + " Each layer of the neural network needs it's own weight \n", + " and bias variables which will be tuned during training.\n", + " The sizes of the parameter variables are determined by \n", + " the number of neurons in each layer.'''\n", + " \n", + " W_fc1 = weight_variable([num_features, num_hidden_1])\n", + " b_fc1 = bias_variable([num_hidden_1])\n", + " \n", + " W_fc2 = weight_variable([num_hidden_1, num_hidden_2])\n", + " b_fc2 = bias_variable([num_hidden_2])\n", + " \n", + " W_fc3 = weight_variable([num_hidden_2, num_outputs])\n", + " b_fc3 = bias_variable([num_outputs])\n", + " \n", + " '''Next, we define the forward computation of the model.\n", + " We do this by defining a function model() which takes in \n", + " a set of input data, and performs computations through \n", + " the network until it generates the output.'''\n", + " \n", + " def model(data, keep):\n", + " \n", + " # computing first hidden layer from input, using relu activation function\n", + " fc1 = tf.nn.sigmoid(tf.matmul(data, W_fc1) + b_fc1)\n", + " # adding dropout to first hidden layer\n", + " fc1_drop = tf.nn.dropout(fc1, keep)\n", + " \n", + " # computing second hidden layer from first hidden layer, using relu activation function\n", + " fc2 = tf.nn.sigmoid(tf.matmul(fc1_drop, W_fc2) + b_fc2)\n", + " # adding dropout to second hidden layer\n", + " fc2_drop = tf.nn.dropout(fc2, keep)\n", + " \n", + " # computing output layer from second hidden layer\n", + " # the output is a single neuron which is directly interpreted as the prediction of the target value\n", + " fc3 = tf.matmul(fc2_drop, W_fc3) + b_fc3\n", + " \n", + " # the output is returned from the function\n", + " return fc3\n", + " \n", + " '''Next we define a few calls to the model() function which \n", + " will return predictions for the current batch input data (x),\n", + " as well as the entire test and train feature set'''\n", + " \n", + " prediction = model(x, keep_prob)\n", + " test_prediction = model(tf_X_test, 1.0)\n", + " train_prediction = model(tf_X_train, 1.0)\n", + " \n", + " '''Finally, we define the loss and optimization functions \n", + " which control how the model is trained.\n", + " \n", + " For the loss we will use the basic mean square error (MSE) function,\n", + " which tries to minimize the MSE between the predicted values and the \n", + " real values (_y) of the input dataset.\n", + " \n", + " For the optimization function we will use basic Gradient Descent (SGD)\n", + " which will minimize the loss using the specified learning rate.'''\n", + " \n", + " loss = tf.reduce_mean(tf.square(tf.sub(prediction, _y)))\n", + " optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss)\n", + " \n", + " '''We also create a saver variable which will allow us to \n", + " save our trained model for later use'''\n", + " \n", + " saver = tf.train.Saver()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now that we have specified our model, we are ready to train it. We do this by iteratively calling the model, with each call representing one training step. At each step, we:\n", + "\n", + "- Feed in a new set of training data. Remember that with SGD we only have to feed in a small set of data at a time. The size of each batch of training data is determined by the 'batch_size' hyper-parameter specified above.\n", + "\n", + "- Call the optimizer function by asking tensorflow to return the model's 'optimizer' variable. This starts a chain reaction in Tensorflow that executes all the computation necessary to train the model. The optimizer function itself will compute the gradients in the model and modify the weight and bias parameters in a way that minimizes the overall loss. Because it needs this loss to compute the gradients, it will also trigger the loss function, which will in turn trigger the model to compute predictions based on the input data. This sort of chain reaction is at the root of the 'lazy evaluation' model used by Tensorflow." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Initialized\n", + "Model saved in file: model_houses.ckpt\n" + ] + } + ], + "source": [ + "# create an array to store the results of the optimization at each epoch\n", + "results = []\n", + "\n", + "'''First we open a session of Tensorflow using our graph as the base. \n", + "While this session is active all the parameter values will be stored, \n", + "and each step of training will be using the same model.'''\n", + "with tf.Session(graph=graph) as session:\n", + " \n", + " '''After we start a new session we first need to\n", + " initialize the values of all the variables.'''\n", + " tf.initialize_all_variables().run()\n", + " print('Initialized')\n", + "\n", + " '''Now we iterate through each training epoch based on the hyper-parameter set above.\n", + " Each epoch represents a single pass through all the training data.\n", + " The total number of training steps is determined by the number of epochs and \n", + " the size of mini-batches relative to the size of the entire training set.'''\n", + " for epoch in range(training_epochs):\n", + " \n", + " '''At the beginning of each epoch, we create a set of shuffled indexes \n", + " so that we are using the training data in a different order each time'''\n", + " indexes = range(num_samples)\n", + " random.shuffle(indexes)\n", + " \n", + " '''Next we step through each mini-batch in the training set'''\n", + " for step in range(int(math.floor(num_samples/float(batch_size)))):\n", + " offset = step * batch_size\n", + " \n", + " '''We subset the feature and target training sets to create each mini-batch'''\n", + " batch_data = X_train[indexes[offset:(offset + batch_size)]]\n", + " batch_labels = y_train[indexes[offset:(offset + batch_size)]]\n", + "\n", + " '''Then, we create a 'feed dictionary' that will feed this data, \n", + " along with any other hyper-parameters such as the dropout probability,\n", + " to the model'''\n", + " feed_dict = {x : batch_data, _y : batch_labels, keep_prob: dropout_keep_prob}\n", + " \n", + " '''Finally, we call the session's run() function, which will feed in \n", + " the current training data, and execute portions of the graph as necessary \n", + " to return the data we ask for.\n", + " \n", + " The first argument of the run() function is a list specifying the \n", + " model variables we want it to compute and return from the function. \n", + " The most important is 'optimizer' which triggers all calculations necessary \n", + " to perform one training step. We also include 'loss' and 'prediction' \n", + " because we want these as ouputs from the function so we can keep \n", + " track of the training process.\n", + " \n", + " The second argument specifies the feed dictionary that contains \n", + " all the data we want to pass into the model at each training step.'''\n", + " _, l, p = session.run([optimizer, loss, prediction], feed_dict=feed_dict)\n", + "\n", + " '''At the end of each epoch, we will calcule the error of predictions \n", + " on the full training and test data set. We will then store the epoch number, \n", + " along with the mini-batch, training, and test accuracies to the 'results' array \n", + " so we can visualize the training process later. How often we save the data to \n", + " this array is specified by the display_step variable created above''' \n", + " if (epoch % display_step == 0):\n", + " batch_acc = accuracy(p, batch_labels)\n", + " train_acc = accuracy(train_prediction.eval(session=session), y_train)\n", + " test_acc = accuracy(test_prediction.eval(session=session), y_test)\n", + " results.append([epoch, batch_acc, train_acc, test_acc])\n", + "\n", + " '''Once training is complete, we will save the trained model so that we can use it later'''\n", + " save_path = saver.save(session, \"model_houses.ckpt\")\n", + " print(\"Model saved in file: %s\" % save_path)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false + }, + "source": [ + "Now that the model is trained, let's visualize the training process by plotting the error we achieved in the small training batch, the full training set, and the test set at each epoch. We will also print out the minimum loss we were able to achieve in the test set over all the training steps." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Minimum test loss: 5.54012732255\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1MAAAGHCAYAAABViAiMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzs3Xd4VVXe9vHvPie9QwqhhF4ihN4VBAEBYcAEFRxsgz6+\nDAiKgzIwNkTFxsyAYnks86BSVRgEAUW6KB1Eeg+E9IT0nnPO+8chBwIESAxJIPfnurwm2XvttdfO\ncC64s9b6bcNms9kQERERERGRUjFV9gBERERERERuRgpTIiIiIiIiZaAwJSIiIiIiUgYKUyIiIiIi\nImWgMCUiIiIiIlIGClMiIiIiIiJloDAlIiIiIiJSBgpTIiIiIiIiZaAwJSIiIiIiUgYKUyIiUuUM\nHDiQ/fv3X7NdVFQU3bt3r4ARlT+LxUJoaCjJycmVPRQRESkjw2az2Sp7ECIicnNr3749hmFgs9nI\nycnB3d0dAMMwWLlyJcHBwZU8wqrHYrEQFhbG5s2b8ff35/nnn6d58+Y8+eSTlT00ERG5Tk6VPQAR\nEbn57dmzx/F127ZtWblyJbVr175iW4vFgtlsrqihlYsbNWb9PlNE5OamZX4iIlKubDbbZSGhV69e\nfP7559xzzz3cc889ALz66qv06NGDLl268OSTTxIXF1es/e+//w7A888/z5tvvsmjjz5Kx44defLJ\nJ8nIyADgzJkztGnTpth1c+bM4Z577qFr16688cYbjnOFhYVMnTqVrl27MnjwYD755BPHWC71zTff\n8Pjjj/Piiy/SuXNnli1bhsViYebMmfTp04cePXrwzjvvOJ5zz5493HvvvXTo0IHevXszd+5cAGbO\nnMnUqVMd/W7ZsqXYPQ3DAODbb79l1apVvP/++3To0IHXX3+9dD90ERGpFApTIiJSIdasWcP8+fP5\n/vvvAejcuTOrV692LHObPn16ideuWrWKV155hS1btpCbm+sIK3AhkBRZt24dixYtYunSpSxfvpxd\nu3YBMHfuXPbv38+PP/7InDlz+P777y+79mLbt2+na9eu7Nixg8GDB/PZZ5+xb98+li5dyqpVq9i3\nbx9ff/01AK+//jp//etf2b17N8uXL6dTp04l9nvxPYvC2P33388999zD+PHj2b17Ny+++GKJ14uI\nSNWhMCUiIhVi1KhR1KhRAxcXFwAGDRqEh4cHLi4uPPHEE+zevbvEawcNGkSTJk1wcXGhf//+HD58\n+Kr38fHxoXbt2nTu3NnRdvXq1YwaNQo/Pz8CAwN56KGHrjreRo0aMWTIEABcXFxYvHgxEyZMwMfH\nB29vbx577DF+/PFHAJydnTlz5gzp6el4e3sTGhpaqp+NiIjcnLRnSkREKkStWrWKfT979my+++47\nUlJSAMjNzS3xWn9/f8fXbm5uZGdnl7ptUlJSsTFcqyjGpeONiYnh8ccfdxTaAKhbty4A06dPZ9as\nWdx99900a9aMSZMmFVt+KCIityaFKRERqRAXL2/bsmULixcv5ssvvyQkJITjx48THh5+Q+8fEBBA\nQkKC4/vY2Nirtr90CWBwcDAffvghzZs3v6xt48aNmTVrFlarla+++ornnnuO1atX4+HhQXx8vKNd\nYmLidd9PRESqvmqxzC8hIYH333+/2F+iItWJPgNS1WRlZeHs7Iyvry+ZmZl89NFHZe7reivide/e\nnbfeeotjx46RkJDAwoULS3WfYcOG8a9//cvxXqizZ8+yc+dOAJYtW0ZaWhomkwkPDw9H5b8WLVqw\ndetWkpOTSUpKYt68eSX27+/vT3R0dKnGJFJa+vtApHw/B9UiTCUmJjJ79uyr/kZQ5Famz4BUpCvN\nsFx6rHfv3rRu3ZrevXsTERFxWcGGi9tfa8bmam0v/v7OO+8kPj6eBx98kL/85S/079/fsX/reowe\nPZqwsDCGDx9Op06deOqppxx/EW/YsIEBAwbQqVMnvv76a9566y3HPXv06MGAAQMYNWoUAwYMKHF8\n999/P7t27aJLly7FqhCKlCf9fSBSvp+DavHS3gMHDjBs2DCWLFlCq1atKns4IhVOnwGRyz8H8+bN\nY9OmTfzv//5vZQ9NpMLo7wOR8v0cVIuZKRERkaJCFFarlVOnTvHFF1/Qr1+/Sh6ViIjczCq8AEVG\nRgZ/+ctfsFqtFBYW8uijj/LAAw8QFRXFhAkTyMzMpHv37sVecigiIvJHFS3EeOSRR/Dx8WHo0KHc\nd999lTwqERG5mVV4mPLy8mL+/Pm4urqSm5vL4MGD6d+/P++++y5PP/00vXr1Yty4cWzcuJFevXpV\n9PBEROQW5enpCcC8efO0vElERMpFhS/zMwwDV1dX4MI7RSwWC3v27HGEp/DwcNatW1fRQxMRERER\nEblulfKeqYyMDB5++GHOnDnD888/j2EY+Pn5Oc7XqlWr2Hs5rkdCQkKJFTlGjhwJwJgxY3B2di77\nwEVuUgUFBYA+A1K96XMgos+BCODIGSdOnCixTWBgIEFBQdfsq1LClLe3N9999x3nzp1j3Lhxl5WK\nLYtFixYxe/bsq7YxmVRvQ6onk8mEj4+PPgNSrelzIKLPgQjYCxEZhsHzzz9fYptx48Yxfvz4a/ZV\nKWGqSM2aNWnRogU7duwgLS3NcTw+Pv66kuDFRowYQZ8+fa54bsyYMZhMJjZs2PBHhisiIiIiIje5\nvn37YrFY+OCDD0psExgYeF19VXiYSk5Oxs3NDU9PTzIyMti5cycjR46kXbt2bNiwgd69e7N8+XIi\nIiJK1W9QUFCJAUzT2CIiIiIiUsRsNpdLMaIKD1PR0dG8/PLLgL1M7aOPPkqzZs2YOHEizz77LNOn\nT6d79+707t27oocmIiIiIiJy3So8TLVp04alS5dedrxBgwYsWbKkoocjIiIiIiJSJtp9KCIiIiIi\nUgYKUyIiIiIiImWgMCUiIiIiIlIGClMiIiIiIiJloDAlIiIiIiJSBgpTIiIiIiIiZaAwJSIiIiJS\nBdlsNnLzCsv1P5vNdtV7RkdHc9999133GL/44gsKCwuv2mbKlCls3Ljxuvu8mVT4e6ZEREREROTq\nbDYbf5+9mUOR58q139sa1uTtcT0wDKPENlc7d6kvvviC4cOH4+RUPWOFZqZERERERMQhPz+fCRMm\nMGjQIKZMmYLFYuH999/ngQceYMiQIbz11lsAzJs3j4SEBB588EHGjh0LwIYNG4iIiCA8PJznnnvO\n0efmzZsZMWIEAwYMYOfOnSXee+/evTz44IMMGzaMRx55hNjYWACysrKYNGkSQ4cOJTw8nF27dgHw\n7bffOo698847N+pHUiLDdq25vltA3759AVi7dm0lj0RERERE5PrYbDby8i3l2qeri/mqM0/R0dH0\n69ePxYsX07JlSyZOnEjPnj3p06cPPj4+ADz99NOMGjWK9u3b07dvX1asWIGbmxvnzp1j+PDhLFiw\ngMDAQNLT0/Hx8WHKlClYrVbefvtttm7dyscff8ycOXOueP+srCw8PDwwDIN169axfv16XnvtNd59\n912cnZ2ZMGECAJmZmcTExPDcc88xf/58vLy8HPe7lvLMBtVzPk5EREREpIozDAM314r/53qDBg1o\n2bIlAIMHD2bdunW4ubnx+eefk5eXx7lz5+jZsyft27fHZrM59mH99ttvdO/encDAQIBiwaZfv34A\n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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df = pd.DataFrame(data=results, columns = [\"epoch\", \"batch_acc\", \"train_acc\", \"test_acc\"])\n", + "df.set_index(\"epoch\", drop=True, inplace=True)\n", + "\n", + "fig, ax = plt.subplots(1, 1, figsize=(10, 4))\n", + " \n", + "ax.plot(df)\n", + "ax.set(xlabel='Epoch',\n", + " ylabel='Error',\n", + " title='Training result')\n", + " \n", + "ax.legend(df.columns, loc=1)\n", + "\n", + "print \"Minimum test loss:\", np.min(df[\"test_acc\"])" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false + }, + "source": [ + "From the plot you can see several things:\n", + "\n", + "- the error on the training data smoothly improves throughout the training, which is to be expected from the gradient descent algorithm\n", + "- the error of each mini-batch is more noisy than the entire training set (which is also to be expected since we are only using a portion of the data each time) but in general follows the same trajectory\n", + "- the error over the training set bottoms out around the 120th epoch, which might represent the best model fit for this dataset\n", + "\n", + "All of this is to be expected, however the most important thing to notice with this plot is the error over the test set (which is actually measuring the generalized performance of the model). You can see that for the first 35 or so epochs the error over the test set improves in pace with the error over the training set. This means that the tuning of the model is fitting the underlying structures in both datasets. However, after the 70th epoch, the error over the test starts to move back up. This is a very common indication that overfitting of the training set has occured. After this point, further tuning of the model is representing particular features of the training set itself (such as it's particular error or noise), which do not generalize well to other data not seen by the training process. This shows why it is so important to use a separate testing set to evaluate a model, since otherwise it would be impossible to see exactly where this point of overfitting occurs.\n", + "\n", + "### Assignment - part 1\n", + "\n", + "There are several common strategies for addressing overfitting which we will cover in class and are also covered [here](http://neuralnetworksanddeeplearning.com/chap3.html). Go back to the neural network and experiment with different settings for some of the hyper-parameters to see if you can fix this 'double-dip' in the test set error. One approach might be to reduce the number of layers in the network or the number of neurons in each layer, since a simpler model is less likely to overfit. Another approach might be to increase the amount of dropout, since this will artificially limit the complexity of the model.\n", + "\n", + "_Bonus:_ there is one fundamental issue with how I'm using the data from the very beginning which is also contributing to the overfitting problem in this particular case. Can you think of something we can do to the data before training which would ensure that the training and test sets are more similar?\n", + "\n", + "Once you fix the overfitting problem and achieve a minimum test loss of less than 6.0, submit your work as a pull request back to the main project." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Python [default]", + "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.12" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/notebooks/week-4/01-tensorflow ANN for regression.ipynb b/notebooks/week-4/01-tensorflow ANN for regression.ipynb new file mode 100644 index 0000000..33456aa --- /dev/null +++ b/notebooks/week-4/01-tensorflow ANN for regression.ipynb @@ -0,0 +1,553 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Lab 4 - Tensorflow ANN for regression\n", + "\n", + "In this lab we will use Tensorflow to build an Artificial Neuron Network (ANN) for a regression task.\n", + "\n", + "As opposed to the low-level implementation from the previous week, here we will use Tensorflow to automate many of the computation tasks in the neural network. [Tensorflow](https://www.tensorflow.org/) is a higher-level open-source machine learning library [released by Google last year](https://googleblog.blogspot.com/2015/11/tensorflow-smarter-machine-learning-for.html) which is made specifically to optimize and speed up the development and training of neural networks. \n", + "\n", + "At its core, Tensorflow is very similar to numpy and other numerical computation libraries. Like numpy, it's main function is to do very fast computation on multi-dimensional datasets (such as computing the dot product between a vector of input values and a matrix of values representing the weights in a fully connected network). While numpy refers to such multi-dimensional data sets as 'arrays', Tensorflow calls them 'tensors', but fundamentally they are the same thing. The two main advantages of Tensorflow over custom low-level solutions are:\n", + "\n", + "- While it has a Python interface, much of the low-level computation is implemented in C/C++, making it run much faster than a native Python solution.\n", + "- Many common aspects of neural networks such as computation of various losses and a variety of modern optimization techniques are implemented as built in methods, reducing their implementation to a single line of code. This also helps in development and testing of various solutions, as you can easily swap in and try various solutions without having to write all the code by hand.\n", + "\n", + "You can get more details about various popular machine learning libraries in [this comparison](http://deeplearning4j.org/compare-dl4j-torch7-pylearn.html).\n", + "\n", + "To test our basic network, we will use the [Boston Housing Dataset](https://archive.ics.uci.edu/ml/datasets/Housing), which represents data on 506 houses in Boston across 14 different features. One of the features is the median value of the house in $1000’s. This is a common data set for testing regression performance of machine learning algorithms. All 14 features are continuous values, making them easy to plug directly into a neural network (after normalizing ofcourse!). The common goal is to predict the median house value using the other columns as features.\n", + "\n", + "This lab will conclude with two assignments:\n", + "\n", + "- Assignment 1 (at bottom of this notebook) asks you to experiment with various regularization parameters to reduce overfitting and improve the results of the model.\n", + "- Assignment 2 (in the next notebook) asks you to take our regression problem and convert it to a classification problem." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's start by importing some of the libraries we will use for this tutorial:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "import math\n", + "import random\n", + "\n", + "import seaborn as sns\n", + "import matplotlib.pyplot as plt\n", + "import pandas as pd\n", + "from sklearn.datasets import load_boston\n", + "\n", + "import numpy as np\n", + "import tensorflow as tf\n", + "\n", + "sns.set(style=\"ticks\", color_codes=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, let's import the Boston housing prices dataset. This is included with the scikit-learn library, so we can import it directly from there. The data will come in as two numpy arrays, one with all the features, and one with the target (price). We will use pandas to convert this data to a DataFrame so we can visualize it. We will then print the first 5 entries of the dataset to see the kind of data we will be working with." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "#load data from scikit-learn library\n", + "dataset = load_boston()\n", + "\n", + "#load data as DataFrame\n", + "houses = pd.DataFrame(dataset.data, columns=dataset.feature_names)\n", + "#add target data to DataFrame\n", + "houses['target'] = dataset.target\n", + "\n", + "#print first 5 entries of data\n", + "print houses.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can see that the dataset contains only continuous features, which we can feed directly into the neural network for training. The target is also a continuous variable, so we can use regression to try to predict the exact value of the target. You can see more information about this dataset by printing the 'DESCR' object stored in the data set." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "print dataset['DESCR']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, we will do some exploratory data visualization to get a general sense of the data and how the different features are related to each other and to the target we will try to predict. First, let's plot the correlations between each feature. Larger positive or negative correlation values indicate that the two features are related (large positive or negative correlation), while values closer to zero indicate that the features are not related (no correlation)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Create a datset of correlations between house features\n", + "corrmat = houses.corr()\n", + "\n", + "# Set up the matplotlib figure\n", + "f, ax = plt.subplots(figsize=(9, 6))\n", + "\n", + "# Draw the heatmap using seaborn\n", + "sns.set_context(\"notebook\", font_scale=0.7, rc={\"lines.linewidth\": 1.5})\n", + "sns.heatmap(corrmat, annot=True, square=True)\n", + "f.tight_layout()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can get a more detailed picture of the relationship between any two variables in the dataset by using seaborn's `jointplot` function and passing it two features of our data. This will show a single-dimension histogram distribution for each feature, as well as a two-dimension density scatter plot for how the two features are related. From the correlation matrix above, we can see that the `RM` feature has a strong positive correlation to the target, while the `LSTAT` feature has a strong negative correlation to the target. Let's create `jointplots` for both sets of features to see how they relate in more detail:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "sns.jointplot(houses['target'], houses['RM'], kind='hex')\n", + "sns.jointplot(houses['target'], houses['LSTAT'], kind='hex')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As expected, the plots show a positive relationship between the `RM` feature and the target, and a negative relationship between the `LSTAT` feature and the target.\n", + "\n", + "This type of exploratory visualization is not strictly necessary for using machine learning, but it does help to formulate your solution, and to troubleshoot your implementation incase you are not getting the results you want. For example, if you find that two features have a strong correlation with each other, you might want to include only one of them to speed up the training process. Similarly, you may want to exclude features that show little correlation to the target, since they have little influence over its value.\n", + "\n", + "Now that we know a little bit about the data, let's prepare it for training with our neural network. We will follow a process similar to the previous lab:\n", + "\n", + "- We will first re-split the data into a feature set (X) and a target set (y)\n", + "- Then we will normalize the feature set so that the values range from 0 to 1\n", + "- Finally, we will split both data sets into a training and test set." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# convert housing data to numpy format\n", + "houses_array = houses.as_matrix().astype(float)\n", + "\n", + "# split data into feature and target sets\n", + "X = houses_array[:, :-1]\n", + "y = houses_array[:, -1]\n", + "\n", + "# normalize the data per feature by dividing by the maximum value in each column\n", + "X = X / X.max(axis=0)\n", + "\n", + "# split data into training and test sets\n", + "trainingSplit = int(.7 * houses_array.shape[0])\n", + "\n", + "X_train = X[:trainingSplit]\n", + "y_train = y[:trainingSplit]\n", + "X_test = X[trainingSplit:]\n", + "y_test = y[trainingSplit:]\n", + "\n", + "print('Training set', X_train.shape, y_train.shape)\n", + "print('Test set', X_test.shape, y_test.shape)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, we set up some variables that we will use to define our model. The first group are helper variables taken from the dataset which specify the number of samples in our training set, the number of features, and the number of outputs. The second group are the actual hyper-parameters which define how the model is structured and how it performs. In this case we will be building a neural network with two hidden layers, and the size of each hidden layer is controlled by a hyper-parameter. The other hyper-parameters include:\n", + "\n", + "- `batch size`, which sets how many training samples are used at a time\n", + "- `learning rate` which controls how quickly the gradient descent algorithm works\n", + "- `training epochs` which sets how many rounds of training occurs\n", + "- `dropout keep probability`, a regularization technique which controls how many neurons are 'dropped' randomly during each training step (note in Tensorflow this is specified as the 'keep probability' from 0 to 1, with 0 representing all neurons dropped, and 1 representing all neurons kept). You can read more about dropout [here](http://neuralnetworksanddeeplearning.com/chap3.html#other_techniques_for_regularization)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# helper variables\n", + "num_samples = X_train.shape[0]\n", + "num_features = X_train.shape[1]\n", + "num_outputs = 1\n", + "\n", + "# Hyper-parameters\n", + "batch_size = 50\n", + "num_hidden_1 = 16\n", + "num_hidden_2 = 16\n", + "learning_rate = 0.0001\n", + "training_epochs = 200\n", + "dropout_keep_prob = 1.0 # set to no dropout by default\n", + "\n", + "# variable to control the resolution at which the training results are stored\n", + "display_step = 1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, we define a few helper functions which will dictate how error will be measured for our model, and how the weights and biases should be defined.\n", + "\n", + "The `accuracy()` function defines how we want to measure error in a regression problem. The function will take in two lists of values - `predictions` which represent predicted values, and `targets` which represent actual target values. In this case we simply compute the absolute difference between the two (the error) and return the average error using numpy's `mean()` fucntion.\n", + "\n", + "The `weight_variable()` and `bias_variable()` functions help create parameter variables for our neural network model, formatted in the proper type for Tensorflow. Both functions take in a shape parameter and return a variable of that shape using the specified initialization. In this case we are using a 'truncated normal' distribution for the weights, and a constant value for the bias. For more information about various ways to initialize parameters in Tensorflow you can consult the [documentation](https://www.tensorflow.org/versions/r0.11/api_docs/python/constant_op.html)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def accuracy(predictions, targets):\n", + " error = np.absolute(predictions.reshape(-1) - targets)\n", + " return np.mean(error)\n", + "\n", + "def weight_variable(shape):\n", + " initial = tf.truncated_normal(shape, stddev=0.1)\n", + " return tf.Variable(initial)\n", + "\n", + "def bias_variable(shape):\n", + " initial = tf.constant(0.1, shape=shape)\n", + " return tf.Variable(initial)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we are ready to build our neural network model in Tensorflow.\n", + "\n", + "Tensorflow operates in a slightly different way than the procedural logic we have been using in Python so far. Instead of telling Tensorflow the exact operations to run line by line, we build the entire neural network within a structure called a `Graph`. The Graph does several things:\n", + "\n", + "- describes the architecture of the network, including how many layers it has and how many neurons are in each layer\n", + "- initializes all the parameters of the network\n", + "- describes the 'forward' calculation of the network, or how input data is passed through the network layer by layer until it reaches the result\n", + "- defines the loss function which describes how well the model is performing\n", + "- specifies the optimization function which dictates how the parameters are tuned in order to minimize the loss\n", + "\n", + "Once this graph is defined, we can work with it by 'executing' it on sets of training data and 'calling' different parts of the graph to get back results. Every time the graph is executed, Tensorflow will only do the minimum calculations necessary to generate the requested results. This makes Tensorflow very efficient, and allows us to structure very complex models while only testing and using certain portions at a time. In programming language theory, this type of programming is called ['lazy evaluation'](https://en.wikipedia.org/wiki/Lazy_evaluation)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "'''First we create a variable to store our graph'''\n", + "graph = tf.Graph()\n", + "\n", + "'''Next we build our neural network within this graph variable'''\n", + "with graph.as_default():\n", + " \n", + " '''Our training data will come in as x feature data and \n", + " y target data. We need to create tensorflow placeholders \n", + " to capture this data as it comes in'''\n", + " \n", + " x = tf.placeholder(tf.float32, shape=(None, num_features))\n", + " _y = tf.placeholder(tf.float32, shape=(None))\n", + " \n", + " '''Another placeholder stores the hyperparameter \n", + " that controls dropout'''\n", + " \n", + " keep_prob = tf.placeholder(tf.float32)\n", + " \n", + " '''Finally, we convert the test and train feature data sets \n", + " to tensorflow constants so we can use them to generate \n", + " predictions on both data sets'''\n", + " \n", + " tf_X_test = tf.constant(X_test, dtype=tf.float32)\n", + " tf_X_train = tf.constant(X_train, dtype=tf.float32)\n", + " \n", + " '''Next we create the parameter variables for the model.\n", + " Each layer of the neural network needs it's own weight \n", + " and bias variables which will be tuned during training.\n", + " The sizes of the parameter variables are determined by \n", + " the number of neurons in each layer.'''\n", + " \n", + " W_fc1 = weight_variable([num_features, num_hidden_1])\n", + " b_fc1 = bias_variable([num_hidden_1])\n", + " \n", + " W_fc2 = weight_variable([num_hidden_1, num_hidden_2])\n", + " b_fc2 = bias_variable([num_hidden_2])\n", + " \n", + " W_fc3 = weight_variable([num_hidden_2, num_outputs])\n", + " b_fc3 = bias_variable([num_outputs])\n", + " \n", + " '''Next, we define the forward computation of the model.\n", + " We do this by defining a function model() which takes in \n", + " a set of input data, and performs computations through \n", + " the network until it generates the output.'''\n", + " \n", + " def model(data, keep):\n", + " \n", + " # computing first hidden layer from input, using relu activation function\n", + " fc1 = tf.nn.sigmoid(tf.matmul(data, W_fc1) + b_fc1)\n", + " # adding dropout to first hidden layer\n", + " fc1_drop = tf.nn.dropout(fc1, keep)\n", + " \n", + " # computing second hidden layer from first hidden layer, using relu activation function\n", + " fc2 = tf.nn.sigmoid(tf.matmul(fc1_drop, W_fc2) + b_fc2)\n", + " # adding dropout to second hidden layer\n", + " fc2_drop = tf.nn.dropout(fc2, keep)\n", + " \n", + " # computing output layer from second hidden layer\n", + " # the output is a single neuron which is directly interpreted as the prediction of the target value\n", + " fc3 = tf.matmul(fc2_drop, W_fc3) + b_fc3\n", + " \n", + " # the output is returned from the function\n", + " return fc3\n", + " \n", + " '''Next we define a few calls to the model() function which \n", + " will return predictions for the current batch input data (x),\n", + " as well as the entire test and train feature set'''\n", + " \n", + " prediction = model(x, keep_prob)\n", + " test_prediction = model(tf_X_test, 1.0)\n", + " train_prediction = model(tf_X_train, 1.0)\n", + " \n", + " '''Finally, we define the loss and optimization functions \n", + " which control how the model is trained.\n", + " \n", + " For the loss we will use the basic mean square error (MSE) function,\n", + " which tries to minimize the MSE between the predicted values and the \n", + " real values (_y) of the input dataset.\n", + " \n", + " For the optimization function we will use basic Gradient Descent (SGD)\n", + " which will minimize the loss using the specified learning rate.'''\n", + " \n", + " loss = tf.reduce_mean(tf.square(tf.sub(prediction, _y)))\n", + " optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss)\n", + " \n", + " '''We also create a saver variable which will allow us to \n", + " save our trained model for later use'''\n", + " \n", + " saver = tf.train.Saver()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now that we have specified our model, we are ready to train it. We do this by iteratively calling the model, with each call representing one training step. At each step, we:\n", + "\n", + "- Feed in a new set of training data. Remember that with SGD we only have to feed in a small set of data at a time. The size of each batch of training data is determined by the 'batch_size' hyper-parameter specified above.\n", + "\n", + "- Call the optimizer function by asking tensorflow to return the model's 'optimizer' variable. This starts a chain reaction in Tensorflow that executes all the computation necessary to train the model. The optimizer function itself will compute the gradients in the model and modify the weight and bias parameters in a way that minimizes the overall loss. Because it needs this loss to compute the gradients, it will also trigger the loss function, which will in turn trigger the model to compute predictions based on the input data. This sort of chain reaction is at the root of the 'lazy evaluation' model used by Tensorflow." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# create an array to store the results of the optimization at each epoch\n", + "results = []\n", + "\n", + "'''First we open a session of Tensorflow using our graph as the base. \n", + "While this session is active all the parameter values will be stored, \n", + "and each step of training will be using the same model.'''\n", + "with tf.Session(graph=graph) as session:\n", + " \n", + " '''After we start a new session we first need to\n", + " initialize the values of all the variables.'''\n", + " tf.initialize_all_variables().run()\n", + " print('Initialized')\n", + "\n", + " '''Now we iterate through each training epoch based on the hyper-parameter set above.\n", + " Each epoch represents a single pass through all the training data.\n", + " The total number of training steps is determined by the number of epochs and \n", + " the size of mini-batches relative to the size of the entire training set.'''\n", + " for epoch in range(training_epochs):\n", + " \n", + " '''At the beginning of each epoch, we create a set of shuffled indexes \n", + " so that we are using the training data in a different order each time'''\n", + " indexes = range(num_samples)\n", + " random.shuffle(indexes)\n", + " \n", + " '''Next we step through each mini-batch in the training set'''\n", + " for step in range(int(math.floor(num_samples/float(batch_size)))):\n", + " offset = step * batch_size\n", + " \n", + " '''We subset the feature and target training sets to create each mini-batch'''\n", + " batch_data = X_train[indexes[offset:(offset + batch_size)]]\n", + " batch_labels = y_train[indexes[offset:(offset + batch_size)]]\n", + "\n", + " '''Then, we create a 'feed dictionary' that will feed this data, \n", + " along with any other hyper-parameters such as the dropout probability,\n", + " to the model'''\n", + " feed_dict = {x : batch_data, _y : batch_labels, keep_prob: dropout_keep_prob}\n", + " \n", + " '''Finally, we call the session's run() function, which will feed in \n", + " the current training data, and execute portions of the graph as necessary \n", + " to return the data we ask for.\n", + " \n", + " The first argument of the run() function is a list specifying the \n", + " model variables we want it to compute and return from the function. \n", + " The most important is 'optimizer' which triggers all calculations necessary \n", + " to perform one training step. We also include 'loss' and 'prediction' \n", + " because we want these as ouputs from the function so we can keep \n", + " track of the training process.\n", + " \n", + " The second argument specifies the feed dictionary that contains \n", + " all the data we want to pass into the model at each training step.'''\n", + " _, l, p = session.run([optimizer, loss, prediction], feed_dict=feed_dict)\n", + "\n", + " '''At the end of each epoch, we will calcule the error of predictions \n", + " on the full training and test data set. We will then store the epoch number, \n", + " along with the mini-batch, training, and test accuracies to the 'results' array \n", + " so we can visualize the training process later. How often we save the data to \n", + " this array is specified by the display_step variable created above''' \n", + " if (epoch % display_step == 0):\n", + " batch_acc = accuracy(p, batch_labels)\n", + " train_acc = accuracy(train_prediction.eval(session=session), y_train)\n", + " test_acc = accuracy(test_prediction.eval(session=session), y_test)\n", + " results.append([epoch, batch_acc, train_acc, test_acc])\n", + "\n", + " '''Once training is complete, we will save the trained model so that we can use it later'''\n", + " save_path = saver.save(session, \"model_houses.ckpt\")\n", + " print(\"Model saved in file: %s\" % save_path)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false + }, + "source": [ + "Now that the model is trained, let's visualize the training process by plotting the error we achieved in the small training batch, the full training set, and the test set at each epoch. We will also print out the minimum loss we were able to achieve in the test set over all the training steps." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "df = pd.DataFrame(data=results, columns = [\"epoch\", \"batch_acc\", \"train_acc\", \"test_acc\"])\n", + "df.set_index(\"epoch\", drop=True, inplace=True)\n", + "\n", + "fig, ax = plt.subplots(1, 1, figsize=(10, 4))\n", + " \n", + "ax.plot(df)\n", + "ax.set(xlabel='Epoch',\n", + " ylabel='Error',\n", + " title='Training result')\n", + " \n", + "ax.legend(df.columns, loc=1)\n", + "\n", + "print \"Minimum test loss:\", np.min(df[\"test_acc\"])" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false + }, + "source": [ + "From the plot you can see several things:\n", + "\n", + "- the error on the training data smoothly improves throughout the training, which is to be expected from the gradient descent algorithm\n", + "- the error of each mini-batch is more noisy than the entire training set (which is also to be expected since we are only using a portion of the data each time) but in general follows the same trajectory\n", + "- the error over the training set bottoms out around the 120th epoch, which might represent the best model fit for this dataset\n", + "\n", + "All of this is to be expected, however the most important thing to notice with this plot is the error over the test set (which is actually measuring the generalized performance of the model). You can see that for the first 35 or so epochs the error over the test set improves in pace with the error over the training set. This means that the tuning of the model is fitting the underlying structures in both datasets. However, after the 70th epoch, the error over the test starts to move back up. This is a very common indication that overfitting of the training set has occured. After this point, further tuning of the model is representing particular features of the training set itself (such as it's particular error or noise), which do not generalize well to other data not seen by the training process. This shows why it is so important to use a separate testing set to evaluate a model, since otherwise it would be impossible to see exactly where this point of overfitting occurs.\n", + "\n", + "### Assignment - part 1\n", + "\n", + "There are several common strategies for addressing overfitting which we will cover in class and are also covered [here](http://neuralnetworksanddeeplearning.com/chap3.html). Go back to the neural network and experiment with different settings for some of the hyper-parameters to see if you can fix this 'double-dip' in the test set error. One approach might be to reduce the number of layers in the network or the number of neurons in each layer, since a simpler model is less likely to overfit. Another approach might be to increase the amount of dropout, since this will artificially limit the complexity of the model.\n", + "\n", + "_Bonus:_ there is one fundamental issue with how I'm using the data from the very beginning which is also contributing to the overfitting problem in this particular case. Can you think of something we can do to the data before training which would ensure that the training and test sets are more similar?\n", + "\n", + "Once you fix the overfitting problem and achieve a minimum test loss of less than 6.0, submit your work as a pull request back to the main project." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "anaconda-cloud": {}, + "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.12" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/notebooks/week-4/02-tensorflow ANN for classification as.ipynb b/notebooks/week-4/02-tensorflow ANN for classification as.ipynb new file mode 100644 index 0000000..afe67b6 --- /dev/null +++ b/notebooks/week-4/02-tensorflow ANN for classification as.ipynb @@ -0,0 +1,1316 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Assignment - part 2\n", + "\n", + "Now that we have a better understanding of how to set up a basic neural network in Tensorflow, let's see if we can convert our dataset to a classificiation problem, and then rework our neural network to solve it. I will replicate most of our code from the previous assignment below, but leave blank spots where you should implement changes to convert our regression model into a classification one. Look for text descriptions above code blocks explaining the changes that need to be made, and `#UPPERCASE COMMENTS` where the new code should be written." + ] + }, + { + "cell_type": "code", + "execution_count": 99, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "import math\n", + "import random\n", + "\n", + "import seaborn as sns\n", + "import matplotlib.pyplot as plt\n", + "import pandas as pd\n", + "from sklearn.datasets import load_boston\n", + "\n", + "'''Since this is a classification problem, we will need to \n", + "represent our targets as one-hot encoding vectors (see previous lab).\n", + "To do this we will use scikit-learn's OneHotEncoder module \n", + "which we import here'''\n", + "from sklearn.preprocessing import OneHotEncoder\n", + "\n", + "import numpy as np\n", + "import tensorflow as tf\n", + "\n", + "sns.set(style=\"ticks\", color_codes=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1. Target data format\n", + "\n", + "The first step is to change the target of the dataset from a continuous variable (the value of the house) to a categorical one. In this case we will change it to have two categories, specifying whether the value of the house is higher or lower than the average.\n", + "\n", + "In the code block below, write code to change the ‘target’ column to a categorical variable instead of a continuous one. This variable should be 1 if the target is higher than the average value, and 0 if it is lower. You can use np.mean() to calculate the average value. Then, you can iterate over all entries in the column, and compare each value to the average to decide if it is higher or lower. Finally, you can use the int() function to convert the True/False values to 0 and 1." + ] + }, + { + "cell_type": "code", + "execution_count": 100, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "21.6\n", + "1.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "1.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "0.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "0.0\n", + "0.0\n" + ] + } + ], + "source": [ + "dataset = load_boston()\n", + "houses = pd.DataFrame(dataset.data, columns=dataset.feature_names)\n", + "houses['target'] = dataset.target\n", + "\n", + "averageprice = np.mean(houses['target'])\n", + "#print averageprice\n", + "print houses['target'][1]\n", + "for i, house in enumerate(houses['target']):\n", + " houses['target'][i]=int(house>averageprice)\n", + " if house > averageprice:\n", + " houses['target'][i] = 1\n", + " else:\n", + " houses['target'][i]=0\n", + " print houses['target'][i]\n", + "\n", + "# WRITE CODE TO CONVERT 'TARGET' COLUMN FROM CONTINUOUS TO CATEGORICAL" + ] + }, + { + "cell_type": "code", + "execution_count": 101, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1.0 <-- should be 1\n", + "0.0 <-- should be 0\n" + ] + } + ], + "source": [ + "'''check your work'''\n", + "print np.max(houses['target']), \"<-- should be 1\"\n", + "print np.min(houses['target']), \"<-- should be 0\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2. Target data encoding\n", + "\n", + "Since we are now dealing with a classification problem, our target values need to be encoded using one-hot encoding (OHE) (see Lab 3 for a description of what this is and why it's necessary). In the code block below, use scikit-learn's `OneHotEncoder()` module to ocnvert the y target array to OHE.\n", + "\n", + "_hint_: when you create the onehotencoder object, pass in the variable sparse=false to give the resulting data the proper formatting each value in y should be a two-part array, either [0,1] or [1,0] depending on the target value." + ] + }, + { + "cell_type": "code", + "execution_count": 102, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[2]\n", + "[0 2]\n", + "(506, 1)\n", + "[[ 1. 0.]\n", + " [ 0. 1.]\n", + " [ 0. 1.]\n", + " ..., \n", + " [ 1. 0.]\n", + " [ 0. 1.]\n", + " [ 1. 0.]]\n", + "(506, 2)\n", + "('Training set', (354, 13), (354, 2))\n", + "('Test set', (152, 13), (152, 2))\n" + ] + } + ], + "source": [ + "houses_array = houses.as_matrix().astype(float)\n", + "np.random.shuffle(houses_array)\n", + "\n", + "X = houses_array[:, :-1]\n", + "y = houses_array[:, -1]\n", + "\n", + "# USE SCIKIT-LEARN'S ONE-HOT ENCODING MODULE TO \n", + "# CONVERT THE y ARRAY OF TARGETS TO ONE-HOT ENCODING.\n", + "\n", + "y = y.reshape(-1,1)\n", + "\n", + "# create an instance of the one-hot encoding function from the sci-kit learn library\n", + "enc = OneHotEncoder(categorical_features='all', handle_unknown='error', n_values='auto', sparse=False)\n", + "# use the function to figure out how many categories exist in the data\n", + "enc.fit(y)\n", + "print enc.n_values_\n", + "print enc.feature_indices_\n", + "\n", + "print y.shape\n", + "\n", + "# convert only the target data in the training set to one-hot encoding\n", + "y=enc.transform(y)\n", + "print y\n", + "print y.shape\n", + "\n", + "\n", + "X = X / X.max(axis=0)\n", + "\n", + "trainingSplit = int(.7 * houses_array.shape[0])\n", + "X_train = X[:trainingSplit]\n", + "y_train = y[:trainingSplit]\n", + "X_test = X[trainingSplit:]\n", + "y_test = y[trainingSplit:]\n", + "\n", + "print('Training set', X_train.shape, y_train.shape)\n", + "print('Test set', X_test.shape, y_test.shape)" + ] + }, + { + "cell_type": "code", + "execution_count": 103, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2 <-- should be 2\n", + "2 <-- should be 2\n", + "[ 1. 0.] <-- should be either [0. 1.] or [1. 0.]\n" + ] + } + ], + "source": [ + "'''check your work'''\n", + "print y_train.shape[1], \"<-- should be 2\"\n", + "print y_test.shape[1], \"<-- should be 2\"\n", + "print y_train[0], \"<-- should be either [0. 1.] or [1. 0.]\"" + ] + }, + { + "cell_type": "code", + "execution_count": 104, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# helper variables\n", + "num_samples = X_train.shape[0]\n", + "num_features = X_train.shape[1]\n", + "num_outputs = y_train.shape[1]\n", + "\n", + "# Hyper-parameters\n", + "batch_size = 40\n", + "num_hidden_1 = 20\n", + "num_hidden_2 = 20\n", + "learning_rate = 0.5\n", + "training_epochs = 500\n", + "dropout_keep_prob = 1 # 0.5 # set to no dropout by default\n", + "\n", + "# variable to control the resolution at which the training results are stored\n", + "display_step = 5" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3. Perfomance measure\n", + "\n", + "Instead of measuring the average error in the prediction of a continuous variable, we now want our performance measure to be the number of samples for which we guess the right category.\n", + "\n", + "As before, this function takes in an array of predictions and an array of targets. This time, however, each prediction or target is represented by a two-piece array. With the predictions, the two values represent the confidence of the system for choosing either value as the category. Because these predictions are generated through the [softmax function](https://en.wikipedia.org/wiki/Softmax_function), they are guaranteed to add up to 1.0, so they can be interpreted as the percentage of confidence behind each category. In our two category example,\n", + "\n", + "- A prediction of [1,0] means complete confidence that the sample belongs in the first category\n", + "- A prediction of [0,1] means complete confidence that the sample belongs in the second category\n", + "- A prediction of [0.5,0.5] means the system is split, and cannot clearly decide which category the sample belongs to.\n", + "\n", + "With the targets, the two values are the one-hot encodings generated previously. You can now see how the one-hot encoding actually represents the target values in the same format as the predictions coming from the model. This is helpful because while the model is training all it has to do is try to match the prediction arrays to the encoded targets. Infact, this is exactly what our modified cost function will do.\n", + "\n", + "For our accuracy measure, we want to take these two arrays of predictions and targets, see how many of them match (correct classification), then devide by the total number of predictions to get the ratio of accurate guesses, and multiply by 100.0 to convert it to a percentage.\n", + "\n", + "_hints:_ \n", + "\n", + "- numpy's np.argmax() function will give you the position of the largest value in the array along an axis, so executing np.argmax(predictions, 1) will convert the confidence measures to the single most likely category.\n", + "- once you have a list of single-value predictions, you can compare them using the '==' operator to see how many match (matches result in a 'True' and mismatches result in a 'False')\n", + "- you can use numpy's np.sum() function to find out the total number of 'True' statements, and divide them by the total number of predictions to get the ratio of accurate predictions." + ] + }, + { + "cell_type": "code", + "execution_count": 105, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "100.0\n", + "100.0\n" + ] + } + ], + "source": [ + "def accuracy(predictions, targets):\n", + " \n", + " # IMPLEMENT THE NEW ACCURACY MEASURE HERE\n", + " predictions = np.argmax(predictions, 1)\n", + "\n", + " targets = np.argmax(targets, 1)\n", + "\n", + " n_correct = float(np.sum(predictions==targets))\n", + "\n", + " n_pts = float(predictions.shape[0])\n", + " accuracy = n_correct/n_pts*100.0\n", + " print accuracy\n", + " return accuracy\n", + "\n", + "def weight_variable(shape):\n", + " initial = tf.truncated_normal(shape, stddev=0.1)\n", + " return tf.Variable(initial)\n", + "\n", + "def bias_variable(shape):\n", + " initial = tf.constant(0.1, shape=shape)\n", + " return tf.Variable(initial)\n", + "\n", + "print accuracy(y, y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4. Model definition\n", + "\n", + "For the most part, our model definition will stay roughtly the same. The major difference is that the final layer in our network now contains two values, which are interpreted as the confidence that the network has in classifying each input set of data as belonging to either the first or second category. \n", + "\n", + "However, as the raw output of the network, these outputs can take on any value. In order to interpret them for categorization it is typical to use the softmax function, which converts a range of values to a probability distribution along a number of categories. For example, if the outputs from the network from a given input are [1,000,000 and 10], we would like to interpret that as [0.99 and 0.01], or almost full confidence that the sample belongs in the first category. Similarly, if the outputs are closer together, such as 10 and 5, we would like to interpret it as something like [0.7 and 0.3], which shows that the first category is still more likely, but it is not as confident as before. This is exactly what the softmax function does. The exact formulation of the softmax function is not so important, as long as you know that the goal is to take the raw outputs from the neural network, and convert them to a set of values that preserve the relationship between the outputs while summing up to 1.0.\n", + "\n", + "To adapt our code for classification, we simply have to wrap all of our outputs in a `tf.nn.softmax()` function, which will convert the raw outputs to confidence measures. We will also replace the MSE error function with a cross-entropy function which performs better with classification tasks. Look for comments below for implementation details." + ] + }, + { + "cell_type": "code", + "execution_count": 106, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "graph = tf.Graph()\n", + "\n", + "with graph.as_default():\n", + " \n", + " x = tf.placeholder(tf.float32, shape=(None, num_features))\n", + " _y = tf.placeholder(tf.float32, shape=(None))\n", + " \n", + " keep_prob = tf.placeholder(tf.float32)\n", + " \n", + " tf_X_test = tf.constant(X_test, dtype=tf.float32)\n", + " tf_X_train = tf.constant(X_train, dtype=tf.float32)\n", + " \n", + " \n", + " W_fc1 = weight_variable([num_features, num_hidden_1])\n", + " b_fc1 = bias_variable([num_hidden_1])\n", + " \n", + " W_fc2 = weight_variable([num_hidden_1, num_hidden_2])\n", + " b_fc2 = bias_variable([num_hidden_2])\n", + " \n", + " W_fc3 = weight_variable([num_hidden_2, num_outputs])\n", + " b_fc3 = bias_variable([num_outputs])\n", + " \n", + " \n", + " def model(data, keep):\n", + " \n", + " fc1 = tf.nn.sigmoid(tf.matmul(data, W_fc1) + b_fc1)\n", + " fc1_drop = tf.nn.dropout(fc1, keep)\n", + " \n", + " fc2 = tf.nn.sigmoid(tf.matmul(fc1_drop, W_fc2) + b_fc2)\n", + " fc2_drop = tf.nn.dropout(fc2, keep)\n", + " \n", + " fc3 = tf.matmul(fc2_drop, W_fc3) + b_fc3\n", + " \n", + " return fc3\n", + " \n", + " '''for our loss function we still want to get the raw outputs \n", + " of the model, but since it no longer represents the actual prediction \n", + " we rename the variable to ‘output’'''\n", + " output = model(x, keep_prob)\n", + " \n", + " # WHEN WE CALCULATE THE PREDICTIONS, WE NEED TO WRAP EACH OUTPUT IN A\n", + " # tf.nn.softmax() FUNCTION. THE FIRST ONE HAS BEEN DONE FOR YOU:\n", + " prediction = tf.nn.softmax(output)\n", + " test_prediction = model(tf_X_test, 1.0)\n", + " train_prediction = model(tf_X_train, 1.0)\n", + " \n", + " '''finally, we replace our previous MSE cost function with the\n", + " cross-entropy function included in Tensorflow. This function takes in the\n", + " raw output of the network and calculates the average loss with the target'''\n", + " loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(output, _y))\n", + " optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss)\n", + " \n", + " saver = tf.train.Saver()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now that we have replaced the relevant accuracy measures and loss function, our training process is exactly the same, meaning we can run the same training process and plotting code to visualize the results. The only difference is that with classificiation we are using an accuracy rather than an error measure, so the better our model is performing, the higher the graph should be (higher accuracy is better, while lower error is better)." + ] + }, + { + "cell_type": "code", + "execution_count": 107, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "55.0\n", + "43.5028248588\n", + "36.1842105263\n", + "55.0\n", + "56.4971751412\n", + "63.8157894737\n", + "62.5\n", + "56.4971751412\n", + "63.8157894737\n", + "57.5\n", + "56.4971751412\n", + "63.8157894737\n", + "45.0\n", + "43.5028248588\n", + "36.1842105263\n", + "60.0\n", + "56.4971751412\n", + "63.8157894737\n", + "57.5\n", + "56.4971751412\n", + "63.8157894737\n", + "62.5\n", + "56.4971751412\n", + "63.8157894737\n", + "60.0\n", + "56.4971751412\n", + "63.8157894737\n", + "62.5\n", + "56.4971751412\n", + "63.8157894737\n", + "60.0\n", + "56.4971751412\n", + "63.8157894737\n", + "42.5\n", + "43.7853107345\n", + "36.1842105263\n", + "67.5\n", + "56.4971751412\n", + "63.8157894737\n", + "57.5\n", + "59.0395480226\n", + "69.0789473684\n", + "57.5\n", + "68.0790960452\n", + "73.6842105263\n", + "60.0\n", + "68.6440677966\n", + "74.3421052632\n", + "77.5\n", + "69.209039548\n", + "74.3421052632\n", + "62.5\n", + "74.8587570621\n", + "84.2105263158\n", + "80.0\n", + "76.2711864407\n", + "80.9210526316\n", + "75.0\n", + "80.5084745763\n", + "87.5\n", + "70.0\n", + "74.2937853107\n", + "79.6052631579\n", + "75.0\n", + "82.2033898305\n", + "90.1315789474\n", + "87.5\n", + "82.7683615819\n", + "88.8157894737\n", + "77.5\n", + "71.4689265537\n", + "76.3157894737\n", + "85.0\n", + "85.8757062147\n", + "89.4736842105\n", + "87.5\n", + "86.7231638418\n", + "89.4736842105\n", + "87.5\n", + "85.8757062147\n", + "91.4473684211\n", + "97.5\n", + "84.1807909605\n", + "87.5\n", + "85.0\n", + "87.8531073446\n", + "89.4736842105\n", + "87.5\n", + "87.0056497175\n", + "89.4736842105\n", + "85.0\n", + "86.7231638418\n", + "89.4736842105\n", + "87.5\n", + "85.593220339\n", + "88.1578947368\n", + "87.5\n", + "88.418079096\n", + "90.1315789474\n", + "80.0\n", + "87.5706214689\n", + "90.1315789474\n", + "87.5\n", + "86.4406779661\n", + "90.1315789474\n", + "95.0\n", + "87.2881355932\n", + "88.1578947368\n", + "80.0\n", + "87.2881355932\n", + "88.8157894737\n", + "77.5\n", + "85.0282485876\n", + "87.5\n", + "77.5\n", + "80.790960452\n", + "84.8684210526\n", + "90.0\n", + "82.2033898305\n", + "88.8157894737\n", + "70.0\n", + "79.6610169492\n", + "82.8947368421\n", + "92.5\n", + "87.8531073446\n", + "90.1315789474\n", + "80.0\n", + "84.7457627119\n", + "88.1578947368\n", + "70.0\n", + "77.6836158192\n", + "80.9210526316\n", + "85.0\n", + "88.7005649718\n", + "90.1315789474\n", + "95.0\n", + "87.8531073446\n", + "90.1315789474\n", + "82.5\n", + "87.5706214689\n", + "89.4736842105\n", + "92.5\n", + "88.1355932203\n", + "90.1315789474\n", + "80.0\n", + "88.7005649718\n", + "90.1315789474\n", + "90.0\n", + "88.418079096\n", + "90.1315789474\n", + "85.0\n", + "87.8531073446\n", + "90.1315789474\n", + "92.5\n", + "88.1355932203\n", + "90.1315789474\n", + "75.0\n", + "79.9435028249\n", + "85.5263157895\n", + "90.0\n", + "88.7005649718\n", + "88.1578947368\n", + "80.0\n", + "88.1355932203\n", + "90.1315789474\n", + "82.5\n", + "88.9830508475\n", + "88.8157894737\n", + "80.0\n", + "87.5706214689\n", + "89.4736842105\n", + "92.5\n", + "87.8531073446\n", + "89.4736842105\n", + "90.0\n", + "88.418079096\n", + "90.1315789474\n", + "77.5\n", + "88.9830508475\n", + "90.1315789474\n", + "90.0\n", + "87.8531073446\n", + "90.1315789474\n", + "82.5\n", + "86.1581920904\n", + "89.4736842105\n", + "80.0\n", + "85.593220339\n", + "88.1578947368\n", + "87.5\n", + "88.418079096\n", + "88.1578947368\n", + "82.5\n", + "88.9830508475\n", + "87.5\n", + "80.0\n", + "84.7457627119\n", + "88.8157894737\n", + "100.0\n", + "88.1355932203\n", + "86.8421052632\n", + "95.0\n", + "87.0056497175\n", + "89.4736842105\n", + "90.0\n", + "85.3107344633\n", + "88.8157894737\n", + "92.5\n", + "87.8531073446\n", + "88.8157894737\n", + "82.5\n", + "88.9830508475\n", + "90.1315789474\n", + "95.0\n", + "85.3107344633\n", + "89.4736842105\n", + "80.0\n", + "85.8757062147\n", + "89.4736842105\n", + "95.0\n", + "87.8531073446\n", + "89.4736842105\n", + "92.5\n", + "88.418079096\n", + "90.1315789474\n", + "87.5\n", + "88.1355932203\n", + "87.5\n", + "87.5\n", + "88.9830508475\n", + "90.1315789474\n", + "82.5\n", + "88.7005649718\n", + "90.1315789474\n", + "92.5\n", + "85.593220339\n", + "88.8157894737\n", + "92.5\n", + "88.418079096\n", + "90.1315789474\n", + "85.0\n", + "88.9830508475\n", + "90.1315789474\n", + "87.5\n", + "87.8531073446\n", + "87.5\n", + "85.0\n", + "88.9830508475\n", + "90.1315789474\n", + "92.5\n", + "87.8531073446\n", + "88.1578947368\n", + "92.5\n", + "88.9830508475\n", + "87.5\n", + "92.5\n", + "85.593220339\n", + "88.8157894737\n", + "87.5\n", + "87.2881355932\n", + "89.4736842105\n", + "87.5\n", + "88.7005649718\n", + "90.1315789474\n", + "90.0\n", + "88.1355932203\n", + "86.8421052632\n", + "92.5\n", + "88.9830508475\n", + "90.1315789474\n", + "85.0\n", + "88.7005649718\n", + "87.5\n", + "92.5\n", + "88.418079096\n", + "90.1315789474\n", + "85.0\n", + "85.593220339\n", + "89.4736842105\n", + "90.0\n", + "88.7005649718\n", + "90.1315789474\n", + "85.0\n", + "88.9830508475\n", + "87.5\n", + "87.5\n", + "88.9830508475\n", + "90.1315789474\n", + "92.5\n", + "87.0056497175\n", + "89.4736842105\n", + "80.0\n", + "88.9830508475\n", + "88.8157894737\n", + "92.5\n", + "88.9830508475\n", + "90.1315789474\n", + "90.0\n", + "88.7005649718\n", + "87.5\n" + ] + } + ], + "source": [ + "results = []\n", + "\n", + "with tf.Session(graph=graph) as session:\n", + " \n", + " tf.initialize_all_variables().run()\n", + " #print('Initialized')\n", + "\n", + " for epoch in range(training_epochs):\n", + " \n", + " indexes = range(num_samples)\n", + " random.shuffle(indexes)\n", + " \n", + " for step in range(int(math.floor(num_samples/float(batch_size)))):\n", + " offset = step * batch_size\n", + " \n", + " batch_data = X_train[indexes[offset:(offset + batch_size)]]\n", + " batch_labels = y_train[indexes[offset:(offset + batch_size)]]\n", + "\n", + " feed_dict = {x : batch_data, _y : batch_labels, keep_prob: dropout_keep_prob}\n", + " \n", + " _, l, p = session.run([optimizer, loss, prediction], feed_dict=feed_dict)\n", + "\n", + " if (epoch % display_step == 0):\n", + " batch_acc = accuracy(p, batch_labels)\n", + " train_acc = accuracy(train_prediction.eval(session=session), y_train)\n", + " test_acc = accuracy(test_prediction.eval(session=session), y_test)\n", + " results.append([epoch, batch_acc, train_acc, test_acc])\n", + "\n", + " save_path = saver.save(session, \"model_houses_classification.ckpt\")\n", + " #print(\"Model saved in file: %s\" % save_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 108, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Maximum test accuracy: 91.45%\n" + ] + }, + { + "data": { + "image/png": "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\nDMOgRkRERERElGEY1IiIiIiIiDIMgxoREREREVGGYVAjIiIiIiLKMAxqREREREREGYZBjYiIiIiI\nKMMwqBEREREREWUYBjUiIiIiIqIMw6BGRERERESUYRjUiIiIiIiIMgyDGhERERERUYZhUCMiIiIi\nIsowDGpEREREREQZhkGNiIiIiIgowzCoERERERERZRgGNSIiIiIiogzDoEZERERERJRhGNSIiIiI\niIgyTNYEtSeeeALz5s1DXV0d6urqcPXVV+P111+PuWbDhg2YNWsWamtrsXTpUpw4cWKAektERERE\nRJS8rAlqw4cPx+rVq/Hss8/imWeewQUXXIAVK1bgyJEjAIBNmzZh27ZtuP3227Fjxw5YrVYsW7YM\nfr9/gHtORERERESUmKwJal/84hdx8cUXY+TIkRg1ahRuvPFG2Gw27Nu3DwCwdetWrFixAnPmzMH4\n8eNx7733oqmpCbt37x7gnhMRERERESUma4JaNEmSsGvXLng8HkydOhWnTp2C3W7HjBkz1Gtyc3NR\nW1urBjkiIiIiIqJsYRjoDiTi8OHDWLhwIfx+P2w2GzZu3IixY8di7969EAQBpaWlMdeXlJTAbrcn\n3E5TUxOam5t7PNfY2AhJknDppZcm9QxERERERDQ41NfXQ6/X49ChQ71eU1ZWhvLy8oTvnVVBbezY\nsXjhhRfgcDjwyiuvYM2aNXj88cdT3s727duxcePGXs8LggBRFKHX61PeNlGYKIpwuVyw2Wx810hT\nfNcoXfiuUbrwXaN00ev1EEURCxYs6PWalStXYtWqVQnfO6uCmsFgQFVVFQBg0qRJOHDgALZu3Yrr\nrrsOsizDbrfHjKq1tLRg4sSJCbezcOFCzJ07t8dzR44cwc0334zf/va3qKmpSe5BiOJw6NAhLFiw\nAFu2bOG7Rpriu0bpwneN0oXvGqVL+F277777MG7cuB6vKSsrS+reWRXUupIkCX6/H1VVVSgtLcXb\nb7+N6upqAIDT6cT+/fuxaNGihO9bXl6e1PAkERERERENPePGjUv5PwpkTVBbv349Lr74YgwfPhwu\nlws7d+7EO++8g0ceeQQAsGTJEjz88MMYOXIkRowYgQ0bNqCiooJryYiIiIiIKOtkTVBraWnBmjVr\n0NzcjLy8PEyYMAGPPPIILrzwQgDA8uXL4fV6sXbtWjgcDkyfPh2bN2+GyWQa4J4TERERERElJmuC\n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\nDwB81yglWlpasGbNGjQ3NyMvLw8TJkzAI488olY743tGWuq6HynfN0qFxsZG3HTTTWhvb0dxcTHq\n6uqwfft2FBUVAUjveybIsiyn7MmIiIiIiIio37hGjYiIiIiIKMMwqBEREREREWUYBjUiIiIiIqIM\nw6BGRERERESUYRjUiIiIiIiIMgyDGhERERERUYZhUCMiIiIiIsowDGpEREREREQZhkGNiIiIiIgo\nwzCoERHRoLZx40ZUV1d3+zVx4kRs3rw57f155plnUF1djfb29rS3TURE2cMw0B0gIiLSmtVqxWOP\nPdbt+PDhw9PeF0EQIAhC2tslIqLswqBGRESDniAImDJlykB3g4iIKG6c+khERENedXU1Nm3ahPvu\nuw8XXnghpk2bhp/+9KdwuVwx150+fRo33HADpk+fjqlTp2LZsmU4fPhwt/s999xz+MY3voEpU6Zg\nxowZ+N73vof6+vqYa+rr67F8+XJMnToVl112GZ577jlNn5GIiLILgxoREQ0Joih2+xVt27ZtOHr0\nKO655x6sXr0ar7zyCtauXaued7lcWLx4MT766CPcdtttuO+++9De3o7FixejsbFRve4Pf/gDbrnl\nFpx77rnYuHEj7rzzTowaNQqtra3qNbIs4+abb8asWbPw0EMPYdKkSfjZz36Go0ePav+DICKirMCp\nj0RENOi53W7U1NTEHBMEAdu2bcO0adMAACaTCQ899JC6fsxsNuOXv/wlVq5ciTFjxuDpp59GQ0MD\ndu3ahTFjxgAAvvCFL+CLX/witmzZgjVr1sDpdOK3v/0trr76aqxbt05ta+7cud36tHjxYlx99dUA\ngPPOOw9/+9vf8Oqrr+L73/++Fj8CIiLKMgxqREQ06FmtVmzbtg2yLMccHzt2rPr1nDlzYop8XHbZ\nZfj5z3+OAwcOYMyYMXjvvfdwzjnnqCENAAoKCnDRRRdhz549AIA9e/bA6/Xim9/85hn7IwgCLrro\nopj+VVZWoqGhoV/PSUREgweDGhERDXqCIGDSpElnvKakpCTm+9zcXJjNZjQ3NwMAOjs7UVpa2uPn\nPvnkEwBAR0cHAKC8vLzPPuXl5cV8bzQa4fP5+vwcERENDVyjRkREBKClpSXme6fTCZ/Pp4augoKC\nbteEP1dYWAgA6u9NTU0a95aIiAY7BjUiIiIAf/3rX2OmRv7v//4vdDodJk+eDACoq6vD4cOHcfz4\ncfWajo4OvPnmm6irqwMATJ06FRaLBc8880xa+05ERIMPpz4SEdGgJ8sy9u/f3+14cXExqqqqAAB+\nvx/XX389Fi1ahFOnTuH+++/HV7/6VXUd24IFC7BlyxZ873vfww9/+EOYTCY8/PDDMBqNWLJkCQBl\nuuQPfvAD3H///RBFEZdeeilkWcY///lPfO1rX+tW0ISIiKg3DGpERDToeb1etcJitG9961u4/fbb\nAShVGFtbW3HzzTcjGAzisssuwy9+8Qv1WpvNhscffxx33XUX1q5dC1EUUVdXh7vvvhvDhg1Tr7vu\nuutQUlKCLVu24LnnnoPNZsN5553XbQ1cV4IgxBQzISKioU2Qu5bAIiIiGmKqq6uxZs0aLF26dKC7\nQkREBIBr1IiIiIiIiDIOgxoREQ15nHZIRESZhlMfiYiIiIiIMgxH1IiIiIiIiDIMgxoREREREVGG\nYVAjIiIiIiLKMAxqREREREREGYZBjYiIiIiIKMMwqBEREREREWUYBjUiIiIiIqIMw6BGRERERESU\nYf4/T3NsObfhdLkAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df = pd.DataFrame(data=results, columns = [\"epoch\", \"batch_acc\", \"train_acc\", \"test_acc\"])\n", + "df.set_index(\"epoch\", drop=True, inplace=True)\n", + "\n", + "fig, ax = plt.subplots(1, 1, figsize=(10, 4))\n", + " \n", + "ax.plot(df)\n", + "ax.set(xlabel='Epoch',\n", + " ylabel='Error',\n", + " title='Training result')\n", + " \n", + "ax.legend(df.columns, loc=1)\n", + "\n", + "print \"Maximum test accuracy: %.2f%%\" % np.max(df[\"test_acc\"])" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "### 5. Hyper-parameter tuning\n", + "\n", + "While the model specification is correct, if you train the model using the previous hyper-parameters, the visualized results will not seem so promising. This can be for a number of reasons, including that the network is too deep or not deep enough, the learning rate is too fast or not fast enough, we are not training for enough epochs, our batch size is either too big or too small, or we can benefit from other regularization strategies such as dropout.\n", + "\n", + "Infact, the tuning of hyper-parameters is one of the most difficult problems in applied machine learning, precisely since it is often not clear how these should be set at the outset. While there are some heuristic 'best practice' strategies out there that people have developed, for the most part researchers experiment with different settings for hyper-parameters until they get the results they want.\n", + "\n", + "For the last part of the assignment, experiment with different settings for the hyper-parameters specified at the top of the lab. With different combinations of parameters you should be able to achieve **at least 90% accuracy in the test set** without having to train the model for more than 500 epochs. Once you achieve this accuracy, save your edits and submit your work as a pull request back to the main project." + ] + } + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Python [default]", + "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.12" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/notebooks/week-4/02-tensorflow ANN for classification.ipynb b/notebooks/week-4/02-tensorflow ANN for classification.ipynb new file mode 100644 index 0000000..a9e5f5d --- /dev/null +++ b/notebooks/week-4/02-tensorflow ANN for classification.ipynb @@ -0,0 +1,391 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Assignment - part 2\n", + "\n", + "Now that we have a better understanding of how to set up a basic neural network in Tensorflow, let's see if we can convert our dataset to a classificiation problem, and then rework our neural network to solve it. I will replicate most of our code from the previous assignment below, but leave blank spots where you should implement changes to convert our regression model into a classification one. Look for text descriptions above code blocks explaining the changes that need to be made, and `#UPPERCASE COMMENTS` where the new code should be written." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "import math\n", + "import random\n", + "\n", + "import seaborn as sns\n", + "import matplotlib.pyplot as plt\n", + "import pandas as pd\n", + "from sklearn.datasets import load_boston\n", + "\n", + "'''Since this is a classification problem, we will need to \n", + "represent our targets as one-hot encoding vectors (see previous lab).\n", + "To do this we will use scikit-learn's OneHotEncoder module \n", + "which we import here'''\n", + "from sklearn.preprocessing import OneHotEncoder\n", + "\n", + "import numpy as np\n", + "import tensorflow as tf\n", + "\n", + "sns.set(style=\"ticks\", color_codes=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1. Target data format\n", + "\n", + "The first step is to change the target of the dataset from a continuous variable (the value of the house) to a categorical one. In this case we will change it to have two categories, specifying whether the value of the house is higher or lower than the average.\n", + "\n", + "In the code block below, write code to change the ‘target’ column to a categorical variable instead of a continuous one. This variable should be 1 if the target is higher than the average value, and 0 if it is lower. You can use np.mean() to calculate the average value. Then, you can iterate over all entries in the column, and compare each value to the average to decide if it is higher or lower. Finally, you can use the int() function to convert the True/False values to 0 and 1." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "dataset = load_boston()\n", + "houses = pd.DataFrame(dataset.data, columns=dataset.feature_names)\n", + "houses['target'] = dataset.target\n", + "\n", + "# WRITE CODE TO CONVERT 'TARGET' COLUMN FROM CONTINUOUS TO CATEGORICAL" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "'''check your work'''\n", + "print np.max(houses['target']), \"<-- should be 1\"\n", + "print np.min(houses['target']), \"<-- should be 0\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2. Target data encoding\n", + "\n", + "Since we are now dealing with a classification problem, our target values need to be encoded using one-hot encoding (OHE) (see Lab 3 for a description of what this is and why it's necessary). In the code block below, use scikit-learn's `OneHotEncoder()` module to ocnvert the y target array to OHE.\n", + "\n", + "_hint_: when you create the onehotencoder object, pass in the variable sparse=false to give the resulting data the proper formatting each value in y should be a two-part array, either [0,1] or [1,0] depending on the target value." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "houses_array = houses.as_matrix().astype(float)\n", + "np.random.shuffle(houses_array)\n", + "\n", + "X = houses_array[:, :-1]\n", + "y = houses_array[:, -1]\n", + "\n", + "# USE SCIKIT-LEARN'S ONE-HOT ENCODING MODULE TO \n", + "# CONVERT THE y ARRAY OF TARGETS TO ONE-HOT ENCODING.\n", + "\n", + "X = X / X.max(axis=0)\n", + "\n", + "trainingSplit = int(.7 * houses_array.shape[0])\n", + "X_train = X[:trainingSplit]\n", + "y_train = y[:trainingSplit]\n", + "X_test = X[trainingSplit:]\n", + "y_test = y[trainingSplit:]\n", + "\n", + "print('Training set', X_train.shape, y_train.shape)\n", + "print('Test set', X_test.shape, y_test.shape)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "'''check your work'''\n", + "print y_train.shape[1], \"<-- should be 2\"\n", + "print y_test.shape[1], \"<-- should be 2\"\n", + "print y_train[0], \"<-- should be either [0. 1.] or [1. 0.]\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# helper variables\n", + "num_samples = X_train.shape[0]\n", + "num_features = X_train.shape[1]\n", + "num_outputs = y_train.shape[1]\n", + "\n", + "# Hyper-parameters\n", + "batch_size = 50\n", + "num_hidden_1 = 32\n", + "num_hidden_2 = 32\n", + "learning_rate = 0.03\n", + "training_epochs = 400\n", + "dropout_keep_prob = 0.25 # 0.5 # set to no dropout by default\n", + "\n", + "# variable to control the resolution at which the training results are stored\n", + "display_step = 1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3. Perfomance measure\n", + "\n", + "Instead of measuring the average error in the prediction of a continuous variable, we now want our performance measure to be the number of samples for which we guess the right category.\n", + "\n", + "As before, this function takes in an array of predictions and an array of targets. This time, however, each prediction or target is represented by a two-piece array. With the predictions, the two values represent the confidence of the system for choosing either value as the category. Because these predictions are generated through the [softmax function](https://en.wikipedia.org/wiki/Softmax_function), they are guaranteed to add up to 1.0, so they can be interpreted as the percentage of confidence behind each category. In our two category example,\n", + "\n", + "- A prediction of [1,0] means complete confidence that the sample belongs in the first category\n", + "- A prediction of [0,1] means complete confidence that the sample belongs in the second category\n", + "- A prediction of [0.5,0.5] means the system is split, and cannot clearly decide which category the sample belongs to.\n", + "\n", + "With the targets, the two values are the one-hot encodings generated previously. You can now see how the one-hot encoding actually represents the target values in the same format as the predictions coming from the model. This is helpful because while the model is training all it has to do is try to match the prediction arrays to the encoded targets. Infact, this is exactly what our modified cost function will do.\n", + "\n", + "For our accuracy measure, we want to take these two arrays of predictions and targets, see how many of them match (correct classification), then devide by the total number of predictions to get the ratio of accurate guesses, and multiply by 100.0 to convert it to a percentage.\n", + "\n", + "_hints:_ \n", + "\n", + "- numpy's np.argmax() function will give you the position of the largest value in the array along an axis, so executing np.argmax(predictions, 1) will convert the confidence measures to the single most likely category.\n", + "- once you have a list of single-value predictions, you can compare them using the '==' operator to see how many match (matches result in a 'True' and mismatches result in a 'False')\n", + "- you can use numpy's np.sum() function to find out the total number of 'True' statements, and divide them by the total number of predictions to get the ratio of accurate predictions." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def accuracy(predictions, targets):\n", + " \n", + " # IMPLEMENT THE NEW ACCURACY MEASURE HERE\n", + " accuracy = \n", + " \n", + " return accuracy\n", + "\n", + "def weight_variable(shape):\n", + " initial = tf.truncated_normal(shape, stddev=0.1)\n", + " return tf.Variable(initial)\n", + "\n", + "def bias_variable(shape):\n", + " initial = tf.constant(0.1, shape=shape)\n", + " return tf.Variable(initial)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4. Model definition\n", + "\n", + "For the most part, our model definition will stay roughtly the same. The major difference is that the final layer in our network now contains two values, which are interpreted as the confidence that the network has in classifying each input set of data as belonging to either the first or second category. \n", + "\n", + "However, as the raw output of the network, these outputs can take on any value. In order to interpret them for categorization it is typical to use the softmax function, which converts a range of values to a probability distribution along a number of categories. For example, if the outputs from the network from a given input are [1,000,000 and 10], we would like to interpret that as [0.99 and 0.01], or almost full confidence that the sample belongs in the first category. Similarly, if the outputs are closer together, such as 10 and 5, we would like to interpret it as something like [0.7 and 0.3], which shows that the first category is still more likely, but it is not as confident as before. This is exactly what the softmax function does. The exact formulation of the softmax function is not so important, as long as you know that the goal is to take the raw outputs from the neural network, and convert them to a set of values that preserve the relationship between the outputs while summing up to 1.0.\n", + "\n", + "To adapt our code for classification, we simply have to wrap all of our outputs in a `tf.nn.softmax()` function, which will convert the raw outputs to confidence measures. We will also replace the MSE error function with a cross-entropy function which performs better with classification tasks. Look for comments below for implementation details." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "graph = tf.Graph()\n", + "\n", + "with graph.as_default():\n", + " \n", + " x = tf.placeholder(tf.float32, shape=(None, num_features))\n", + " _y = tf.placeholder(tf.float32, shape=(None))\n", + " \n", + " keep_prob = tf.placeholder(tf.float32)\n", + " \n", + " tf_X_test = tf.constant(X_test, dtype=tf.float32)\n", + " tf_X_train = tf.constant(X_train, dtype=tf.float32)\n", + " \n", + " \n", + " W_fc1 = weight_variable([num_features, num_hidden_1])\n", + " b_fc1 = bias_variable([num_hidden_1])\n", + " \n", + " W_fc2 = weight_variable([num_hidden_1, num_hidden_2])\n", + " b_fc2 = bias_variable([num_hidden_2])\n", + " \n", + " W_fc3 = weight_variable([num_hidden_2, num_outputs])\n", + " b_fc3 = bias_variable([num_outputs])\n", + " \n", + " \n", + " def model(data, keep):\n", + " \n", + " fc1 = tf.nn.sigmoid(tf.matmul(data, W_fc1) + b_fc1)\n", + " fc1_drop = tf.nn.dropout(fc1, keep)\n", + " \n", + " fc2 = tf.nn.sigmoid(tf.matmul(fc1_drop, W_fc2) + b_fc2)\n", + " fc2_drop = tf.nn.dropout(fc2, keep)\n", + " \n", + " fc3 = tf.matmul(fc2_drop, W_fc3) + b_fc3\n", + " \n", + " return fc3\n", + " \n", + " '''for our loss function we still want to get the raw outputs \n", + " of the model, but since it no longer represents the actual prediction \n", + " we rename the variable to ‘output’'''\n", + " output = model(x, keep_prob)\n", + " \n", + " # WHEN WE CALCULATE THE PREDICTIONS, WE NEED TO WRAP EACH OUTPUT IN A\n", + " # tf.nn.softmax() FUNCTION. THE FIRST ONE HAS BEEN DONE FOR YOU:\n", + " prediction = tf.nn.softmax(output)\n", + " test_prediction = model(tf_X_test, 1.0)\n", + " train_prediction = model(tf_X_train, 1.0)\n", + " \n", + " '''finally, we replace our previous MSE cost function with the\n", + " cross-entropy function included in Tensorflow. This function takes in the\n", + " raw output of the network and calculates the average loss with the target'''\n", + " loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(output, _y))\n", + " optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss)\n", + " \n", + " saver = tf.train.Saver()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now that we have replaced the relevant accuracy measures and loss function, our training process is exactly the same, meaning we can run the same training process and plotting code to visualize the results. The only difference is that with classificiation we are using an accuracy rather than an error measure, so the better our model is performing, the higher the graph should be (higher accuracy is better, while lower error is better)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "results = []\n", + "\n", + "with tf.Session(graph=graph) as session:\n", + " \n", + " tf.initialize_all_variables().run()\n", + " print('Initialized')\n", + "\n", + " for epoch in range(training_epochs):\n", + " \n", + " indexes = range(num_samples)\n", + " random.shuffle(indexes)\n", + " \n", + " for step in range(int(math.floor(num_samples/float(batch_size)))):\n", + " offset = step * batch_size\n", + " \n", + " batch_data = X_train[indexes[offset:(offset + batch_size)]]\n", + " batch_labels = y_train[indexes[offset:(offset + batch_size)]]\n", + "\n", + " feed_dict = {x : batch_data, _y : batch_labels, keep_prob: dropout_keep_prob}\n", + " \n", + " _, l, p = session.run([optimizer, loss, prediction], feed_dict=feed_dict)\n", + "\n", + " if (epoch % display_step == 0):\n", + " batch_acc = accuracy(p, batch_labels)\n", + " train_acc = accuracy(train_prediction.eval(session=session), y_train)\n", + " test_acc = accuracy(test_prediction.eval(session=session), y_test)\n", + " results.append([epoch, batch_acc, train_acc, test_acc])\n", + "\n", + " save_path = saver.save(session, \"model_houses_classification.ckpt\")\n", + " print(\"Model saved in file: %s\" % save_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "df = pd.DataFrame(data=results, columns = [\"epoch\", \"batch_acc\", \"train_acc\", \"test_acc\"])\n", + "df.set_index(\"epoch\", drop=True, inplace=True)\n", + "\n", + "fig, ax = plt.subplots(1, 1, figsize=(10, 4))\n", + " \n", + "ax.plot(df)\n", + "ax.set(xlabel='Epoch',\n", + " ylabel='Error',\n", + " title='Training result')\n", + " \n", + "ax.legend(df.columns, loc=1)\n", + "\n", + "print \"Maximum test accuracy: %.2f%%\" % np.max(df[\"test_acc\"])" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "### 5. Hyper-parameter tuning\n", + "\n", + "While the model specification is correct, if you train the model using the previous hyper-parameters, the visualized results will not seem so promising. This can be for a number of reasons, including that the network is too deep or not deep enough, the learning rate is too fast or not fast enough, we are not training for enough epochs, our batch size is either too big or too small, or we can benefit from other regularization strategies such as dropout.\n", + "\n", + "Infact, the tuning of hyper-parameters is one of the most difficult problems in applied machine learning, precisely since it is often not clear how these should be set at the outset. While there are some heuristic 'best practice' strategies out there that people have developed, for the most part researchers experiment with different settings for hyper-parameters until they get the results they want.\n", + "\n", + "For the last part of the assignment, experiment with different settings for the hyper-parameters specified at the top of the lab. With different combinations of parameters you should be able to achieve **at least 90% accuracy in the test set** without having to train the model for more than 500 epochs. Once you achieve this accuracy, save your edits and submit your work as a pull request back to the main project." + ] + } + ], + "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.12" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/notebooks/week-4/Week4-2 sw3036.ipynb b/notebooks/week-4/Week4-2 sw3036.ipynb new file mode 100644 index 0000000..37ddc52 --- /dev/null +++ b/notebooks/week-4/Week4-2 sw3036.ipynb @@ -0,0 +1,1225 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "import math\n", + "import random\n", + "\n", + "import seaborn as sns\n", + "import matplotlib.pyplot as plt\n", + "import pandas as pd\n", + "from sklearn.datasets import load_boston\n", + "\n", + "'''Since this is a classification problem, we will need to \n", + "represent our targets as one-hot encoding vectors (see previous lab).\n", + "To do this we will use scikit-learn's OneHotEncoder module \n", + "which we import here'''\n", + "from sklearn.preprocessing import OneHotEncoder\n", + "\n", + "import numpy as np\n", + "import tensorflow as tf\n", + "\n", + "sns.set(style=\"ticks\", color_codes=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "21.6\n", + "1.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "1.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "0.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "1.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "0.0\n", + "1.0\n", + "0.0\n", + "0.0\n" + ] + } + ], + "source": [ + "dataset = load_boston()\n", + "houses = pd.DataFrame(dataset.data, columns=dataset.feature_names)\n", + "houses['target'] = dataset.target\n", + "\n", + "averageprice = np.mean(houses['target'])\n", + "#print averageprice\n", + "print houses['target'][1]\n", + "for i, house in enumerate(houses['target']):\n", + " houses['target'][i]=int(house>averageprice)\n", + " if house > averageprice:\n", + " houses['target'][i] = 1\n", + " else:\n", + " houses['target'][i]=0\n", + " print houses['target'][i]\n", + "\n", + "# WRITE CODE TO CONVERT 'TARGET' COLUMN FROM CONTINUOUS TO CATEGORICAL" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1.0 <-- should be 1\n", + "0.0 <-- should be 0\n" + ] + } + ], + "source": [ + "'''check your work'''\n", + "print np.max(houses['target']), \"<-- should be 1\"\n", + "print np.min(houses['target']), \"<-- should be 0\"" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[2]\n", + "[0 2]\n", + "(506, 1)\n", + "[[ 1. 0.]\n", + " [ 1. 0.]\n", + " [ 1. 0.]\n", + " ..., \n", + " [ 0. 1.]\n", + " [ 1. 0.]\n", + " [ 0. 1.]]\n", + "(506, 2)\n", + "('Training set', (354, 13), (354, 2))\n", + "('Test set', (152, 13), (152, 2))\n" + ] + } + ], + "source": [ + "houses_array = houses.as_matrix().astype(float)\n", + "np.random.shuffle(houses_array)\n", + "\n", + "X = houses_array[:, :-1]\n", + "y = houses_array[:, -1]\n", + "\n", + "# USE SCIKIT-LEARN'S ONE-HOT ENCODING MODULE TO \n", + "# CONVERT THE y ARRAY OF TARGETS TO ONE-HOT ENCODING.\n", + "\n", + "y = y.reshape(-1,1)\n", + "\n", + "# create an instance of the one-hot encoding function from the sci-kit learn library\n", + "enc = OneHotEncoder(categorical_features='all', handle_unknown='error', n_values='auto', sparse=False)\n", + "# use the function to figure out how many categories exist in the data\n", + "enc.fit(y)\n", + "print enc.n_values_\n", + "print enc.feature_indices_\n", + "\n", + "print y.shape\n", + "\n", + "# convert only the target data in the training set to one-hot encoding\n", + "y=enc.transform(y)\n", + "print y\n", + "print y.shape\n", + "\n", + "\n", + "X = X / X.max(axis=0)\n", + "\n", + "trainingSplit = int(.7 * houses_array.shape[0])\n", + "X_train = X[:trainingSplit]\n", + "y_train = y[:trainingSplit]\n", + "X_test = X[trainingSplit:]\n", + "y_test = y[trainingSplit:]\n", + "\n", + "print('Training set', X_train.shape, y_train.shape)\n", + "print('Test set', X_test.shape, y_test.shape)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2 <-- should be 2\n", + "2 <-- should be 2\n", + "[ 1. 0.] <-- should be either [0. 1.] or [1. 0.]\n" + ] + } + ], + "source": [ + "'''check your work'''\n", + "print y_train.shape[1], \"<-- should be 2\"\n", + "print y_test.shape[1], \"<-- should be 2\"\n", + "print y_train[0], \"<-- should be either [0. 1.] or [1. 0.]\"" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# helper variables\n", + "num_samples = X_train.shape[0]\n", + "num_features = X_train.shape[1]\n", + "num_outputs = y_train.shape[1]\n", + "\n", + "# Hyper-parameters\n", + "batch_size = 40\n", + "num_hidden_1 = 20\n", + "num_hidden_2 = 20\n", + "learning_rate = 0.5\n", + "training_epochs = 500\n", + "dropout_keep_prob = 1 # 0.5 # set to no dropout by default\n", + "\n", + "# variable to control the resolution at which the training results are stored\n", + "display_step = 5" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "100.0\n", + "100.0\n" + ] + } + ], + "source": [ + "def accuracy(predictions, targets):\n", + " \n", + " # IMPLEMENT THE NEW ACCURACY MEASURE HERE\n", + " predictions = np.argmax(predictions, 1)\n", + "\n", + " targets = np.argmax(targets, 1)\n", + "\n", + " n_correct = float(np.sum(predictions==targets))\n", + "\n", + " n_pts = float(predictions.shape[0])\n", + " accuracy = n_correct/n_pts*100.0\n", + " print accuracy\n", + " return accuracy\n", + "\n", + "def weight_variable(shape):\n", + " initial = tf.truncated_normal(shape, stddev=0.1)\n", + " return tf.Variable(initial)\n", + "\n", + "def bias_variable(shape):\n", + " initial = tf.constant(0.1, shape=shape)\n", + " return tf.Variable(initial)\n", + "\n", + "print accuracy(y, y)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "graph = tf.Graph()\n", + "\n", + "with graph.as_default():\n", + " \n", + " x = tf.placeholder(tf.float32, shape=(None, num_features))\n", + " _y = tf.placeholder(tf.float32, shape=(None))\n", + " \n", + " keep_prob = tf.placeholder(tf.float32)\n", + " \n", + " tf_X_test = tf.constant(X_test, dtype=tf.float32)\n", + " tf_X_train = tf.constant(X_train, dtype=tf.float32)\n", + " \n", + " \n", + " W_fc1 = weight_variable([num_features, num_hidden_1])\n", + " b_fc1 = bias_variable([num_hidden_1])\n", + " \n", + " W_fc2 = weight_variable([num_hidden_1, num_hidden_2])\n", + " b_fc2 = bias_variable([num_hidden_2])\n", + " \n", + " W_fc3 = weight_variable([num_hidden_2, num_outputs])\n", + " b_fc3 = bias_variable([num_outputs])\n", + " \n", + " \n", + " def model(data, keep):\n", + " \n", + " fc1 = tf.nn.sigmoid(tf.matmul(data, W_fc1) + b_fc1)\n", + " fc1_drop = tf.nn.dropout(fc1, keep)\n", + " \n", + " fc2 = tf.nn.sigmoid(tf.matmul(fc1_drop, W_fc2) + b_fc2)\n", + " fc2_drop = tf.nn.dropout(fc2, keep)\n", + " \n", + " fc3 = tf.matmul(fc2_drop, W_fc3) + b_fc3\n", + " \n", + " return fc3\n", + " \n", + " '''for our loss function we still want to get the raw outputs \n", + " of the model, but since it no longer represents the actual prediction \n", + " we rename the variable to ‘output’'''\n", + " output = model(x, keep_prob)\n", + " \n", + " # WHEN WE CALCULATE THE PREDICTIONS, WE NEED TO WRAP EACH OUTPUT IN A\n", + " # tf.nn.softmax() FUNCTION. THE FIRST ONE HAS BEEN DONE FOR YOU:\n", + " prediction = tf.nn.softmax(output)\n", + " test_prediction = model(tf_X_test, 1.0)\n", + " train_prediction = model(tf_X_train, 1.0)\n", + " \n", + " '''finally, we replace our previous MSE cost function with the\n", + " cross-entropy function included in Tensorflow. This function takes in the\n", + " raw output of the network and calculates the average loss with the target'''\n", + " loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(output, _y))\n", + " optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss)\n", + " \n", + " saver = tf.train.Saver()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "52.5\n", + "42.6553672316\n", + "38.1578947368\n", + "52.5\n", + "57.3446327684\n", + "61.8421052632\n", + "52.5\n", + "42.6553672316\n", + "38.1578947368\n", + "55.0\n", + "57.3446327684\n", + "61.8421052632\n", + "55.0\n", + "57.3446327684\n", + "61.8421052632\n", + "57.5\n", + "57.3446327684\n", + "61.8421052632\n", + "55.0\n", + "57.3446327684\n", + "61.8421052632\n", + "55.0\n", + "57.3446327684\n", + "61.8421052632\n", + "40.0\n", + "57.3446327684\n", + "61.8421052632\n", + "50.0\n", + "67.2316384181\n", + "65.7894736842\n", + "60.0\n", + "57.3446327684\n", + "61.8421052632\n", + "57.5\n", + "76.5536723164\n", + "69.7368421053\n", + "87.5\n", + "79.0960451977\n", + "72.3684210526\n", + "87.5\n", + "79.6610169492\n", + "71.7105263158\n", + "80.0\n", + "79.3785310734\n", + "69.7368421053\n", + "90.0\n", + "79.9435028249\n", + "73.6842105263\n", + "85.0\n", + "83.0508474576\n", + "75.6578947368\n", + "90.0\n", + "85.0282485876\n", + "77.6315789474\n", + "85.0\n", + "84.4632768362\n", + "76.9736842105\n", + "60.0\n", + "74.8587570621\n", + "69.7368421053\n", + "87.5\n", + "87.0056497175\n", + "80.2631578947\n", + "85.0\n", + "81.6384180791\n", + "75.0\n", + "90.0\n", + "85.8757062147\n", + "77.6315789474\n", + "87.5\n", + "88.7005649718\n", + "81.5789473684\n", + "87.5\n", + "89.2655367232\n", + "81.5789473684\n", + "77.5\n", + "88.9830508475\n", + "78.9473684211\n", + "95.0\n", + "90.1129943503\n", + "82.2368421053\n", + "90.0\n", + "87.0056497175\n", + "79.6052631579\n", + "77.5\n", + "85.0282485876\n", + "78.2894736842\n", + "92.5\n", + "89.2655367232\n", + "78.9473684211\n", + "80.0\n", + "85.3107344633\n", + "78.9473684211\n", + "85.0\n", + "91.2429378531\n", + "82.2368421053\n", + "92.5\n", + "89.5480225989\n", + "79.6052631579\n", + "90.0\n", + "89.8305084746\n", + "82.8947368421\n", + "82.5\n", + "88.7005649718\n", + "81.5789473684\n", + "95.0\n", + "87.2881355932\n", + "79.6052631579\n", + "95.0\n", + "90.1129943503\n", + "82.2368421053\n", + "92.5\n", + "90.9604519774\n", + "82.2368421053\n", + "80.0\n", + "84.4632768362\n", + "78.2894736842\n", + "87.5\n", + "88.7005649718\n", + "81.5789473684\n", + "90.0\n", + "90.9604519774\n", + "81.5789473684\n", + "82.5\n", + "90.6779661017\n", + "80.2631578947\n", + "95.0\n", + "90.1129943503\n", + "83.5526315789\n", + "95.0\n", + "90.6779661017\n", + "80.9210526316\n", + "87.5\n", + "90.1129943503\n", + "83.5526315789\n", + "92.5\n", + "85.3107344633\n", + "78.9473684211\n", + "87.5\n", + "89.8305084746\n", + "83.5526315789\n", + "90.0\n", + "88.418079096\n", + "81.5789473684\n", + "87.5\n", + "91.2429378531\n", + "83.5526315789\n", + "80.0\n", + "86.7231638418\n", + "80.2631578947\n", + "95.0\n", + "89.5480225989\n", + "83.5526315789\n", + "82.5\n", + "83.0508474576\n", + "78.2894736842\n", + "90.0\n", + "90.6779661017\n", + "80.9210526316\n", + "92.5\n", + "91.5254237288\n", + "82.8947368421\n", + "87.5\n", + "90.395480226\n", + "82.8947368421\n", + "80.0\n", + "89.5480225989\n", + "82.8947368421\n", + "85.0\n", + "91.2429378531\n", + "83.5526315789\n", + "87.5\n", + "90.395480226\n", + "83.5526315789\n", + "90.0\n", + "88.1355932203\n", + "80.2631578947\n", + "85.0\n", + "90.9604519774\n", + "82.8947368421\n", + "100.0\n", + "90.395480226\n", + "81.5789473684\n", + "95.0\n", + "90.1129943503\n", + "81.5789473684\n", + "87.5\n", + "90.9604519774\n", + "83.5526315789\n", + "87.5\n", + "90.9604519774\n", + "81.5789473684\n", + "80.0\n", + "89.2655367232\n", + "83.5526315789\n", + "92.5\n", + "91.2429378531\n", + "82.2368421053\n", + "97.5\n", + "90.395480226\n", + "80.9210526316\n", + "92.5\n", + "90.395480226\n", + "81.5789473684\n", + "80.0\n", + "87.2881355932\n", + "80.2631578947\n", + "92.5\n", + "91.2429378531\n", + "83.5526315789\n", + "92.5\n", + "90.395480226\n", + "82.8947368421\n", + "90.0\n", + "89.8305084746\n", + "80.9210526316\n", + "85.0\n", + "89.2655367232\n", + "83.5526315789\n", + "87.5\n", + "90.1129943503\n", + "81.5789473684\n", + "95.0\n", + "90.6779661017\n", + "83.5526315789\n", + "77.5\n", + "87.0056497175\n", + "79.6052631579\n", + "85.0\n", + "86.7231638418\n", + "78.9473684211\n", + "90.0\n", + "91.2429378531\n", + "82.8947368421\n", + "95.0\n", + "91.2429378531\n", + "82.8947368421\n", + "87.5\n", + "91.5254237288\n", + "82.8947368421\n", + "95.0\n", + "90.6779661017\n", + "83.5526315789\n", + "97.5\n", + "90.6779661017\n", + "82.8947368421\n", + "82.5\n", + "90.1129943503\n", + "84.2105263158\n", + "90.0\n", + "90.6779661017\n", + "82.2368421053\n", + "85.0\n", + "91.2429378531\n", + "84.2105263158\n", + "82.5\n", + "91.2429378531\n", + "82.8947368421\n", + "92.5\n", + "90.9604519774\n", + "84.2105263158\n", + "92.5\n", + "91.2429378531\n", + "83.5526315789\n", + "92.5\n", + "90.395480226\n", + "81.5789473684\n", + "87.5\n", + "90.395480226\n", + "84.2105263158\n", + "85.0\n", + "90.395480226\n", + "84.2105263158\n", + "95.0\n", + "91.2429378531\n", + "83.5526315789\n", + "85.0\n", + "91.2429378531\n", + "84.2105263158\n", + "97.5\n", + "90.1129943503\n", + "84.2105263158\n", + "95.0\n", + "91.5254237288\n", + "82.2368421053\n", + "92.5\n", + "89.8305084746\n", + "81.5789473684\n", + "95.0\n", + "90.1129943503\n", + "81.5789473684\n", + "97.5\n", + "90.6779661017\n", + "83.5526315789\n", + "87.5\n", + "90.395480226\n", + "80.9210526316\n", + "100.0\n", + "90.9604519774\n", + "84.2105263158\n" + ] + } + ], + "source": [ + "results = []\n", + "\n", + "with tf.Session(graph=graph) as session:\n", + " \n", + " tf.initialize_all_variables().run()\n", + " #print('Initialized')\n", + "\n", + " for epoch in range(training_epochs):\n", + " \n", + " indexes = range(num_samples)\n", + " random.shuffle(indexes)\n", + " \n", + " for step in range(int(math.floor(num_samples/float(batch_size)))):\n", + " offset = step * batch_size\n", + " \n", + " batch_data = X_train[indexes[offset:(offset + batch_size)]]\n", + " batch_labels = y_train[indexes[offset:(offset + batch_size)]]\n", + "\n", + " feed_dict = {x : batch_data, _y : batch_labels, keep_prob: dropout_keep_prob}\n", + " \n", + " _, l, p = session.run([optimizer, loss, prediction], feed_dict=feed_dict)\n", + "\n", + " if (epoch % display_step == 0):\n", + " batch_acc = accuracy(p, batch_labels)\n", + " train_acc = accuracy(train_prediction.eval(session=session), y_train)\n", + " test_acc = accuracy(test_prediction.eval(session=session), y_test)\n", + " results.append([epoch, batch_acc, train_acc, test_acc])\n", + "\n", + " save_path = saver.save(session, \"model_houses_classification.ckpt\")\n", + " #print(\"Model saved in file: %s\" % save_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Maximum test accuracy: 84.21%\n" + ] + }, + { + "data": { + "image/png": "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\nHh11j2cNAykQCMjn8/GcIa7mzJmjXbt26bHHHtPjjz+uxx9/XNOnT9fChQv1+OOP87xhwHg8Hh05\nckQFBQWn/Dmzrlu3bl1cPsUQl56erl//+tcaNWqUbDab7rzzTn344Ye6+eab5XQ6B3t6SBJNTU36\n5JNPVFlZqZ07d2rGjBlKTU1Va2urMjMz5ff7tWXLFk2aNEk+n08///nP5fP5dOONN8pqtcput6ui\nokI7duxQcXGxamtr9bOf/UyjR4/WqlWrBvvjIUGsW7dOTz75pH79618rPz9fTU1NampqktVqVUpK\ncMU7zxri4Y477pDNZpNpmiovL9e2bdv05JNP6rrrrlNRURHPGeLGZrMpNzc36s+uXbtUVFSkhQsX\nSuK/a4iPDRs2yOFwSJI+/vhjrVu3TjU1NVq3bp2cTucpfc7Yo9ZLl1xyiWpqavTrX/9abrdbU6dO\n1W9/+1vl5uYO9tSQRN577z195zvfkWEYMgxDGzZskCRdeumluvXWW7VixQp5vV6tXbtWDQ0NmjVr\nlrZu3Sq73R5+j5/85CeyWq266qqr5PP5NG/ePP3sZz8brI+EBPTggw/KMAz9y7/8S9T1W2+9VZde\neqkk8awhLqqqqnT99dersrJSmZmZmjJliu69995wtzOeMwykzueR8rwhHo4fP66rr75atbW1ys3N\nVWlpqXbu3KkRI0ZIOrXPmWGaphm3TwYAAAAA6Df2qAEAAABAgiGoAQAAAECCIagBAAAAQIIhqAEA\nAABAgiGoAQAAAECCIagBAAAAQIIhqAEAAABAgiGoAQAAAECCIagBAAAAQIIhqAEAhrRNmzapuLi4\ny5+pU6dq69atp3w+jzzyiIqLi1VbW3vKfzYAIHmkDPYEAAAYaE6nU7/73e+6XB81atQpn4thGDIM\n45T/XABAciGoAQCGPMMwNGPGjMGeBgAAvcbSRwDAsFdcXKwtW7boF7/4hc4//3ydc845+vGPfyyP\nxxM17tixY7rqqqs0a9YszZw5U8uXL9f+/fu7vN9jjz2mr3/965oxY4Zmz56t733veyorK4saU1ZW\nphUrVmjmzJn60pe+pMcee2xAPyMAILkQ1AAAw4Lf7+/yJ9KOHTt04MABbdiwQddcc42effZZrV27\nNnzf4/FoyZIl+uCDD3TTTTfpF7/4hWpra7VkyRIdP348PO63v/2tbrjhBp111lnatGmTbrnlFo0b\nN07V1dXhMaZp6tprr9XcuXN1zz336Mwzz9RPfvITHThwYOD/IgAASYGljwCAIa+pqUnTpk2LumYY\nhnbs2KFzzjlHkmS323XPPfeE9485HA7953/+p1avXq0JEybo4YcfVnl5uZ566ilNmDBBkvS5z31O\nF110kbZt26brr79ejY2Nuvvuu3X55Zdr3bp14Z+1YMGCLnNasmSJLr/8cknS2WefrT//+c/605/+\npO9///sD8VcAAEgyBDUAwJDndDq1Y8cOmaYZdX3ixInhr+fPnx/V5ONLX/qSfvrTn2rv3r2aMGGC\n3nrrLZ1xxhnhkCZJ2dnZuuCCC/T2229Lkt5++215vV594xvfOOF8DMPQBRdcEDW/0aNHq7y8vF+f\nEwAwdBDUAABDnmEYOvPMM084Ji8vL+r7jIwMORwOVVZWSpLq6+vlcrm6fd1HH30kSaqrq5MkFRQU\nnHROmZmZUd/bbDa1tLSc9HUAgOGBPWoAAEiqqqqK+r6xsVEtLS3h0JWdnd1lTOh1OTk5khT+Z0VF\nxQDPFgAw1BHUAACQ9NJLL0UtjfzjH/8oi8Wi6dOnS5JKS0u1f/9+HTp0KDymrq5Or776qkpLSyVJ\nM2fOVGpqqh555JFTOncAwNDD0kcAwJBnmqb27NnT5Xpubq6KiookST6fTytXrtTixYt19OhR/epX\nv9I//uM/hvexLVq0SNu2bdP3vvc9/fCHP5TdbtfmzZtls9m0dOlSScHlkj/4wQ/0q1/9Sn6/Xxdf\nfLFM09Tf/vY3ffWrX+3S0AQAgJ4Q1AAAQ57X6w13WIz0zW9+U+vXr5cU7MJYXV2ta6+9Vm1tbfrS\nl76kG2+8MTw2PT1d999/v2699VatXbtWfr9fpaWluu222zRy5MjwuCuvvFJ5eXnatm2bHnvsMaWn\np+vss8/usgeuM8MwopqZAACGN8Ps3AILAIBhpri4WNdff72WLVs22FMBAEASe9QAAAAAIOEQ1AAA\nwx7LDgEAiYaljwAAAACQYKioAQAAAECCIagBAAAAQIIhqAEAAABAgiGoAQAAAECCIagBAAAAQIIh\nqAEAAABAgiGoAQAAAECCIagBAAAAQIL5/wEOpao3vWcvewAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df = pd.DataFrame(data=results, columns = [\"epoch\", \"batch_acc\", \"train_acc\", \"test_acc\"])\n", + "df.set_index(\"epoch\", drop=True, inplace=True)\n", + "\n", + "fig, ax = plt.subplots(1, 1, figsize=(10, 4))\n", + " \n", + "ax.plot(df)\n", + "ax.set(xlabel='Epoch',\n", + " ylabel='Error',\n", + " title='Training result')\n", + " \n", + "ax.legend(df.columns, loc=1)\n", + "\n", + "print \"Maximum test accuracy: %.2f%%\" % np.max(df[\"test_acc\"])" + ] + } + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Python [default]", + "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.12" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/notebooks/week-4/checkpoint b/notebooks/week-4/checkpoint new file mode 100644 index 0000000..f29599c --- /dev/null +++ b/notebooks/week-4/checkpoint @@ -0,0 +1,2 @@ +model_checkpoint_path: "model_houses_classification.ckpt" +all_model_checkpoint_paths: "model_houses_classification.ckpt" diff --git a/notebooks/week-4/model_houses.ckpt b/notebooks/week-4/model_houses.ckpt new file mode 100644 index 0000000..eb813bf Binary files /dev/null and b/notebooks/week-4/model_houses.ckpt differ diff --git a/notebooks/week-4/model_houses.ckpt.meta b/notebooks/week-4/model_houses.ckpt.meta new file mode 100644 index 0000000..afeffe7 Binary files /dev/null and b/notebooks/week-4/model_houses.ckpt.meta differ diff --git a/notebooks/week-4/model_houses_classification.ckpt b/notebooks/week-4/model_houses_classification.ckpt new file mode 100644 index 0000000..bdb275c Binary files /dev/null and b/notebooks/week-4/model_houses_classification.ckpt differ diff --git a/notebooks/week-4/model_houses_classification.ckpt.meta b/notebooks/week-4/model_houses_classification.ckpt.meta new file mode 100644 index 0000000..eaf5ebe Binary files /dev/null and b/notebooks/week-4/model_houses_classification.ckpt.meta differ diff --git a/notebooks/week-4/week4-1 sw3036.ipynb b/notebooks/week-4/week4-1 sw3036.ipynb new file mode 100644 index 0000000..0b5e2fe --- /dev/null +++ b/notebooks/week-4/week4-1 sw3036.ipynb @@ -0,0 +1,545 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "import math\n", + "import random\n", + "\n", + "import seaborn as sns\n", + "import matplotlib.pyplot as plt\n", + "import pandas as pd\n", + "from sklearn.datasets import load_boston\n", + "\n", + "import numpy as np\n", + "import tensorflow as tf\n", + "\n", + "sns.set(style=\"ticks\", color_codes=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " CRIM ZN INDUS CHAS NOX RM AGE DIS RAD TAX \\\n", + "0 0.00632 18.0 2.31 0.0 0.538 6.575 65.2 4.0900 1.0 296.0 \n", + "1 0.02731 0.0 7.07 0.0 0.469 6.421 78.9 4.9671 2.0 242.0 \n", + "2 0.02729 0.0 7.07 0.0 0.469 7.185 61.1 4.9671 2.0 242.0 \n", + "3 0.03237 0.0 2.18 0.0 0.458 6.998 45.8 6.0622 3.0 222.0 \n", + "4 0.06905 0.0 2.18 0.0 0.458 7.147 54.2 6.0622 3.0 222.0 \n", + "\n", + " PTRATIO B LSTAT target \n", + "0 15.3 396.90 4.98 24.0 \n", + "1 17.8 396.90 9.14 21.6 \n", + "2 17.8 392.83 4.03 34.7 \n", + "3 18.7 394.63 2.94 33.4 \n", + "4 18.7 396.90 5.33 36.2 \n" + ] + } + ], + "source": [ + "#load data from scikit-learn library\n", + "dataset = load_boston()\n", + "\n", + "#load data as DataFrame\n", + "houses = pd.DataFrame(dataset.data, columns=dataset.feature_names)\n", + "#add target data to DataFrame\n", + "houses['target'] = dataset.target\n", + "\n", + "#print first 5 entries of data\n", + "print houses.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Boston House Prices dataset\n", + "===========================\n", + "\n", + "Notes\n", + "------\n", + "Data Set Characteristics: \n", + "\n", + " :Number of Instances: 506 \n", + "\n", + " :Number of Attributes: 13 numeric/categorical predictive\n", + " \n", + " :Median Value (attribute 14) is usually the target\n", + "\n", + " :Attribute Information (in order):\n", + " - CRIM per capita crime rate by town\n", + " - ZN proportion of residential land zoned for lots over 25,000 sq.ft.\n", + " - INDUS proportion of non-retail business acres per town\n", + " - CHAS Charles River dummy variable (= 1 if tract bounds river; 0 otherwise)\n", + " - NOX nitric oxides concentration (parts per 10 million)\n", + " - RM average number of rooms per dwelling\n", + " - AGE proportion of owner-occupied units built prior to 1940\n", + " - DIS weighted distances to five Boston employment centres\n", + " - RAD index of accessibility to radial highways\n", + " - TAX full-value property-tax rate per $10,000\n", + " - PTRATIO pupil-teacher ratio by town\n", + " - B 1000(Bk - 0.63)^2 where Bk is the proportion of blacks by town\n", + " - LSTAT % lower status of the population\n", + " - MEDV Median value of owner-occupied homes in $1000's\n", + "\n", + " :Missing Attribute Values: None\n", + "\n", + " :Creator: Harrison, D. and Rubinfeld, D.L.\n", + "\n", + "This is a copy of UCI ML housing dataset.\n", + "http://archive.ics.uci.edu/ml/datasets/Housing\n", + "\n", + "\n", + "This dataset was taken from the StatLib library which is maintained at Carnegie Mellon University.\n", + "\n", + "The Boston house-price data of Harrison, D. and Rubinfeld, D.L. 'Hedonic\n", + "prices and the demand for clean air', J. Environ. Economics & Management,\n", + "vol.5, 81-102, 1978. Used in Belsley, Kuh & Welsch, 'Regression diagnostics\n", + "...', Wiley, 1980. N.B. Various transformations are used in the table on\n", + "pages 244-261 of the latter.\n", + "\n", + "The Boston house-price data has been used in many machine learning papers that address regression\n", + "problems. \n", + " \n", + "**References**\n", + "\n", + " - Belsley, Kuh & Welsch, 'Regression diagnostics: Identifying Influential Data and Sources of Collinearity', Wiley, 1980. 244-261.\n", + " - Quinlan,R. (1993). Combining Instance-Based and Model-Based Learning. In Proceedings on the Tenth International Conference of Machine Learning, 236-243, University of Massachusetts, Amherst. Morgan Kaufmann.\n", + " - many more! (see http://archive.ics.uci.edu/ml/datasets/Housing)\n", + "\n" + ] + } + ], + "source": [ + "print dataset['DESCR']" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nXiYmqSD+pMwcvt0YQUsbn1krrT+PxzGqcyiuKhnBnmoGtwrmj2MlvxfRp2lAkTaTl51kwOw9DJ6z\nj8Fz9pGcpWPq8n/YcDyu3LHdSSKVYq9QILWTYiezx14ur7TPoApVX4Vngp999lneffdd+vTpg06n\nY/PmzZw/f54JEyYgkUjo06cPTz31FPv27bvrsmbNmsWUKVMYMWIEnp6eTJgwgaioKBSKwkeOCxYs\nYO7cuUyePJm0tDS8vLxo3rw5np4FpQI9evRg+/btjBw5kuzs7Ar9RFrDrn3JSLzB4onPYieT0aLv\nMMsb19mpSfwy+QVGzFyAk7sX6fHX2ff79+g0uTg4OlOrZUfaDi58iWnXz/NIi7uGvUJB3fbdaTt4\nVJlimTSwPe+t2E2n6YvxdXVk1lPdcVYq2HQikh/3nGDVG48DsO/8Vb7e/Bf5RhO+bo682acN7cML\nTq7Vvd2YNLAD45dsISdPT5Nqvnz4eNlrFwEOxqThqZYzqVst8k0mdkamWL7w4OogY2LXGny2K5LM\nvHxy9IWZfI3eiMlsJvfmuKiUXHZHpfB862qo5HakafT8fCy22Eedtrw3bjSTPv+OtkOfx9fLgzmT\nX8fZUc2G3QdYuHw96+cX1EP+sXM/U+Z8z63z7YbdEbz81GBefmowYx/vz8f/W0zf598iP99IvZrV\n+fCN58u1bcI79SY7+Qar338eO3sZDXoOtXweLSctmXUzXmbQB9+hdvNE6Vz4RQ2F2gmJVIrDzVpy\nkzGfv1YsJDs5Hqm9PZ4hNenxyjSkdmW/abkles5cak6ZQquNG9AlJXHx/fcx5uTg2f0RAp9+mpPP\njLK09erRg/S//iI/+/69xd2oWz8yEm/w49ujsZPJaNn3Catjasmk53nm04U4uXuRFh/Lnt/mo9Pk\norx5TLW7eUwF121M80eHsGb2ZPJys3Hx8qXPK1OsavjvZuqzQ5j83VLaPTcZXw9Xvhg/Gme1ig0R\nx/hh/Q7WzX4XgHkrNyO3t6f7q9Ms3wL+YOww+rRrxtkrsbwz72eyNXl4ODvSv2MLRpWjHriqbRuA\n0La9yE2JZ9vMl5Hay6jd7TG8ahTcJGjSU9gx6zUeeedrVK6eODgV7sdylSMSqRSFo4vV8mKPR9Bw\n4GjKY9/lVLwcFczoFY7BZGbrhSQib34ezU0p470etS3fAq7j48ioFkHI7aRkaA1svZBk9RTrtQ5h\n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\nkcH06dPZuXMn48aNq5BYRowYYbkYFXehlEgkVSYzY+vC+SCdPHmSTz/91DK8bt06XFxcWLduHfb2\n9ixatIjffvutQjrBer2ep59+msjISDp27EiXLl0wm81ER0czf/589u/fz6+//opMJnvgsUDBjVHd\nunU5cOAASqWS119/vdI6wHv37mXGjBk89dRTPPvss5ab6/j4eBYtWsSMGTPw8/OjY8eOFRLP7Nmz\nqVWrFrNnz2b9+vW88MILdOrUiY8++giADz/8kAULFlRIJ7gqGThwIBKJBIlEwjPPPIO9fWG3xmg0\ncv36dTp06FCJEQpVmegEVyENGjSgQYMGTJ48mS1btrBmzRo+//xzunTpwpAhQ2jXrl2lxRYbG8tX\nX33F5s2b6d69Oxs2bKBatWoVGsPVq1epX7++ZXjnzp1069aN/v37A/DGG28wadKkColFoVBYZRRP\nnjzJxIkTraZrNJoKiQVg/vz5rFq1ik8//ZTt27fz8ccfc/r0aaZNm4aPjw+rVq2iVq1aFRKLi4sL\narWaQYMGMWDAAMujW6FASkqKVSnE4cOH6d69u+Xi3bVrVxYsWFAhsfz+++8kJiayfv16QkNDraZF\nR0czcuRIli1bxogRIx54LJs3b2b69OnUrFmTDRs2sHLlSkaNGsWIESN44403kMvlDzyG2/3www+M\nHTuWCRMmWI338/Nj6tSpKJVKFi5cWGGd4NOnT7NkyRLCw8MJDw9nxYoVDB8+3FIC9vTTT1doZnr9\n+vWo1eoS21REPLc6/efPn6d9+/ZWMclkMgICAujRo8cDj0P4dxKd4CpIoVAwYMAABgwYQGxsLFOm\nTGHs2LEcOnSowms609LS+Pbbb1m+fDnNmjXj999/p2HDhhUawy15eXk4Ojpahk+cOMGQIUMsw0FB\nQaSkpFRILLce07755pscO3aM1NRUWrdubZl+7do1S91pRRkyZAht27blnXfeoWfPnphMJl588UVe\nfPFF7OzsKiyO/fv3s2PHDlavXm0pCRk8eDAdO3as8KzrrQzR7cOVzdHRkezsbMvwqVOnrPZjiURi\n8wWfB2H79u28/PLLRTrAAGFhYbz44ots3br1gXeCx48fz549exg/fjzPPPMMEomESZMm0b17dyZP\nnsyePXv47LPPKvTcc/bsWaZNm1bs9IEDB7J06dIKiyczM9NSh6xWq1EqlVZPCV1cXMjNza2weH74\n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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Create a datset of correlations between house features\n", + "corrmat = houses.corr()\n", + "\n", + "# Set up the matplotlib figure\n", + "f, ax = plt.subplots(figsize=(9, 6))\n", + "\n", + "# Draw the heatmap using seaborn\n", + "sns.set_context(\"notebook\", font_scale=0.7, rc={\"lines.linewidth\": 1.5})\n", + "sns.heatmap(corrmat, annot=True, square=True)\n", + "f.tight_layout()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkYAAAJRCAYAAACgDnhPAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzs3XuQZGV9P/73c+6nLzPT0zOzu+xyEYEoK6D5xvyKgP42\nYCVEixL8VgWiRhOTUlFjJAkpTaoSEqMWlVQoK1rRMrFiRVMaQSgxYlIIqGj9vCEoIJHLwrLXuU93\nn/s5z/P7o88MMzu3vs309Oz7VUUVO919+unu0+e8z/M8/XyEUkqBiIiIiKD1uwFEREREOwWDERER\nEVGOwYiIiIgox2BERERElGMwIiIiIsoxGBERERHlGIyIiIiIcgxGRERERDkGIyIiIqIcgxERERFR\njsGIiIiIKMdgRERERJQz+t0Aoq0gpcTc3FzPtlepVKBpvI4gItrtGIxoV5qbm8M9Dz6OYrHc9bY8\nr45rDx1EtVrtQcuIiGgnYzCiXatYLKM8XOl3M4iIaIBwbICIiIgox2BERERElGMwIiIiIsoxGBER\nERHlGIyIiIiIcgxGRERERDkGIyIiIqIcgxERERFRjgs8Em1CSonZ2dmebAdAz0qLsEwJEVHvMRgR\nbcL36rjv+9MYG2t0tZ3Jk8egGSbGxia6bhPLlBARbQ0GI6IWuIVS1+VFGvUFCN1kmRIioh2M/fBE\nREREOQYjIiIiohyDEREREVGOwYiIiIgox2BERERElGMwIiIiIsoxGBERERHlGIyIiIiIcgxGRERE\nRDkGIyIiIqIcgxERERFRjsGIiIiIKMdgRERERJRjMCIiIiLKMRgRERER5RiMiIiIiHIMRkREREQ5\nBiMiIiKiHIMRERERUc7odwOIFkkpMTc315Ntzc7OQinVk20REdGZg8GIdoy5uTnc8+DjKBbLXW9r\n8uQxFIcqGBrpQcOIiOiMwWB0BuplzwwAVCoVaFpvRmWLxTLKw5Wut9OoL/SgNUREdKZhMDoD9bJn\nxvPquPbQQVSr1R60jIiIqL8YjM5QveqZISIi2k0YjKgrUkrMzs72ZFucME1ERP3GYERd8b067vv+\nNMbGGl1vixOmiYio3xiMqGtuocQJ00REtCtwgUciIiKiHIMRERERUY7BiIiIiCjHYERERESUYzAi\nIiIiyjEYEREREeUYjIiIiIhyXMeIaAD1csVxoLeFgImIBhmDEdEA6uWK4ywETET0IgYjogHVqxXH\niYjoRew7JyIiIsqxx2iASCkxNzfX9XZYxZ6IiGhtDEYDZG5uDvc8+DiKxXJX22EVe9oqvQrvizgp\nnHayXu7vnOO3czAYDZhisdz1vBJWsaflevkLt9nZWTz06HGUSkNdb4uTwmmn69XFqufV8Xv/97U9\nahV1i8FoDbzqpTNJL3/httgbyUnhdKboxcUq7SwMRmvo1VUAwKteGgy9+oUbeyOJaNAxGK2DVwFE\n/dXLIT722hJRqxiMiGhH6tUQX72+gNe8cj9GR0e7bpOUEgB6FrIY2Ih2HgYjItqxejHE16gv4L7v\nP9uzOVSaYWJsbKLrbXGYnWhnYjDaYr3+xQ/XHyJqXy/nUAnd5DA70S7GYLTFtuIXP1x/iIiIaGsw\nGG0D/uKHiIhoMHDWHxEREVGOPUZERH3Qy/mHAH/hRtQrDEZERH3Qy/mHO/EXbqwgQIOKwYiIqE96\nNf9wJ2IFARpUuyoY/fzJpxAnadfbWZifR5LuqreGiGjbsYIADaJddfZ/7OlTKI7s63o7p07GyFSM\nUV6cEBH1Hedj0XbaVcFI0zRout71doQmgIwLKRLRYOhlcOhV2ZNeLki72+dj0c6yq4IREdGZqNcL\nyfai7EmvF6Tt1XwsViOgzQi1Sz7Vt771rXjm2cMARNfbkjKDVAJ6D3qfsiwFsLO2tRPbdCZsaye2\n6UzY1k5s05mwrZ3YpsVtKaWgad1vS2YZhKZ13S4lJS684CX4/Oc/33WbqHu7qseo4Dr9bsIarJbu\nlWUZPM9DsVjc4EvW2rZ61aYzaVsbv/9837d6W2u//3zft2tbK99/vu/bLcsyHDt2DJOTk5iY6L5A\nMXVn1/QYDbrHH38cb3rTm/CVr3wFBw8e7Hdzzjh8//uL739/8f3vL77/Owun5RMRERHlGIyIiIiI\ncgxGRERERDkGIyIiIqIcgxERERFRjsGIiIiIKKffeuutt/a7EdRULBbxq7/6qygWi/1uyhmJ739/\n8f3vL77//cX3f+fgOkZEREREOQ6lEREREeUYjIiIiIhyDEZEREREOQYjIiIiotyuCUZvfetb8da3\nvrXfzSAiIto2PPf1ntHvBvTKiRMn+t0EOgMppTBTC9HNbzuLjoGCY/auUUS0o0il8PQL80iz9Q8U\nF79ktKNtnzhxAg0vxJe/8RN4Xh3XHjqIarXaaVMJuygYERERnYmEpqE8XOl3M3aNXTOURkRERNQt\nBiMiIiKiHIMRUZeKTncj0oaugQvQE+1eAsDYiAsh+t0SagXnGBF1QQgB1zZhGTr8MEGYyJYf65ga\nCo4JXef1CdFuJoTA6JCDkmtiesHHfD3pd5NoAwxGRD2g6xpKBQtOJlH3E2Ry/R4gXRMoF0wYugbB\nS0iiM4Zl6thXLWGklOLEtIeojQsp2j4MRkQ9IoSAaegYKWmI0wwNP8HyeCQAlArN3iVNYyAiOhMJ\nIVBwTJy3bwiNIMGJaQ8bXEdRHzAYEfWYpgk4lgHT0BBEKYIog2vrcG0DusZhMyJq9jIPl2wUHAOz\ntajfzaFlGIyItoiuaSg6JlzLgKYJDpvRwPvyl7+Mf/mXf4EQAh/84Adx6NChFbd7noe3vOUtEEJA\nKYWjR4/i/e9/P972trdtaztvu+02PPDAA7AsC5dccgk+/OEPQzvtouQHP/gB3vve9+LAgQMAgOuu\nuw5vf/vbW36Om2++Gc899xyUUpidncWll16KT3ziE0u3P/DAA7jpppvwta99DRdccMG62zENHRMV\nt81XSFuJwYhoCwkhoOsMRNQ+KeWqk3k/tzk/P49//dd/xd13341arYa3ve1teO1rX7tie8ViEXff\nfffSv6+66ipcffXVXbe7Xa997Wtxyy23QNM0/Nmf/RnuvvtuvOlNb1p1v1/7tV/Dxz/+8Y6e4/bb\nb1/6/1tuuQVXXHHF0r/jOMbnPvc5XHbZZS1tixdNOwuDERFRF44dO4abbroJ559/Pn7xi1/gsssu\nw0c+8hFomobHHnsMt912G3zfx8TEBG677TYMDQ3hn/7pn/Dtb38bYRjiiiuuwAc/+EEAzSDxhje8\nAd/97ndxyy234Dvf+Q7uv/9+OI6Da665Bu9+97vx+OOP49Zbb0UURbj44ovxt3/7t7AsC1dddRXe\n9KY34b777oNpmvjnf/5njI2N4UMf+hBs28YTTzyBq6++Gu9617s6ep0PPfQQDh06BNd14bouLrjg\nAvzsZz9b9+T/8MMPY3x8HPv37wcAfPGLX4QQAjfccMOK+91111144IEHMDs7i+npafzO7/xOWz03\na7n88suX/v8Vr3gFTp06teb91lsm4zOf+Qz++7//G0mS4LrrrsPv//7vr/tccRzjoYcewl//9V+v\nePyb3/xmfP7zn+/wFVA/ccIDEVGXnn76abzzne/E17/+dcRxjK9+9atI0xS33XYbPvnJT+LOO+/E\n6173OnzqU58CALz97W/Hl7/8Zdxzzz04fvw4fvKTnyxta9++ffjKV76Cl7/85bj33nvxjW98A3ff\nffdSodAPfvCD+Ku/+it89atfheM4+I//+I8Vj7377rvxmte8Bl/+8peX/r6wsID//M//XBWKHnro\nIVx33XW4/vrrV/z3F3/xF6te4+TkJPbs2bP07z179qwbOADgG9/4Bn7rt35r6d833njjqlC06LHH\nHsOnPvUpfOUrX8EXv/hFvPDCC6vu8773vW9VO6+//nr89Kc/XbcNWZbha1/72orenOV++MMf4o1v\nfCPe85734MiRIwCA7373uzh16hTuuOMO3HXXXXjwwQfx9NNPr/sc3/72t/GqV70KpVIJQDMo//Sn\nP8Vv/MZvcH2yAcUeIyKiLp1zzjm4+OKLAQBveMMb8MADD+DgwYN48skn8fa3vx1KKWRZhosuughA\n8+T72c9+FlEUYXZ2Fq95zWvwqle9CgBwzTXXAADK5TLK5TI+9KEP4eqrr8av//qvo16vI0kSXHLJ\nJQCAN77xjfjsZz+L3/u93wMAvO51rwMAHDx4EA888MBS+37zN39zzXZfeeWVuPLKK3v/hgD4n//5\nH3zpS19q6b5XXnnlUrA4dOgQHnnkEZx99tkr7rN8/k6rbrvtNrzyla/EpZdeuuq2gwcP4v7774fr\nurjvvvvwJ3/yJ7jjjjvw0EMP4Vvf+hZ+/OMfQykF3/fx3HPPrTtP6N5778XrX//6Fc/5p3/6p0v/\nZjgaPAxGREQ9JERzor2UEhdffDE+97nPrbg9jmN87GMfw1133YVqtYrbbrsNcRwv3e66zYm4uq7j\nzjvvxHe/+13813/9F7761a/iIx/5yIYnWsuylh6bZdmqbZ7uoYcewj/8wz+s+vvFF1+Mj370oyv+\nNjExgZ/97GdL/z516hQmJibW3O6PfvQj7N+/f0UP00ZOn2Oz1pyb973vfTh69Oiq+/3N3/zNmsHn\nC1/4Ag4fPoxPf/rTaz5nsVhc+v/Xve51uPXWW6GUglIK733ve3HdddetuP/tt9+Ob33rWxgeHl76\nTKMowve+9z18+MMfXrrfE088gZtuuglKKUxPT+MP//AP8dnPfhYvfelLN3kXOqekRH1hDp5X37Ln\nOJMwGBERden555/Hz3/+c7z85S/H17/+dVxxxRU4//zzcfLkSTz++OM4ePAg4jjG0aNHMT4+Dk3T\nMDw8jHq9jm9+85trzqnxfR9hGOLQoUO45JJL8OY3vxnlchm2beOxxx7DK17xCtxzzz149atf3XG7\n2+kxuuKKK/DJT34Sf/zHf4x6vY6nn356zUACNIfRlveiAM2gAgBvectbVt3/O9/5DhqNBjRNw7e/\n/W28+c1vXnWfdnqMHnzwQdx5553493//93Unm8/MzKBarQJoBrlKpQIhBK644gp8+tOfxjXXXAPH\ncXDs2DEMDw/j5ptvxs0337zqeV796lejUCgs/e2+++5b+v/f/d3fxa233rqloQgAbEvHVa8+BwBQ\nqVS29LnOBAxGRERduvDCC/GZz3wGTz75JC699FJce+210HUdt99+O/7u7/4OnudBSon3vOc9OP/8\n8/HGN74Rr3/967Fnzx688pWvXNrO8p4Sz/Pwnve8B3EcQwiBW265BQDwsY99DLfeeiviOMbLX/5y\n3HjjjaseuxUqlQre8Y534LrrroOmafjQhz60FDre+c534iMf+QjGx8ehlMJ9992HO+64Y8XjDx8+\njF/+5V9ec9uXXHIJ3v3ud2N6ehpvectbVg2jteujH/0o0jRdWjrgmmuuwbve9S7cf//9ePzxx/FH\nf/RHuPfee/HFL34RpmmiUCjg7//+7wEAr3nNa/DMM8/gt3/7t6GUWposv5bT51GdbnHZgq2m6/pS\nyKPuCbVLBkAXfxL6zW9+s88tIaIzybFjx/D+978fd955Z7+bsqO9973vxcc//nEYxsrr8bvuugtP\nPfUU/vzP/7xPLRtsV199NaSUK+aUUXfYY0RE1CWuQ7O5T37yk/1uAlFLGIyIiLqwf//+VcNG1Lrr\nr7++303oilIKSSohBDouDL0Vi3lS5xiMiIiI2tRcgkGhESZIUgkAKNg6nDZqIiqlEKcZ6n6CsWGW\nBdkpGIyIiIjakEmJMErhR9mKv/tRhiDOUHJNWIYOTVu790gphTSTaAQJ0mxXTPPdVRiMiIiIWiCV\nQpJkqAcJ1vvZklJA3U+gaynKBXPV8FomJYIoRXBaqKKdg8GIiIhoA4s9PHU/QSZb6+HJpMJ8I4Zj\n6ig4BoQQiNMMDT8B+4h2NgYjIiKiDTT8BGHSWQ9PmGQIkwyaEJC7Y3WcXY/T4ImIiDbQi0DDUDQ4\nGIyIiIiIcgxGRERERDkGIyIiIqIcJ18TERENsCzLMDMzs+ZtlUqFq2q3icGIiIhogEVxhvt/eGTV\n3z2vjmsPHUS1Wu1DqwYXgxEREdEAE5qG8nCl383YNdi/RkRERJRjMCIiop5TSqHWiJBJ2fE2pFII\n4xSqz2sAGXp3p8osk4g7XCCSth+H0oiIqKf8MMHkXAA/TGGZGkZKNqrDzoqaYRtRSjXricUZpFQI\n9QxF14Bp6Fvc8rUVHAOOpcMPE4RJ60FPKQU/TBHlr8MyNRQcA0afXge1hsGIiIh6IsskTsz48IIX\na4rFicTkXIC6n2C84qLkmhtuI0oy+OHKqvNJJrHQiGGZOkquuW7V+q0ihICuC5QKFpwWa6aFebBL\n0xeDVJRIpFkCy5Io5vXTaOdhMCIioq4opTA9H2C+ESNJ1+5RCaIURyfrKDom9o4WYJore02yTKIR\nJIjXebxCMzQlmYRj6SjY2x8shBAwDR0jJW3dgrBpmsELU8Tr9CxlUiEIUyRJBtfSYffhddDGGIyI\niKhjdS/G1HyAMN58Do2UQN1PEMQ1DBdtTFRcAIAXpojiFK0UrpeyOTwVJxkKtgnb2v5hKU0TcCwD\npqE1h/yiDEopeEGCKJYt1UVLM4V6kCJKJQoOT8U7CT8NIiLqyLGpBupe3FKgWS5NFWYWQvhhgqGS\nDdnuBtAMFjU/RkkZcO2Nh+e2iq5pKDomlAROzHgrhv9aFScSaRbjrLEtaCB1hL9KIyKijkRJ1nYo\nWi5JZUehaDlN9Pc0JoRAnGYdhaJFXfxwj7YAgxERERFRjsGIiIiIKMdgRERERJRjMCIiIiLK8Vdp\nREREAyzLMtTmZ1eth+R59T61aLAxGBEREQ0wJSVedUEZo6Ojq26rVCp9aNFgYzAiIiIaYJquY3R0\nFNVqtd9N2RU4x4iIiIgox2BERDRg0kwiSZtlKPrJ1Ls7hei6QLf1YOWqamXbz87Lg3SKpdJ2Fg6l\nERENCCmb9biOT3vIpMLeagFDRQtGlwGlUwcmSphvRJitRYhaqJW2SNcFygUTe0eLgECzeGySoZ2c\np2sCrm3AMbe/VtrpSq6J8/aVcWrGRyNM2lrJ2jQ0uDZPxTsJPw0ioh1OKYUoznBixkMQvRhATs74\nmJ4PcNZYEQXXhNaHavOVsoPhoo3JOR81L96wNIYAUHAM7K0WYFsvnn6GChbSNEMjTJGkG6cKTQCW\npaPkmDuqKr1p6DiwpwwvSDA5FyCI0g3vb2gCtqXDdYwd9TqIwYiIaEdL0gyzCyFmatGat6eZwpFT\nDRRdA3tGC7BNfdtPtJomsLdaxOiQg5OzPvwgWVVDzbF0VIccDJftNbdhGDpGSnperT5FtkYNNcvQ\nUHTNvvWQtaLomjjPMTBbCzFXjxAnK4OepgGWoaPomtC6HUekLcFgRES0wyilIJVCw09wYtprqVCr\nF6R49lgN4yMORspOV3NeOmWZOs7ZU0bdizE1HyCMMxi6wHDJxkTFbSmwubYBx9LhhQmiuFmk1tAF\nCrYJ2+r/sFkrhBCoDrsYKTs4Neuh7iXIpIJlaig4BkxjMF7HmYrBiIhoh6n7MSZnA8SbDCutZWq+\n2bv00rOGYPZp/k25aKFUMDFbC1EuWLDabIcQAiXXgmNJxEkG1x7M4SZdEzhrrISwnGBqIexLbx61\nj8GIiGiHCaKso1C0SEqFTCmYPWxTuxZ7Tbph6NqOHjZrlW0ZcG2jrcnl1D+Dv8cRERER9QiDERER\nEVGOwYiIiIgox2BERERElOPkayIiogEmZYbZ2dmlf1cqFWga+z06xWBEREQ0wIQQePipGjStAc+r\n49pDB1GtVvvdrIHVl2D0b//2b7jjjjsAAJdffjn+8i//sh/NICIiGni6bmC4wiDUK9ve1zY7O4sv\nfOELuOuuu3DPPffgsccew6OPPrrdzSAi2rG4BmCTUgqylWW/NyCVgurzAkJKqU1rwNHO0ZceoyzL\nEIYhLMtClmUYHR3tRzOIiHaksWEXw0ULp+Z8NPyNi5GezjQ07B8vwhrwshNJmsELUqRSwjZ1lNz2\nisYqpZp11+IMAi+WGtnuladPTHt44rlZhFGG8YqDc/cOsUbaDrftwWh0dBTveMc7cOjQIRiGgRtv\nvBFnn312S4+dnJzE1NTUmrclSQLT7Oc6r0REvaFpArZl4MBEGX6Y4vhUY8Oq9UCzl2lftYhy0YQ+\nwBNvpVRoBDHiRGLxFYdxhiSVcC0dTgvlQaIkgx8mK96zRpAgSjIUt6lWmRckeOSpaUzN+UvtOHKy\ngblahAMTJUyMFlre1mbnPinZG9VL2x6MarUaHnjgATz44IOwbRt/8Ad/gB/96Ef4lV/5lU0f+6Uv\nfQmf+MQn1r39wIEDvWwqEVFfaUKg5Jo4f/8wal6MU7P+mmUlRss2qiPOQBcnVUrBj1KEUQa5xovM\npEIjTBEmEiV37XCTZRKNIFm3nEqSSix4May8B0rbgt6jLJN47NkZHJ1sIIiyVbfX/QS/ODKHU3M+\nzt8/jKKz+QX9Zuc+tzjUVZtppW0PRt/73vdw3nnnoVwuAwAOHTqERx99tKVgdMMNN+Cqq65a87ab\nbrqpp+0kItopDF3D6JCDkmtiesHHfD0BADiWjn1jxb4MEfVSFGfwo2TTXjEASDOJhUYMy9RQci1o\nmoBSCl6YIopTbDYlSanm8y32QPWqQK1SCs+dqOPpF+ax4MUb3jeTwOxCBM+fRnXExflnbRxsNjv3\nhfHqAEad2/ZgtG/fPvzkJz9BHMfQdR0/+MEPcMMNN7T02ImJCUxMTKx5G4fRiGi3s0wd+6oljJRS\nZFKh4JjQB3i+ilQKdS9uu2CuAhAlEkkawTQE0kwha3OStpR5mEokhrocfvSCBD9+chLTCwHaGdWK\nEonjUx4WGjF+6/Liuvfb7NwXp6xO20vbHowuu+wyvPa1r8V1110HXddx+eWXr5uEiYhoJSEECo4J\npdRA9xIBQJrKtkPRclIpxIlCN7Egzbqfn3Ni2sPkXNDx470g6boN1Dt9+VXaBz7wAXzgAx/ox1MT\nEe0Kgx6KiHaqwf3pAhEREVGPMRgRERER5RiMiIiIiHIMRkRERES5vky+JiIiot7IsgwnTxwDAAR+\nA7OzpaXbKpUKtAFeCb0fGIyIiIgGmoLK8kU/bRsPP1WDpjXgeXVce+ggqtVqn9s3WBiMiIiIBpiu\nG9h34Lx+N2PXYP8aEVEbpFJQaxUsGzBS9v91aJpA16sx9WA5p27fBsvUYAzwCuS0EnuMiIhaoJRC\nkkrUgwS61izuqmti4BZaVEohTjPU/QS2oaPgGND1/lwjG7qG4ZIFL0iRtLkCtRDNEilFx0AYZwjj\nDLLNsiACzfIi840I5YIJy+is5tw5e4dg6Bp+/vwc5mpRW4+1LR1DRZa02kkYjIiINqBUsw6Xt6xq\nu5QKc/UIBduAY+td1dnaLkoppHn1+cVirWGSIUwylBwDtmVA60Ovh2noGC5pCKMUQZy1VPPMNDSU\nHAOGoQMAio4G1zLQCBLEadZyD9Di3ZQCal4CU09RdE0YutZ2QDprvIS91SKefH4Oz5+swQvSDe9v\naAKlgomxEReWqbf1XLS1GIyIiNYhpUQYZfCitU9yfpQiiFOUXROmqUPbob1HmZQIohRBtHYV9kaY\nwo8ylAsmTKP9UNAtIQRcx4RjN8NNlKwdbnRNoOAYcKzVpy5NExgqWkjSDF6YIlmnBttiL9Fakkxh\nvhHDtXW4ttF24NU0gYtfMoqXHhjGo7+YwskZf81acEXXwNiwg6JrtbV92h4MRkREp1k+3LRZ74NS\nQM1PoGspyoXOehu2ipTN19Hwk00LrUqlsODFzd6YPg0TCiFQLlhwswyN4MVwownAtgwUHWPTNpmG\njuGihjBuBsHFHqjFQNRKZ1IQZQijDKV8eK3dnjTb1PGrB/diZiHAz56ZwcxCCKUA19IxVLYwWnZ2\nzD5CqzEYEREtk6TZiuGmVmWy2dvgWDqKjtmXYanl4qT5OloZmlouSWVzmNDR4Vr9eR2GrmOkpCOM\nU8SJRLHNeVBCCLi2CccyUPdjRIlsKRAtpwDU88A7XLQ6modVHXbx/75qP545uoAXTtUxNuL2bT4X\ntY7BiIhoGT9M2w5Fy4VxhqLT/8m0fth+KFouiiUKdg8b1AHHMuB0MdokhIBl6oiS9iZ2L5fJ5hwz\nvcNpQEIInH9gGFKprvYr2j6MrkREREQ5BiMiIiKiHIMRERERUY7BiIiIiCjHYERERESU46/SiIiI\nBliWZTh54tjSvwuuCyEEPK/ex1YNLgYjIiKigaagsgQA4HsNXHHJBEZHRwEAlUqlnw0bSAxGRERE\nA0zXDew7cB4AoL4wh9HRUVSr1f42aoBxjhER0TIl10TR6eyaUQg0K6XvgGoP5YIF1+5sVUJNEyi5\nJlSr1VhPo5RCEKWYq4eo+3FH25FS4fh0A88eW8B8PepoG0maIYjSrj4O19Zh6N19oALAOXvLKBXY\nFzEI+CkRES2j6xpcrblishcmiFtcNbloG3BsHVqbhUe3iq5rKDombFOHFyRIWlx1ueQ2H9NpKZDT\ni7imWYYklXAtHY69ea0zpRRmayHm6tHSe3982sN8I8Ke0QJce/PTlpQKjSBG3EEpkEWmLlB0e1P7\nTggBxzJwYKIMP0xxfKrBVbB3MAYjIqLTCCFg6AJDBQtJKlEPEsh1ymtYhoZin4qubkYI0SyqWtIQ\npzLvvVn7vo6po9BmTbLlpFJo+AniNFv1HJlUaIQpwkSi5BowjbV7svwgwam5AEGUrr4tTHHkZB3l\ngok91SL0NYKbUgp+lCKMs3U/r8VisuvRRLO3zTR6XwxYE82euPP3D6PmxTg1629apJi2H4MREdE6\nFmttVXQNcZKhHiRLt2maQNk1t+QE2mtCCNimDrNsI4ybPTqLdE2gXOi8Z6SVMLIozSQWGjEsU0PJ\ntZZ6pdJM4sSMBy9IIDfooFss1OtHKUZKNqrDL1apj+IMfrR58d/FW9cKSEXHgGNtfa+foWsYHXJQ\nck1ML/hJPYYOAAAgAElEQVSYryebP4i2DYMREdEmNE3AsQ2YhgY/TmFoWlfDTf2iaRpc+8VhQsfU\nYZo6tA6DXZRk8MPNw8hyCkCUSCRpBNvU4IUpal68NPTWijiRmJwLUPcTVIdtKAXEbTx+sR1AMyCZ\nZnPYcbt7/SxTx75qCSOl1T1k1D8MRkRELdJ1DSXH3PE9RBtZHCYsL+ux6VS7oWg5qRRqfoL5etTx\n8wdRikagrTs01wqF5rwqvU9zw4QQKDhmX56b1rYzZgkSEQ2IQQ5Fy/Wkt6vL+TGd/upt5Ta63gTR\nCgxGRERERDkGIyIiIqIcgxERERFRjsGIiIiIKMdgRERERJRjMCIiIiLKcR0jIiKiAZZlGU6eOAYA\nCPwGZmdLq+5TqVR2TB2/nY7BiLbE4vok3az5IqXkF5lW6MU+IaXq+4rVu2bf7vJt7MWaULtjValu\nKaisWVbEsW08/FQNmtZYutXz6rj20EFUq9V+NXCgMBhRz2VSLhWBdG2j7RVllVJIM4lGkKDgGLAM\nfdcsqkedUUqhESQ4fHweBybKGC7Zbe9XmZRo+AnqfozxEReWuf37lVIKSSrhhSmKjjEQddY2UnJN\neEGKJGuvHAfQDDSGLlBwDcRx1tEK2gXHwFDRRKaAJJFtrzcpBPqyHyy3uE9YZuerd+u6gX0Hzutd\no85wDEbUM1IqxGmGRpAsrUYbxhlKrgnLaK2uVJbJpYKUAFDzEhh6ipLbeZFLGmxhlOLYVANHpzwA\nwFx9FiMlCy89MIxiC+U5lFIIohTHp7ylelo1L8FExcVI2YbRYTX5diilkEkFL0iW2rDgxbAMDUV3\n+2t09Ypp6BguaQijFEGcIdukiOyixQKuQggUHROuZeTvTbZhEdlFtqmhMuSgUraX3rc4aRbHTVsM\naaahoeQYMLooJ9KN0/eJ8RG3L+2g1RiMqGuLPTx1P1l1YFQKqPsJdC3dsIK3lApR0gxVp0uzZkVt\n19Y76oGiwZSmEtMLIZ56YR7ytLoP840YP35yCufsKeKssTJsa/XJbfFKfGrex0Jj9X41ORdgZiHE\nvvEiSo65ZcNrUkqEUQYvWl0oNE4l4nq0bVXdt4IQAq5jwrENNIIEUZKtW6ZjMRCdfrOmCZSLFpI0\ngx+miJO1w42hC5QLFvaMFlZ9XpapwzQ0BPmF1XohTdcECo4Bx+rf6W+jfYL6j8GIupJlEn6YIFzn\nQLZ0P9kMN46po+AY0POr9MWTVz1IIDe52gyiDGGUoVRovQeKBo9UCvVGjCePzC31HK7nyCkPx6Z8\nXHTOCEaHnKXenzSTqHkRTs4EGz4+kwpHTzXgWDr2jRXhWL0bVlGq2YNa95NN63l5YQo/al48DOrQ\nsRDN0OJmGRpBimRZtfv1AtHpTEPHUFFDFKcIoheH14QAio6JPaMu7A0CzWJB1sWQFi8LaZoAbMtA\n0TH69v62s09Q/zAYUUcyKRHHGRphe1c8YZIhTLK8C1trXh2mrc9PUGitB4oGkx8meO5EHVPzGwea\n5TKp8PPn5lBwDFx09gh0TeD4tNfWnJUwznD4eA3VIRvVEQeG3kW19mVz5Nppg1LNIT5TT1EqWAM7\nvGboOkZKOsI4hRemkFK1NfdHCAHHNmFbBvwghVQKYyMOhop2y9vQhMBQwUKaNo9RAs35UPo2DJuu\npdN9gvqDwYg64gcpwmTjq/mNLB6sOj1EZFLBj1IMt3GwpJ3vicOz8NoM24v8MMXPn5tt6wR6upla\nhFLBguF2N+9kwYs77hFIMoU4yVBwzK7a0G+OZSBJJELZ2XFCCIFiwcRo2e440BhGM6TtBN3sE7S9\nBm9Am4iIiGiLMBgRERER5RiMiIiIiHIMRkREREQ5BiMiIiKiHIMRERERUY7BiIiIiCjHdYyIiIgG\nWJZlOHni2Lq3B34Ds7OlVX+vVCoDWYZmqzEYUUdcWwegNi0Fsh7H1GCZOhr5yridbUOHUmogVwem\ntV1wYBhPHplHtEkpkLVoAhivuDB0DV7Q6SKRCX785CQuPHsE+8aKbT9eKYVHnprCiWkfl14wtmYN\nt82kmcQzRxcwXLJx9p7SQO/fvThODPDLX6HsmqgHW1UKREFlq+sBLnJsGw8/VYOmNZb+5nl1XHvo\nIKrV6lY0aKAxGFFHDENHSdfgrFM8dj26JlaU8jANfd3isetxbB0FFpPdlUbKDn7llyYwPR/gqaML\nq4rHrmdsxFlRK822dHhBgihu7YScZRKTcwEaQYIklZithZioFPDKi8ZaXoH66GQdP3ziFE7NBlAA\nZmshzt5TwsvOHW2prp9SCtPzARa8GHEiMVuPMFMLcd6+Miplp6U27DS9Ok4MOiEEbMuAaWhbUjxW\n1w3sO3BeT7d5JmMwoo4tBpuRkoY4zdDwk3VLfAhgzeKvmibg2gasvG7aRmVGDF2g5O6egyWtzTA0\n7B0rYqRs4+hUA8emvHXvW3B07KsWVxUW1TUNQ0UbqS2x4MXr9koqpTBbC7HQiFcUrE0zhePTHubq\nEQ5MlPCK80fXLUvRCGJ899ETODrVWFEVvu4neOLwHE7NBLjonBHsn1g9lLGo5kWYWQgRRNlpf4/x\n+LOzqAzZuGD/8IYFVHeqXhwndgtN0+A6AlYe3NupE0nbZ/C+ZbTjaJqAk18NBVG66uDu2jrcTXp4\ndF1DqWDCyfRVV5ZCYKCrjlNnHNvAS/cPY89oAU8dmUN92fCYrgkcmCihsEmldMPQUB12EMUpat7K\nXsmGH2NmIdywNlsQpXjqhXlMzvm48OwRnLu3vPR8mZT4wROTeOboPOr++j2eM7UQP/z5KTx/soZL\nLxxDybWWboviFJNzAbwgwXqdKZlUmJ4PUfcTTIy4OG/f0ECGhs2OEwVbh3MG9AQLIWDoAkNFC0na\n7ElrtWeUtgeDEfWMrmkoOiZss3k1BADFNnp4lq4syxrifHitYBlwbJ0TBM9QQgiUCxYuu3Acc/UI\n/3tkDmPDLobLVlsnUNsyUDV0BFGK+XqEqXzYrNWhnYVGjIf/dxJHTtZx6QVjmJr38chT05ieD1t6\nfLMHysd8/TjOGi/i4peMYrYWoe5HSNLW2hDFGV6YbGCuHuHsiRImRgstPW6n6fY4sVsIIWCZOipl\nDVEXBbmp9xiMqKcWw81wSVv6d7s00byytIzmgfJMOljS2nRdw9iIC10XSLPOrq41TaDomnj82VkE\nHczxkBKYnAvw399/HguNuOVQtZwfpXj66AKEAEyjs6rvjSDBM8fmUR12Oq4632+9OE7sFovTCWjn\n4KdBW6IXBzr2EtHpdK3zYNQrWSY7CkXLdfv9UNgdQeJMDkS0c/HMQ0RERJRjMCIiIiLKMRgRERER\n5RiMiIiIiHIMRkREREQ5BiMiIiKiHIMRERERUY7rGO1ArBhPp+t2n9gt+xQLJ+wsu2W/GnRZluHk\niWNtPSbwG5idLaFSqXDNuNPw3dhBlFKIkwxRkq1b9JLOLEop+GGCuhdDys4KTkopEcYpkjSD6lNN\npiyTODXj4dSMhyzr7HWkaYYoypB1+D4opbDQiBDGKfQOa42ZhoaxEQdjww50vbNtjJQslJxmqZtO\naKK50GWti32iW0oppKlEGKUdfx70ok6/Ey9SUFnS1n+ObeM7jxzD3NxcT17DbsIeox1AKYVMqhXV\nlnUtRalgwjzD6gdR02JInpoLUMsLlFqGhrPGi3DtjQunLt9Gs0hlvFSg1LF0FGxj20pJNMNIjEef\nnsTUXAQAGK84uOzCcQwXrZZeR5ZJeEGC49P+UrHNkmvAafF9APJisEfm8YsX5gE0w0V12IWmNUt9\nbEbTgJJjYrziwrYMHJgApud9HJ30sODFLbWh4Bg4MF7CwfNHoesapFT55xsjabHKumVqcC0dlmng\nxIyPmYWwrX2iFzLZDER+XgRWRClKbrPI8yAWt+0nKRWiOEUjTDE+4na8HV03sO/AeW0/rr7AULQW\nBqM+k1IijDJ4p9VuymTzhGKbGgqOCV1jzbAzRZpJzNcjTM4FK/4epxLPnahjuGxifLgA01g7NCul\nkOZhIjmtfEYYZwjjDCW3WcRzK09kQZji6aPz+N8j8yv+PjUX4r4fvICXnTuClx4YWbdOlFIKYZTi\n+LSHKFkZHBpBCi9MMVS0YJnr97ykmcTxqQZ+/OTUijIeUgFT8wFsU8NwycZGHWkFx8DokI2hor3i\n72MjBYwOu3jhVB2TcwH8cO36a6auYWLUxaUXjKHomkt/1zSBPdUCKkM2Ts358IME63UcGLqAY+lw\nrJUBaGmfKJkYH1l/n+gFqRSSJEM9SFa8X0oBdT+BrqUoF868YrCdWOuihXYOBqM+UUohTjPU/WTD\ng3KUSERJhKJjwLFYZX43k7I5bHZsytuwFtdCPUGtvoA91QKGihaMZb0/mZQIohRBtHG17kaQwI9S\nlF2z5yfTNJU4PtPAw09ObVjX7Mnn5/H00QX8n5dNYF+1CMN48XXESYbphQDz9fV7Y5RqVr3XdbHq\nfVBKYbYW4odPnEIjWL9gbJRITM4FGCqaKNjmivfdtnQMFU2MDbvrvj+aEDh37xD2jhbw3Ik6Zmvh\nUq8vAFSHbbzs3FHsGyuu2wbL1HH2RBl1L8bMQgh/2UWSponmxZFtbhhiFxoJao2194luLQbtup9s\nuF9mUmG+EcMxdRSc7euVHCRKKWSZQiNMWu4lpO3HYLTNpFLIMolGkLRVDNMLUwRRinKhedBjl/Xu\nIWVz2OzEjLdpoFmkAJyc8TE9H+CssSJcx0CSSjT8pOUJylIqLHgxLEND0e2+VzLLJOYbEX7080nU\n8+G/zaSZwvcfP4Whgon/8/IJDBUt1P0Ep2b9DS8YVj6vwlwtQsFuztsJohSPPzuLFyYbLbe95iWo\n+wlGyzYsU0fJNTE24m7YG7WcbRn4pXMrmK+HOHKqgTSTOHdvGb90bqXl97RctFAqmJieD7DgxRAQ\ncG0dptFaG07fJwqO0dWFlFKqGdajFGHc2n4JAGGSIUwylBwDNi/mAOTvZd4D6rf4Haf+YTDaZkGY\nrrgibIdUwIIXY6RkQdM6m7hJO8/0fIDphbCjx6aZwpFTDVSHbGgdXqHHqUTmxaiU7c3vvIFHn57G\ns8dqHT225id44MfHcPF5FaDDcOZHKY5M1vHE4dmWQ9VySgEztQivvHAMw6XO3ouRsoPhko1K2YbZ\nYqhaTgiB8UoBjmUgiNKOguriPnH+/iE4VuehJJMKc/Wo48c3whRCE121YTeZq0cd7Ze0/bjHEvVZ\nL46VO+F424tfvMkut6EUuj75dNsbK4RYMSzYaRs4T4eoPxiMiIiIiHIMRkRERES5bZ9jdPjwYdx8\n880QQkAphcOHD+Mf//EfcfXVV293U4iIiIhW2PZg9JKXvAR33303AMD3fVx99dW44oortrsZRERE\nRKv0dSjt/vvvx+WXXw7HcfrZDCIiIiIAff65/r333ovrr7++5ftPTk5iampqzduSJIFpmmveRkRE\nNKg2O/f1q2bebtW3YNRoNPDII4/g9ttvb/kxX/rSl/CJT3xi3dsPHDjQi6YRERHtGJud+9zi0Da2\nZvfrWzD65je/iSuuuAKWZbX8mBtuuAFXXXXVmrfddNNNvWrauvwwRRAlGB1yOl5jxDQE9ERsuLT+\nRoTofp2VKM4glYJj6R29DqWaq+HapgZDP7MXmuzFPlF0DHiB3tbqwqcLohRF1+y4DVNzAWpejHP3\nljvahsxr+3XDNLSOF3cEmvtl3YugCXRcf8rQBUZKNqRSXa2HFERpV4VdTUNA1zo/Tuha8/HdEAJw\nLA1h3HlvBKuCvMgxdQQdfsc3O/f5QYyTJ461vd3Ab2B2ttTSfSuVyhmzinnfgtG9996LG2+8sa3H\nTExMYGJiYs3btnIYLcskTsz48IJmraCaF2O8UkDJbf85TUPHSFlHnGRoBBvXSTtdMS950OnOuVhY\ndLGWU5RkKDpGyyUHACCMU/hhikwqBBFg5+UTzrTF6Hq5TxRdE+c6JrwgblaQb+NkKAQgAARRhiSV\ncOzVhUY3EkQpnj22kK/Kq3DkZB2XXjCGkTZWwT5yso5fHJnDfCOGoTeft51yN0IA+8dLGCo2L5I6\nCTYNP8ZzJ2qYb0QQQsAyBOKkvRP6y84bwQX7R+DYxlIB243qrK1FE83FNr0gRZxIuI4Bu80VsAUA\nyzQwOmwgTjLUvLit48Seiovhst11vTRd01ByLTjW5nXSTre8+DU1F/0suiZsS1+zuPNmNjv3iSiB\nylorw7OcY9t4+KkaNG3j8jmeV8e1hw6iWq22/RyDqC/BqNFo4LHHHsOVV17Zj6dvmVIK0/MB5hvx\nioJ/QZTh6GQdRcfE3tFCW0v/CyEgADiWAdPQWqqd020tK6WaRQvjOFtxwklS2ayVlYcbbYNtp2mG\nRpiueB+UalZrT1IJt80T8qDaqn1CF8BQ0YZrm5hvhJia27xEyGKAWPxI00yh4aeIY4mCY2zYBikV\nDh+vYXo+WNFTNTkX4DuPHse+agGXXTi2YWiuNSI8+vQ0pueDparwi4HI0DUoJdetFr9obMRBddiB\nvizsL+6jmhCbroSdZhKHjy9gphYhWnodCplUsAwNCgpJuvE2JioOLrtoHMPFF8OgEAKuY8KydHh+\ngmiTkLUYUE//fmVejMjUUWyhqKpA87Nc3lrL1FEdchDEKbxNQtpQwcR4pVnfrVffQyFE82KupCFO\ns01r8emaQKlgwtR7W5h4N1h8L4dLGuJUou63F3g3ousG9h04rzcbo/4Eo1KphIceeqgfT92yuhdj\n6rSTxnJSAnU/QRDXMFy0MVFZvwL3enSteVVlm8aa1ZY1TXRV/VwphTDOEETpuld7SjWH1pJUwrX0\nVd3/Sik0ggRRkq37Jc6kQiNIEcUSRbe9HqhBsh37hGloGBt2MVSwcGrOR8NffTJcDETrXcDHqUSa\nB96iu7Iqu1IKJ2d8nJj21i30GsUZnjtRx8xCiPP2DeGic0ZWvI4klfjp09M4Pu0tCyMrpZmEAGDq\nYs2r44Kt46zx0oZFWqVSawaOxddxbKqBU7MBGsHar2OxZ9QyNEgpcXoxc9vU8f8c3IOxEXfd4Wld\n0zBUspGkGWpesmZvnqYJSKnWDAwy/36lmYSdV51fb59Y7xwpNJEfJ3Q0gmRVT5hpaNg/Xuxq6G4z\nmiaWLuaCKF1V7FgAKBVMWIbOAtebEELANnWYZRthnMELO6udSVuHRWRPEycZTs768IOkpe78NFWY\nWQjhBQmqw07bxSebdZUEhosWkvwqQiqg5DYPhJ0eZJK0+YU7PWytR0oFL0wRJc3eBis/AIZx1nIX\nepJJLDSW9UDtkgNkP/YJ2zJwYKIMP0xxfKqBNFNLwzSttEHmvXlpKmFbOlzHgBckePZYDQuNqKVt\n1P0EP3tmBsenPVz8klFMVFw8fXQezx6rrRuqllMAkkzB0AQgBNJMQtMEztlTQsFpbchR5T1imnjx\n/+dqIV44Vcd8I26pRlycSmiiGZDiVEII4LILxnDO3vKGwWw509BRHdYQxc2AhGVtamXoM8sU/CxF\nkuTDnXbz0LvYS9QKXdcwvBjS8te+r1pEuWiu6HHbSrqmoZiHtMUhIdduXlBtVxt2C03T4NoClqnD\nC9sfBqOtw2C0TCOIcXzKa2t+xKIwznB8yoOhCxTd1ieULxKi+QWplB0ooKux+SBM4EVpR920aSZR\n8+KOJ34qNOcuZVJhpGQNfHd6T/YJQ6DotL9PaEKg5Jp4yb4hPHu81tHnkUqFNExxYsbD5Gyw1IvS\njpmFEP/fYyeXTobttiKVzQEix9Jx3r5yR3PkFl/68ydrODbltRz4lz8+TiVMQ8OhV+3HcBtzqF7U\nDKxlBXgthuTTJZlE6kvomoBp6h0V/22GNAcjZbsvvbPLh4SkVCx42wUhBAxdYKjQ/vGBtg6D0TJx\nLDs6AS5SQNcHiF70sqSyu1/UAK1dBW9M7YqDZXMYpL/7hOjBPhFGWUehaFGSyrZ6N9bT7a9aFod9\nO5WkzQnR3VBKdfyrNyDvAev2F2Oa2HTO0lYTQkDXB/87vhPshmPlbsK+TyIiIqIcgxERERFRjsGI\niIiIKMdgRERERJRjMCIiIiLKMRgRERER5RiMiIiIiHIMRkREREQ5LvC4jGs3K2FHycZFXdej66IH\nCyN2zzJ0xKnsuC1SSsRJBruLorBJKhHFaccFLaVUiOIUpql3XSW8U0opWIYOQxddLfJYq8f5djp7\nHWGUIk6yrhb0KzgGnEBft87bZixDg6YBhibylaw7k6RZV6s1FxwDjtX56xgqmF1/R21Lb+7fmxSW\nXY+uC2iaBpGXFOmEJvL6MFwXcFdYXEG8U1mW4eSJYz1s0UqB38DsbGnD+1Qqla4XcN0pGIyWcR0D\nLzlrCJNzPmpe3PLJUKB5wN5bLcC2+v+W2pYO09CaBSfT9Yu/nk4pBT9KcWyyWZur4OjYVy229ZqU\nVEuVwKfnQ4xXXFTKdsuhQCmFKM5wYsZDEGUwdIGzxooouGbzZLBNskzCj1KESYaRsg0/SJdKnbS8\nDSkx32gWnj0yWccvnVvBUKH1MilxkuHYZAM/eWoaUqo1K9FvZrHgbKlgwbUNTM0FqAerCxavR9cE\nbEuHY+nQdQ1JmiGMsraCiWkIKNkskfLUCwvYW3UxUnLaOhFIqVDzoryGXAkzCyEafoIka+11OJaO\nfdUCLr1wbCmYtbuSt64JuFazztn4CDo7TrgG9o42jxNpmqHRRj1DoPl5WpaOkmNyteRdQCnVrJEZ\nJKgOOd1sCSrbunprjm3j4adq0LTGmrd7Xh3XHjqIarW6ZW3YTv0/i+8wmiawt1rE6JCDkzM+/HDj\nmkiOpaM65HRYe2nraJrAUNFquZhslGQ4NeOhEbxY6dkPMzxzrIaxEQejQ86m4SZOMtS8eEUQm5oL\nMLsQYt94ESVn48KySZphrhZheiFc+luaKRw51UDRMbCnWoDdYQ9Uq6RUiJJsRcV2IQSKBRN2psMP\nEsSp3DBsKih4foJgWXgIogyP/GIae0ddnLN3CI61/uvIpMLMQoAfPnFqRRXz6fkQMwsh9o+XMFTc\nuLbSWgVndV3D3rEihsMU0wvBpvW+HEuHY+srenjMvOfLMpsFVTfqNVksHnv6vndyJsDUXIizWywm\n64fJigrklqlj31gRXhBjthZtWNBW14CxEReveOkYKqd9Rxdf+mYBSQjAzgsjL35mQuDF40QLBYbX\nOk4Yho6Rkp5Xq083Dd2WoaHomn3rQaXeUUohkwp+mHTc87icrhvYd+C87htGABiM1mWZOs7ZW0bd\na17xn36FbOgCwyUbExV3R1+5mYaO4aKGMM7WPPhmmcRcPcTkXLjOFpon5NmFEPvHiyi61qpws1h4\nNlvnyjmTCkdPNZpX7WPFVaEgkxINP8GJaW/dk4sXpng2D2mVsgPT6O3JYfmV23pDLYauYahkI8rf\ny7XCZpSkS9XX13JyNsCpuQAX7B/GeMVdETqUUqj7CR57dhrHp/x12gkcnWzANDScvacE57TePCGa\nJ/qNzrGuY+CAXcKCF2O+HsFfFjoAwDI1OJa+7jCoEM1iqqapw4zSZv2yZZ+9QPO9avbmrL9PPHei\njoKt46zx0ppV7pM0w0JeRX4tRddCwTExX4+w0IjgRyu/oyNlGxceGMY5e8sbfkc3iiOmoaHkGjD0\ntYf/LFPHOXu6O064dnN40AsTRHG26rMzdIGCbcK2tr9gLPWelBJhnK0I+7SzMBhtoly0UCqYmJ4P\nMN+IkWUSRdfEntHCmgfznUgIsXTwbSwefKVCw09wbNprac6FVMALkx4sI8D+iRJc24CUCkGYwo9a\n+4KHcYbDx2sYHbJRHW72QAVRiuNTXssFTqfnQ8zWIpxVLaBYaA6vdRNMF6/cvLwnqBW2pcMyNQRh\nMxSkUiHNJBYaUUvFRZUCnjq6gOdP1vGy8yoYKtpI0gzPHa/hsWdnW2pDkko8e6yGSsnC+GgBhq4t\nDZu1MrAjhMBIycZQwcL0QoCaF0NKwLY0OJbR0jCXJgRcx4RpaAjj5pwyTdOglGx5iMuPMjx9dAHj\nIw5G82HCTEosNOKWhi2FEKgMORgqWpieD1EPYhi6hgPjJRw8f7TteVmLvUfNMGK0PIzc7XFCCIGS\na8Gx5NK+qGkCjqWjYHc+1492jqWLLz/uqggxbT0GoxYIITBeKaAy5CCOMxTczbv/dyIhBMquBagY\nPz88u2Kop1VxKnH4eA0TIw5UhzM/Z2sR5uoRio6xYuiuVVIqHJ3yUClb2FstdtSGRV6QdPQ+CCFQ\ncJtX8c+frHc0GThOJX769AxsU8PkbNByMFturhFjrhHjorOHYXQwqVnTBCYqBZRcEzUvgr5Oz8hG\nDENHydAh8/lhnZiaDzG9EGLfWLGtOTeLdF3DnmoB+7UC9k+UUezwO6oAFGwdhQ7m8PTiOGHoGoZL\nzaCsa1pXE3Jp51BKYaERrehZpZ2LwagNhq7BcAd/fF/XBKK0sxPYojiVXf26SCmsGsJpVypV11fS\n7UymXoumia63sdCIOwpFy3V7uLVMHYahd/wrKQAwdYGoizYo1RyW7UbBNTsORYtMo7t5bL04TnTz\n3aKdqZtfc9L2GvyzPBEREVGPMBgRERER5RiMiIiIiHIMRkREREQ5BiMiIiKiHIMRERERUY7BiIiI\niCjHYNQGpRTSLtf/SdMMqovFYpRSCMKkq21kmdzWgqxrUUohaHHF7PXINOtq3RulFLwevJdJ0t0+\nMTPvI+liv1JK4YVTC929Drlx/bdWtFpMdSPdtgFASyu5b4RLKtJW0LlY58DgAo8tUEohjFIEeSkN\nKy8o2W518EYQI05eXOrfbXOp/0aQYGrORxhncG0De0YLcO3WP0KlFKbmAyw0IoyWHURJhgUvbvnx\nQLM46UjJhr6sBEW7al6E2VqEKM5QKpgYH3HbLq+iCcCPJQ4fX8Bwycb4SHs16xp+jGeOLaDmx3As\nA3QuLIIAACAASURBVGMjLkptLAyolMLxKQ8npj1ESQbLbH6e7ewTQZTgWz98Fs8cnUXBsXDRueO4\n8Nyxtl7HyekafvqLE5ie83DeWRW8/sqLcNZEua3XEcYpwjhbOnC3u2BlmklEUYY4zWDqGjIlIdvM\nqwVHR8m1mrXeRGeLZg4XLdimjvl61Px+Oe19v3RNoFxgkVbqPSGaNfPivEB1Ly4AlsuyDCdPHOvt\nRtsQ+A3MzpbWvb1SqUDTBud7xWC0iSTN0AjSFT0TUZIhyWRLdYyUUvCj5oln8Uo2kwpemCJKJEqu\nsekqt0mS4eSsDy9Mlk44fpjiyMk6ygUTe6oF6JvsdDUvwvR8uKJ0xf/P3p3HSHLdd4L/vhd33pl1\nV99ssrvZZJMUKeoiKdJsW7ZkU4c9Nn2tYe8YtuXVGtCuAUHC/uEFVrCBWcOYAbELLGYxsD22V/Z4\nvfSYFjQWbcryjCnJuiiyeXWTTXZ1V3UdmZWZcV9v/4jM6jryiIys7q6u/n0Aw2JnReSLyMyIX773\n8n1VRcJUxYDlBqlWoS7n1S0FTPfexRlDnOKT7vkhVhoOzE3H0TR9uF6IYl7FZNkYWlgwJEGp3ecO\nQoHVdRemHWCyoqOU1wZuH0Yxzi80UW+5G9ETthvi8rKJvCFjppqDMqRIa7Y9XFxsbQk4DaPkPaKp\nErQ+4atdcSzwL+cu4ZXzy1hpJGGxlhOg0bLx7mID952aw3R1cHFjOR6+c+4yLq804XReu9ffWcXi\nWht3H5vETzx2CvqQotkPkmLf35buLXEGATG0uEmKqigJke2cyxgxOEvCV9NEe0icoVLUOs/Z6TES\nYqQiLa/LyOlJUStw7fPlhzEMTRqad8YAFHIKVFmiCA5y3XDGoKtyki3ohTtCj8cjIKL+4dXXm65p\n+M6bLXBu7njMstp46ol7MDExcRNalg0VRn1s7uHpdWmOYwHbDeEHUd/ka8+PYHtB3yGGJHjUh6pw\nFHqk1gshsNxIenh67SOKBdZNH7YXolJIglm335A9P8TVutMZMup9rHldgaFKaJp+z2XrDS35Nt9P\nLMTAVPc4FlhZt9Gygj6J9DG8dRe2G6Ja1FDKqz0Li42Q1B7P4foRLq9YWG/7mKkZO26GQggsLJtY\nXLN7DuFFsUDLCuB6bZTyKqZ6pKH7QYQLC03U2x7CHsfhBzH8IEagxtA1qWfB+/blNXzjpYXO0NfW\nx8IoGRKrt2wcnC7jwdMHoWtbe7GiOMYP3lzExct1NFrujv23TA/f+MFlvHtlHQ/fexCPvOfIjmHT\nMIrgeBH8YGeSe/dcAEnR0qswEUIgCJKEcK/HMGIsgDiMIUsMjCXFay/VogZF4RA9gm83t0EI0bOd\nMmcoF9S+30SDMEYYxvA6uWW9eoJymgRdk4d+sSBkt0icI6cr0BQZptv7mjjyPiUZcwePjt84AoAK\nox2SeSdJanqaXpAwEmjZPlSfI9+5+IZRnDqtXSApDILQg6ZKyHe6/5umh7Wmmyqc1A9iLDcctO0A\nU9VkSCiOBZbrNlq2n2ruB+cc1ZKOIEyG14RIbkrlgprqptG9uXF27X8LIbBuelhve3BSfDuy3RCu\nF6Jl+ZisGBvDhN16cVjngRDJcKO7FKKYUzFTy4FzhkbbxcUrbbTs4cOGfhhjtenCcgLUyjrKBQ1C\nCLy71MbVupNqXpTb6UHR1KQHSZY4WqaLF/7lLVy8sg53yD4sJ8Dr76xipWHh+KEaTh+fA+cM71yp\n49xbV7G0uvNb2XaLaxae+/rreOXCMn7kA8dx/NDERu+lH0Sp3hNRLMA5wHCtQArCpIco+XwM3r77\nHIrEIUSM7sehkEt6eESfInd7Gxi2FmmMJb2XafLEup+vMPKhbvp8KRLb+LxScj250RhjkGWGcl5F\nEMZop7g2kRuHCqNNwjBC2+nfwzOIH8YITQ+SxBFF8chzb+LOZGQ/CNGyAjhuOHIwqOOFWFhuQ1Mk\nxLGAF4z+TUSRJUyWDYRhDEXmI7ehe9xxHGNh2YTljHYcsQDadgDPjzBdy6FSUEc+l2Ek0Gh7sDtD\nhE3LH3nOiuNHWFy1sLLuoGX6aNujdVNHnR7FMIxx7q0lvHL+Kuo9engGqbcc1F+5jEtLTUgSx2rD\n6tlD078NwIWFBpae+z4eeeAw3nfvoZHDapPhtGRoy7R9uEHcs7dskCCKwQCoCt/oDRxljkV3eEzi\nDJrCkR/Qe9lPFAs4boggiHBougB9xPl9hFwPjDGoioRqUb/ZTSGbUGG0SRDGY/2yJhaACHsPvaVv\nQzIZNus+4jjpsRh3cp+qSmP9uscLYphO9l+d+WEMRWKZJndvbkPbGb0o6ooF0LJGL4o288MYl6+2\nRi6KNltaM6Gr8khF0WaWE0BT5ZGLos2iWCCMxMhFUZdAMqQ6TjESxQL6kPlCw4SRgDJkDhghNxrN\nbdtbaGCdEEIIIaSDCiNCCCGEkA4qjAghhBBCOqgwIoQQQgjpoMKIEEIIIaSDCiNCCCGEkA4qjAgh\nhBBCOqgwIoQQQgjpoMJos11YY2vsheNYEsEwDiGS2ISx9jHOyopIYjxkabxGpIlDGaZfTldaDGwj\n0DQbAcexME5guyYDcZR9sUwAcP1wrOPgDJDGfD1VhUORx7vkMDbee5vz4TEkhJDbG618jWRFXj+M\nYHVWambYGWo5jMQZDFWCpkrw/AiOH4284jJDksBcKWqw3CAJ+RxhoeHuDaObQdUNXR3FRlBrZ3/9\ngmEHcbwAl66aySrDEkMkMNIq2orMIGJsBL5OV3OQR7yhOl6ANy+tY930cXCqgFJeHek1ZQBMN8Cl\nJROMARMlHWzE82m21/HC3/8dvvp3X8HhEw9i5sj98EX6OAtZYmCRg3ffPIfAd3H4+L1QcxW4fvo3\nxUTFwMOn5/GTZ08jCGOsrDuw3dGKrJwmoVbWUcypSWZcw4Ezwj4UiWO6ZuCBuybBOMOFy000Wt5I\nnw9dkzBby+HwTBFt28fqerocwc0MTcZM1Ri7OCNkr4miCEuLl292M3pybBP1emFX9lWtVvuGRu8m\nJsT++P509uxZAMDzzz+fehshBMIoRtsOel6k0xRIjAGaIqFgKFt6i4QQMJ0AXjA8nqPf8wRhBNsN\n4Q/JPGOddvS6zwx6bDPOusGvoz22vb1Laxba9tabJmOAzDmCaPBxSDxJY+8VyzI/mUO5oA3tkQvD\nGJdXTFxcam/5d1niODJbgK7KQ1/TIIywcLUNZ1sBktclFHLa0CIvDD28/NJ38Sd//EcIgmvhkJzL\nOPngWRQnj8ALBx+HLkVYu/oO6itbL3Z6voT5I6cguD4wvsbQZJy+Ywo/92NnMFnNbfy7EAL1tov1\ntg9vSGGhKhzlvIrJirHlvAdhhAsLTdRb3tBk8ImyhtPHapip5bf8e73l4p3FFlpD4lZkiaNW0nDn\nwcqWgkYIgZWGg6blD22DqnBUixpqJZ2iQMi+c/bsWbRMG7/52797s5vSVy5fHLugsaw2nnriHkxM\nTOxSq/q7bXuMoiiG7QZwBxQdw26gisxRMGTI0s6Ub8YYijkVRhTBdMKBF+9+z6PIEkp5Ds8P4Xi9\nE9E5Z4hj0bdo6RY0/YqbNL1C3cf69UDFcYxG28PVutO7DSIJEpUkBs52Dm8xJDfAQYXTlVUbV+sO\nDs0UkNOVHs8hUG+5ePVio2eRG0YxLlxuoVxQMVvLQeoxthXHMVbWXaw1e+eaWW4Ey7VRKWjQVanH\n88RYeOci/ugP/28sL1/tsf8Qr/7LV6AXyjj1no9Azk0g2Paa6iqD3VzBmxdfQ693hmu18Na5b2Jy\n9hCqU4fhhluPgzHg+MEqnnr8JO4/Mbtje8YYJkoGKgUdy3Ubbdvf8b6SOEPBUDAzkYPc4zwpsoRT\nR2toWh4uXmmjaXo73lcFQ8Gx+RJOHK70LEZqJR3VooZLV00s1ZOewS3tBFAqqLhjvoRSXut5HNO1\nHKolDUtrNiw32NG7KkkMxZyCmVp+zOFQQvY2SZIxd/DozW7GvnHbFUZxLOD5IcwRhxM29+rIEkNO\nk6GlCLSUJQmVggTPD2F74cZNKO1wHWMMuqZAU2VYTgg/SIbouoVO2iGqa8UNQ9y5i20eNku7j+09\nUKbjY2HZStWOKBKIgM7NNgkllSUOIeKhvUlAEiJ6cbGNvCFhbrIAVU4KUsvxce5iHbY7fGilafpo\nmj7mJvOoFpMbLkMSFruwYqaaf7JueuAMmCgb4DwJ7l1vrODLzz2Lb7z44tDtXbOJ7339LzB75G4c\nvOthBDCgKhyx18aFV36AOBweWru6dAlrVy/j4LFT0IuTcH2B2YkCHnngEH78sRNDQyklzpJz4GtY\nrjuw3ABCADldxnTFQM7YWXxuV85ruO9OFYurFhZXLZhOCE3hmJ3M44G7JqHIO78wbMYYw+HZIuYn\n8zh/eX2jByqnyzgwmcfcZH5oD48iSzg0U4TlBFhuOHC8EAzJccxO5FJ9RgkhZLPb6qrh+RFMJ9go\nDEbR3cJQJeS3DZuloakyVEVC0/QQRGLkOUyMMRRyCsJIQtP0R5qzs9nmY8+yi26vk+0GWKpbcL3R\n09bDThHE+bX/PQrLiXD+UhO1ooqWHWBxzR55H4urFpbrNmYncrhad0ZuRyyAlXUHmgR8/zv/FX/1\nl3+BOB5tzsvSO69i6d3Xcfy+H0IUBmitr460vRAxLr11Doqi4xOf+An8d089hEIu/RwmANBVGYdn\ni1hve4iFQLU4fLhyM8YY5qcKmKnlcGXFxLH5MqolfaQ2yDLHqSM1tG0fyw0HR2eLPXv0BskbCo7q\nMuotFxLnqBR39jIRQkgat1Vh5PphpqJos5w+elHUxRiDIksIxviFkSxxyBKDP+avxsbVtv1MRdFm\nEueIR5ldvs1SPZljklUUC6w13UzFWZfthXjh+f8yclG0QcRoLZ9HxPPD/7aPIHDxsUeOjVwUbTZu\nISFJHKfvmIA+Rg9NMaeiOMYxMMYwUTYyb08IIQD9XJ8QQgghZAMVRoQQQgghHVQYEUIIIYR0UGFE\nCCGEENJBhREhhBBCSAcVRoQQQgghHVQYEUIIIYR0UGF0g+1GNN24azEJIcZuR9YFJveaMMUq04Ps\nxrncjY9hFN7898Ru2Att2Av2yutBdge9nreW22qBx2JOgR/GMJ0gVfTDZhJPcpeyZlAKIeB4Ibww\nSh0Hsl0QxriwsI6m6SNvKJiqGEOjH7bzgwiOHwIiSSzXlNHeAlEs8N3Xl/HmpXUYmozDM0Xo2mj7\nkCWOwzMFKApHy/KxuDr6ytWcJ7EPmpqsJu4NCdrdLvB9/NM//Gecf+NVHDp0DI9/5JMwcqMtsnj1\n8kV89W/+FFZzGZqswA3EyIt/nrjvUcwffw9EHOOt174Ly1wfaXtJVnDinofxh1+5gPvuauOpx45D\nVQZHcWznBREcN4QQgKFJI7+eAJDXZahjpNaHUQzLCRDGApoiIa/Lt2Xga/c64foROGfI6/LQaBWy\ntwVhBMsNEccCuirB0G7P9/at5LYqjDjn0FUOReZwvRC2N3y1YgagkFOgytLIRUhXECZBsttXWE5b\nIAkh8O7VNq7WHTidjDfXj2C7AapFLVXqfBTFG4VZd7HpIIrhKzEMVYKc4uL79pUmvvfmKpY6ERzr\npo+27WOyYuDQdHHo+WEMmJ/Mo1y4tspytaijaKi42rDRNNOtYq3IHFEUI+z0WlWKGuIYWG06Qwte\nIQRe/u4/4zvf/DoWFhYAAMtXr+LywkWceeBhvPdDPzw0Bdp1bHz1P/9HvP7Kd9FoNDptklEoFhEI\nCVE8/H0yOXcMpx/6YXC9mkSzcODkA4/Cbq7gjXPfRpxidfSjd92L2vRh+BHHuhngH797GRcWmnj0\ngQP44Jm5VO8Jyw0RBNG17Ds7hhfEyOvp3hOqzJE3FEicZbrYCyFgugF8/1obHC9EEEap8wj3i+3X\niSgWaFo+VEVCwVDA6WZ6S4mFgGkH8MNo47pkuSG8IEbB2N2CN4oiLC1e3rX97UWObaJeL4y0TbVa\nHXo974WJfdK/d/bsWQDA888/n+rvhRCIouSiHIS9exsMLanupQwnFkiGm9qOjyCI+xZAw4qjtaaL\nS0vtvtEXjCU5UZNlAzl9501ECAHXT76Bbk9R75IkBk3hyGm9406abQ///MoSLi+b8Pucq2pRw9xk\nDpNlo0+auoapijEwA8v1Q1y6avZ9PRSJQQD9j4MzuH6I9T4F1tKVd/CPX/0bvPP2BfjBziE0zhmO\nHLkDH3r8R3H0zrt3PB7HMb719S/jO994AZcXLvV8jnw+B1Uz4PgA6/G+UVQDD374kyjUDiHoU5er\nPMLq0kW8+9arPR+fnD6Ag3ecRgSt53tHlhjuOFDBU4/dgcOzpR2PCyFguyG8IELU51xyxqCpvG8u\nIOcMRUOBIvPMBZHrR3C8ENGAYdlu4SWPmJ12K4ljAdPx4Q+4TnDOYFBvwy2h2+vn+FHfKQcMgKpw\nFAw18xfurrNnz6Jl2vjN3/7dsfZzK8jli6kLHctq46kn7sHExMTIz3PbFkZdQggEYYy27W98Y1Uk\ntnExznrRt9wQnh+lng+0vUByvRAXLjfRaHkDbxxdisxRMBRMV68VH14QwvWivsXMdqrMoakSNEUC\nYwxBGONb55bw1pUW2vbwuTiyxFAr6jg8W0DeSDKvdJXjwFRhpG/+LcvH5U1J93KnNyJImWnGeZLl\nZrtJ5eHYFr72d/8fzr/+Cpqt9tDt8/kcjh0/gR/6yKdQqtQAABfffBlf+y9/ibcvvIEwHN7TWC6V\nwBUNjt8ZXmMM9773RzBz5B4EYnhyPWcAixy8e/5lNOpXAQCKpuPkPe+DYpQR9CloNivmFNx9dAKf\n+qE7kdOT53Q7F+ww5XtClhh0TYKuXrshFwwFmjJeD6rlhn0L4O0YA7ROr8l+KgqyXCdkiSdDyCMO\nl5IbwwuSnvx+X962S76AjDd0fPbsWViOj9/5/T/OtP1+1W428OTDhzMVRrdPP3UfjDGoioRqUYfn\nh5AknvlbMAB4fgTbS//B6Or+tRACb11uYnXdheunDyYNwhiNtgfHC1HKq9BUCV4QjTSXyg/j5P+U\nGAvLbZx7u46VdTf19mEksLzuwHQDTFYMfPj+eRTzo4eClvIq8kYFS2sWbDe5iYsRZmXFMVA0VOR1\n4Mtf/hu89O0Xsbi0lHp7y7Lx8kvfw9Url3DsrrvRWlvC+ddfRrs9vKjqarZaYIyhXC6jduA0Tjz4\nwxByEUHKw0iG1wwcPf0+zFl1BJ6LYm0WfshSFUUA0LYDfPPcEi4uNfHY/Qdw/4lp+CPOxQojAdMO\n4fsxJqvJsOegXr9BhBBoOwH8Ed+XQiRDx0EYI6dL0NXhheVel/U6EUYxWpYPVeYo5pRMwwRk90VR\nMnc17ZfQrrjTuxSEEapF/Tq1jowqdWH0zDPPDHz8M5/5zNiNuZk4Z9B3oZva8cORL3abBWGMq3Ub\nQcZfGbl+BE2NMk3u7vKCCOcuNkYqijaz3RCuF2Yqirokzjd6rbLodrJ9/9v/jKWlq5n2sbK6hvXG\nP6LVWMu0vRAC6+vreO9HPgghFzPtIwgFuFZFscBHLmq6lusOolhk3h5IimZDVTIXRUDy3vZGKPa3\ni2IBtk9+SDv2dSKKkfmXIGTXeUH6nvlexnkvkN2X+irzzDPP4B/+4R8QRdkvbHvdXummZxivHbtx\nGHvhVPAxzwOwC+dyN9qwCydzL7w3b34LCCHk+kvdY/Qnf/InePbZZ/G3f/u3eOKJJ/CpT30Kp06d\nup5tI4QQQgi5oVIXRg899BAeeugh+L6Pr371q/iDP/gDrKys4HOf+xze//73X882EkIIIYTcECMP\n2KuqigMHDmB+fh7tdnukCamEEEIIIXtZ6h6jxcVFPPvss3juuedw+PBhfOpTn8IXvvAFKMqt/wsR\nQgghhBBghMLoySefxN13342f/MmfRKVSgWmaeO655zYe/+QnP3ldGkgIIYQQcqOkLow+8YlPgDGG\nN954o+fjVBgRQggh5FaXujD6vd/7vevZDkIIIYSQm27s1dJeeOEFPP3007vRln2hXzZOWoxlC+Pc\nTGRfZ2xDNMZiZUBnzZsx02a2h+5m4Qfpgmn7EUKkClMd3IbhgbCDcDb++6pfJtpIxlzIaFdCUBkt\nhLeBTsWesRfWGSO7J3Vh9O1vfxsf/ehH8Z73vAef//zn8fbbb+Onf/qn8cUvfhG/8Au/cD3bmFoc\ni07cwI2/YkRRjJWGg9cuNtC2/UxtkDhDtaDiA/fMYLKsj3wf4jzJx5ooayh0Aj5HxZDkjNXKOibL\nOlRl9H1MVXTcebCCthNkOg9CCKyu2/j+m6swbT/TYpN2u4Hn/tO/xxvf/XvoSgx1xBgJWZJQKhYg\nuIJCqYZKpTxyG0qlMo6eei/sUIEiJblxozJUjjj0YZomNIVj1HgyTZFw352TeOyBeUxV9EzvCVli\nqJW0sYNcZZmjlFMgS9luIqrMIe+TCIxSTu1kEo6+rcRZJ1tr99tFstFVCQVdhpQhP5AxQFMp+24v\nST2U9sUvfhG//Mu/jPe+9714/vnn8TM/8zP42Z/9WfzWb/3WnvllmgDQtPwkKV5XIPHxe1+GPqcQ\nMO0Ar73bgO0mPQOXrprQVY75yQJ0bfgp3h6SaegKHq8aOL+wjrcupwtwzekyaiUNpby28W+aIsH2\nAvhBPDSIliFJt39nqY0wElBkCdO1HIo5BfW2h5bpD/2CWsorODxbwolDFXDO4PoRXD9CMadATxki\nazo+vv/GKhbXbADAu1dNyBLH0bkidFXCsI6TOPTx8vf+GX/wv/3PMNtNAMCFl76OibmjmJg9Dssd\n3ntTKhYQxRFabRMAEAIQQkG1NokwcNHu/Hs/mqZhYvYIpu96HHppBgCwWm9CVWRUygVE8fAIAF2V\nEIYBllaaG//meg2Ui3nougrXH96bdmy+hB9/5A586L75jX+rlnQsrdkwnWBoLxRnQM5QMFvLQd2l\n0FJNlaEq0kjhqfsxOJVzhlJeHSlQd7+G6e4H3eu2rskwnSB1TqUic+R1GcqYvdJRFGFp8fJY+7jV\n5Axj4OfAsrIvJcREyq/0H//4x/HXf/3XG//9xBNP4IUXXsj8xLvt7NmziGKBv/ira7+Uy+sydFW6\nbkGLjhfi0nIbi6t237+plTRMlvW+wzGKzFEwZMhS78eDMMZL51dxZdXqmTOlKRJKeQWTlf5vkiCM\n4HgRvKB3nEsUxVhatdG0ew87CSHQsny0TB9tZ2eRpmsSZms5nDk+2febD2NApaD2PU4/jPD2QhM/\neKve83Eg2X52It8n1V3g8sXX8X/92/8V5176lz57YDh05/3Iladh2t6ORwv5HDjnGwVRTyKGrgg4\ntgXX3bmP6dmDmDr2MAqzp/u+HqWCAcPQexY3isTBmcBaozmwmJ2slsAluedrOlkx8KEz8/hXT94F\nuU8Pke0GWG44G8X8droqYapijJV3N0wUxTDdAEEQ9yy6OWcwVAnGLmQY7mVCCLh+CMeL+r7mw64T\nZG8Jowim07/glTiDoSX3p3Hf22fPnkXLtPGbv/27Y+3nVmJbJj7yyEnUarWBf1etVjPd/1P3GEnb\nPpDVanXkJ7vRLDeE44Uo5lQoMt+1i2sYxlhZt/HmQnPot4J6y0Oj7WFuModSTtu4qcsSQ06ToQ3p\nSVFkjodOTeMu08P3z69idd1BFAMyZ8jnFExVjKHf5hVZgixxqAGH528NO1xve7iyag3cnjGGciEZ\nnmu0PbQsH64fgTNguprDqaNVTFaMgfsQAmi0fSgy23Ie4ljgat3CN88tD/3WvG76WDd9HJjKo1LU\nNs59q76Mv/l//wP+6s/+/cDtAYFL578HLqs4duphQMnBdX1oqgJd19BuW8N7MBiHGwKaUYKuB2g2\nmxBCoFKbwMSBuzFxx6Pg0uDXtGU6aJkOJipFyIoCt1Pw6iqHadqwnJ0F13arjRZkSUKtWtzogcrp\nMu69YxK/9ON3o1Ya/HrkdAVHZmU0Wh4abRdeJ2BWkTkqRRWT5cHfxnaDJHGU8xr8IOk16c4pYwxQ\nOz0juzIvaY9jjMHQkl5V0w3g+dd6G9JeJ8jeIksSKgWpU/BeCwzuDpsV9N3t9ZMkGXMHj+7a/va6\ndrOBWq2GiYmJ67L/1D1Gp06d2vJCCiHAGNv4/6+++up1aWBavXqMNlMkjmJuvHRwIQTWTQ+vv7Pe\nt/dlEFniODZfRCmvIp/xg/HOUgtvvruOckFF3hj927wQAqbjo97y8O5VM9OkXs8L0XYCHJzO49h8\nOdNx5HUZrh/he28so94afYK0xBmmigKvff+f8H/87/8LPNcZeR+l2iymD98DxiXYKYqR7YQQMFQG\nvTiF2VNPQstVRt4H5wyVUgEQMerNwQVqP4W8jpNHZ/DTP3wXzhyfGnn7pDi1EQuB2VpurM9IVkII\nOF7yDTu3C0MLt7IwimE5ASSJd+YS7f/icD8TQsByQ0RRjLyhjD1Xb7uzZ8/Ccnz8zu//8a7udy9r\nNxt48uHD160wSv015LXXXtu1J11YWMAXvvAFrK2tQZIk/Pmf/zl0Xd+1/fcSRMk8m3F6ogWA195Z\nh5+hKAKSC14UCxQyFDRdR2ZLEAJ9h0CGYYxB4hyXMhZFAKBpMk4eqSJnZJ9bZrkhvvfGCppmtl+N\nRbHA1772Av70mc9lbkOrvoTZQydhOdnPpRdynHn4k/CjbBe7OBZwHAeOl/2Xa6bl4l9//DSOzI1e\nmAFJcTY3mc/8/LuBMYacvjfmKt5sssRRLmjD/5DcEhhjKIxxrSQ33k3pn/385z+Pz372s3jwwQfR\narWgqtdvHgMhhBBCSFo3vDA6f/48FEXBgw8+CAAolUo3ugmEEEIIIT3d8MLo4sWLMAwDv/Ebv4Hl\n5WX86I/+KH7913891bbLy8tYWVnp+VgQBEMnvRJCCCG3mmH3vjjehVV9yYYbXklEUYRvf/vbKfBn\n3wAAIABJREFUePbZZ1GtVvGrv/qruO+++/DBD35w6LZf+tKX8Mwzz/R9fG7+wG42lRBCCLnpht37\njDyNvOymG14YzczM4N5778XMTLLw3eOPP45XX301VWH09NNP48knn+z52Kc//eldbSchhBCyFwy7\n97k91rgj2d3wwujMmTOo1+tot9vI5/P41re+hZ/7uZ9Lte309DSmp6d7PqYoytDVnQkhhJBbzbB7\nnx/SvW833fDCSJIkfPazn8XP//zPAwAeffRRPP744ze6GYQQQgghO9yU2cqPPfYYHnvssZvx1IQQ\nQgghfe2PqOqUTCeA7WZLfAeSoNV7jlWR07PVkzldxkRRz/z8QggsLJtYbtjwgmwLAsaxQBTHODJX\nzJxyPlHSMDORBMxmJXGGk0eqmCxlW9jT9QKwwlE89q8+D0XLtjhhdWIOrmNBk5HpNWFcxqkHfxiM\nyyOn3nfpmoKZ6RoOz09kXuH46Y+cxlQ1l60BhJDrSgiBtu1j3fQQhDQX6FZwW/y+nSFZtTqKk6XZ\nvSBGwRg9doAxhlJew4MnplBveXj93UaqeU0SZzh5uIpaScsct9Bse3h7sYWmlawU7foRfCWGoUp9\nA2o3S4IqkyDZIIyhqzJOHq6iafm4vGKmSoJWZY57jtVQ2rQqr6ZIMJ0g9eQ/hmSl5SgWMDQZ99w5\ngbbl4wcX1lIljMdxjOW1JupNE20rQnHuDD72a/8Ol175Gr7zD3+MNAeiaAZmD96FMOYwLRuy56FY\nLCEQEqI4XXFy6K4HMXv0PvhCgxfEMDQZnDFY7s6Q3V4YYzhyYBK6psEPY3Au48SxOTSaJpbXWqn2\n8cBdM/jVn3oPjs5VKDaCkD1GCAHXC+H418KBm5Z/W+UA3qpui8Jo+60yjGI0TR+qwlEw1D5p7f1J\nEsdU1UApr2JxzcQ7S/3T2I/MFjA3UeibOj+MH0Q4v9BEo+1uBBECyf3f9SMEUQxNiZDT+mev+UEE\nxw/hB1sLDwGglFdRMCpYaThYa/XOC2MMuOtQBTNVY0dSMWMMxZyKnBZj3fIHxoxInCEWYkcxWcyr\n+OCZWSzXbbz+7nrP2kYIgWbbwkq9hXpzay5aAANz9/wYPnb8Ibz89T/Du6+92LsBjGH+yEnIah6m\ndW0fYRih0Wggn89B1ww4PsD6JDKXarM4ft8T4FoZm2vBbqRH3lCSmI8BER+zUxVUSnn4odgS6BtE\nQLlUQKmYw5WlOmy3d1xKuaDhf/rFD+D+u2agDAkQJoTceEEYwXJCBNG2a64APD/5cmqoEgyNsvD2\non1bGHV7ifoRALwgRhB60FQpU1ijpko4MlvCVCWHCwvraGzK/aoWVRw/UEEuYwhkLATeWWphue4M\n7I2JIgE7ihCGApoiQVOljecLoxiuF8ILIgzq2OKcY2Yij1pJx8JyG45/7cM8P5nDkdkS1CE3YEni\nmCzp8IJoo1dr47FO4Tmod40xlrShrOPilTaurF4LVHVcD0sr62i07L69SgIA9Cm858d+C3c99DH8\nt2f/HRxzdePxydnDyJem0LYcIOgdOGtZNizLRrlUAlc0OL7YOJeSrOHu934ERmUefgjEfV4SywnA\nWVIgeX64pZgtFnTMTlURC9b3VyTJdZTj8IFpuJ6Hd6+sbhSbEmf41598AD/03qMoFa5vtiAhZHRx\nnIR0+0E88P4Tbxq9yOkytDG/4ERRhKXFy2PtY6/JGUbfe6dlta/rc++7wqhbEKWdMRJvpHpHyGky\nNHW0U8IYQ95QcM/xSTRNDxcuN3H8QBnlgrZREIxqdd3Gu1dNtO10wzIA4Ifxxv/pKkcYCXhBtOXG\nPIyiSLjjQAWmG2Ct7uDksepIgbcCgKpImKoYMB0fXhCBgY20jIIiS7jrcAUHpvL4/hvLePvyGhot\nC5aT7lwEEaDV7sSP/ve/j6UL38APvv7/YGL6MNwgToqiFJqtFhhjKJfLiJmKQ6c+hMmDp+BFMvwU\nU7tikRRIuiJBUzlcL8KRA5NQVAVByp/V+mEMLik4cWwezbaFk4fK+IWP3ou5qSJ9wyRkjxFCwPZC\nuH40Ujh3GMVoWT5UedzgYAERpb9f7HW2ZeKRM9Oo1Wp9/6ZarV63599XhdGwXqJBwkjADyOoipTp\nxiNxhlpJRzmvZp5HBCRdsG9caqaab9NLModocA/RIAJAXldw6GRhrOPQFBmOFyHrK5IzFNRbbSxc\nXc+0vS8U1O54FFMXX0JrvT7y9kIIrK+v48ipD6I0dy+8DHMm3SACgghHD00DXE5dFG3mhwKTtRI+\n87MPw9AooZuQvcj1I9huth/EANgypJ6FJMmYO3h0rH3sJe1mA7VaDRMTEzfl+W+rX6UNx8b+Nj5O\nMQEkY9BjL9W1Cz0K4x7HbpCz/tRrE0Uer5iQZHns10MdcZL/dgwMUp85T4SQmy/rL43J3kRXW0II\nIYSQDiqMCCGEEEI6qDAihBBCCOmgwogQQgghpIMKI0IIIYSQDiqMCCGEEEI6qDAihBBCCOmgwmiX\nxfF4C3UBANsDa2LsxnGMKxph1e5+xj2O3VifZFfWOBlzSad4rxwHIYTscfuqMBLIfv/gnIFzlvni\nL4RAEEYwnQBBGGXejyJzHJguQNeyLQqoqxImyhrKeWXkcNwuP4jw1uUmvDT5Fz2EUYwrKyZWGnbm\n1Sr9IML0ZBkzE8VMCyTqqoRy0cCRe5/AzNyhTG04cvgQzn7oNN5/7wGU8umjUbokznDnoRoePj2D\ng1N5ZHk5ijkF9x6fGKsuiqIYthPAD7K9L4UQ8IPkvR1GMRVIhGyja0neWda1deU9sKAuuWZfRYIA\no9+HGQBV4SgYauZCIorjJCenkxvhBT4MLUlOHnXFYsYYjsyWMD9ZwPmFddRbHsJoeK+HIjMUcxqm\nq8bGcZiOj9V1N/VS9XEcY7nhoN7yAABXVm3cebCMmYlc6uNYa7p48eXFThwIoCpNnDk+gUIuXWER\nxwJX6zbefHcdAsDRg9Ooli0sr7VQb9pDt+cMKOQ1MK4ATMLM8fdh8sgDqL78FSxdfBnrjeHxINVq\nBR/4wAfwmc/8jyiVSgCAy8stfPmf3sBblxup4lrmJgt4/5mD+ND9h8EYwwMnBM69Xccrb9ex1nSH\nbi/LDMfny/jk48dxcLow9O97ieMkL8/s5Mw5fgRF4sgbMmSJD13lXQiBKBaw3QBekByz60fI6zJ0\nVQKn1bgJAQBwxlDKqwjCCJYbpo50kjiDoUrQtX13K76lMbFPvv6dPXsWUSzwF3/13Ma/DctO694k\nlIyRDXGc5KuZdtDzeRiAQk6BKkuZi66W5eGtKy20TL/nc3ST3KerRs8AXCEE6i0X621v4+bW73kW\nlq2ejykyx+ljVVQGJLpbToAfnF/FwkrvfUzXdBw/UIE6IEW6Zfp4+a21nheVOBZYrTextm6iZXk9\nty/kVMiyghi98+7s1gouvfRlXF04D8fZGSirKAruO3Mvfu3XfwOnT5/e8bgQAt9+9Qr+63ffxcJy\nq2cbygUN9xyfxscePdHz9fCDCN94ZQlvL7ZgOb0L1gNTBfzQQwfwvtMzmSJqkt7LGG0n6BtomdOS\ni3G/gjeOY7h+cpHvhbGkN0uVs2ULErJfCSHg+iEcL+oboM0YoCkSCoYy9ufn7NmzsBwfv/P7fzzW\nfvaSdrOBJx8+fNOy0vZ1YdS1vUDaXKWPc+MxnSBVcrzEGQo5BUqKb+n9nm9x1cKVVWvLjcrQJEyU\ndZTyw1OZoyjG1YYD0/YRdubuMACuH+KdpfbGvw1SLWq461AFxqZvN0EY4e0rLbx0fi3Vsdx1qIzZ\nifyWQtH1QrxxqYFGyx+6vecHuLq6jkbLhusl58LQZWiKgpilu8g0Lr+CS+e+hqXLFzeGhe688zg+\n9clP4amPf3zoPoIwwlf+23n84M0l1FtJ74+mSLjjYBU//tgJzEwUh7ah3nLw4stXcWXFQtDpEawW\nNTxwYhJPPXoHFHn03phuD4/lBKlCKRkDCsbWwn2jqLL9VEHEssRQMJRUPVCE3E6EEDDdAJ4fYfNd\nVpE5CroMecwMxa6zZ8+iZTr4Hz73b3Zlf1nkDGNXP/+W1cZTT9xDhdG4BhVGXZwB6hhVeq+hhVFo\nCkdeT+b+ZHn+KIrx1pUm6i0PxZyCycrob0bHDXG1YaNl+VhaNdGyR59HdGSuiNlaDk3Tx4svL6Xu\nNu6SJY5776ghp8tYXLPw9pX2yG0wbQeLyw0EoQCXZICNdpGJ4wiLr72A5uKreP/DD+HXfv03YBjG\nSPuoNx38zT++hqbp4bEHD+OBk/MjbQ8Ab15q4OW36piq6PipJ+/ERGm0NnRFUQzPj2B5o7+eEmco\nGgrAkp6/IMOk96xDx4Tsd2EUw3ICxELA0GToPXqSx5EURjZ+87d/d1f3m5ZtmfjIIydRq9V2db/V\navWmDdffVoVROa8OHMoZRgiBtZaLcc5YTpeR18dLfF9vu5luXl1t28fz37yEME2XQB9+EKFpDu/h\nGURXJbh+lHl72/Hx7tXeQ1pp/fJP3IOD08N7eAZhDGO9J2aqBiYq2QqirnHfE7uhmFN2/aJPCBns\nZg+l3exhr+uBvt4RQgghhHRQYUQIIYQQ0kGFESGEEEJIBxVGhBBCCCEdVBgRQgghhHRQYUQIIYQQ\n0kGFESGEEEJIBxVGhBBCCCEdt1VhlIT7ZV9Q0PWjzGnxXZ4fwcmwOnGX44VotNMFy/YihICIBY7O\nlzIntnPOcHi2iMlS/+y0YY7MFvHI/XPQMi64yRnDRz90FB//8B2Z22BoMmw3HOv1KBUUzNRymVO1\nhRC4vGriar13xlxaOV1Bxjg+AIChSsiNEWTJGCCP0wBCCNkjbqtlasMoRtPyocoSCjkFPOXdLAwj\nmJsSk4eF0/bDAESxgOkE8IJopLycKI6xtGbDtJN8Nj+IoSkSckb6vLcgiGC7IfwwxoGpAibLOt5a\nbGG5vjNQtZ/5yTwqxSSbrVbS0bZ8/OBC7+DXXnK6jB9536GNvLTDM0W8drGBF19eSn1O772jhscf\nPIhaKWnHh87M44+eO4dzF+uptuec4eG7Z3FguoAwElhYNlHMKZiqGqkjLRSZ48BUHkYnb6+YU7C2\n7qLe7h1wu50QSfK950fwwxhN08fVuoPjB8uZVkZXFQnVog7PD2H2CX7tZXPWGQBoqpQ6a61rWCAt\nIYTcSvZ9YbS9iBEC8IIIQTuGoUobN7ZehBBoOwH8YGsIYPd/pi2Qun+3+W+DMMa65Q9NWBZCYK3p\nYt304G/KZ4tiAdsL4YcRDE2GpvZPOY+7waJBtCUYVFNl3H2khoNTPs69XR8Yz1EuqJit5SBJW29+\nxbyKD56ZxXLdxuvvrveNxuCM4dEH5nDnoTI05drbTtdkPHByCkfnS3jx5cWBuWnVoopPfPg4Dkzn\nt9yED8+W8LlfehivvL2G//MvX0Lb7h9VctehCk4dnYCyqSANwhj1lgfHDVEqaqgVtb7nkrGkOCzm\nlC05PoosYWYih3JRw+KqNfBcBmEEx4vgBdf+JhZAo+3h+2+uYrKs4/iB8o5zPQznDIauQFUk2G4A\nd0CeH2NJhIcqb33fyBJDKa8mQbJOgHhAbEwShqlAkrJl/xFCyF60bwujXsXIZnEsYLkhvCBCTle2\nDOkIIeB6IRw/QjTgxpC2QOr3mBDJ8FwQJkWavq1IM50AKw0bjtf/JhtGAm076ByHvOWGL4SA44Zw\nhxxHMafi4btnsNZ08No764g3VTeyxHBktghdlfseB2MMMxN51Mo6Li62cWVl67DQ3UcreOjUDIp5\ntW8bKkUNH3n/EVytW/i7b16C5Vzr9ZAljp949ChOHK70zeJSFAkPnJjGv/mtD+Ofvr+AP/3K61tu\n6rWihvfeM4eiofY9DseP4KzZsGwfE2UDeWNrz81ESUOtrG85x9vPg6HJODJXguX4uLJqb2lDHAvY\nXgA/iPu+HkEYY3HNRtP0MT+Vx/xkfuSiQ5I4CjkVehSj3elh3Cyvy9BVqW9AI2Ms6YGSOLwggukE\nWx7nnR4yReZUEBFC9p19VxgNK4i2CyOBluVDlTkKhoJYCJhOONIcHoGdxdEow21RLGC6IdwgRsGQ\nAQEs1W1YboA4ZTP8IEYY+VAVCXlDQRAkvRJph7g4Z5iq5lAparh0tY2FFQsHpgoo59XU51ORJdx1\nqIIDk3m88tYaNFXCk+89hKmqkeoGyjnD3GQBP/sjJ3DhchNf/+4VPHx6Gu+/ZxblgpbqOEp5FR/9\n4DG858Q0/tPfv4lvnbuKD5yZw3Q1D6Q8DtMJ4fomCoaCqYqBUkHF3ER+YK/cZhJnKOU1GJqCddPF\nct2B6yc9RGlfD9sLcX6hiZWGg2PzpdTH38UYgyJLqBQ4/DCCaQdQZI68oUDi6Xp4OE8KPVXmsN0Q\nbmf4V1NlcJpPRMieEUURlhYvZ94+Z6S7RvdiWf17+W9V+6owyjr3BwD8MEa97WXex/ZtsuwjjGI0\n2h7W2x7CDEnpcQy4XgTfT4b+srRBkSXccaCCckFDnHEfOUPBIw/M4+hcaWPuyihURcLdR2u47/gE\nSgUt9VywLsaSAuvTP3U/Ds++jSAc/SjCSGDd9FEuaDg8W4KUoRBQZI7JsoHFVXtHr0taTcvHqxfr\nePjumZGH1oCkuNHVpLhhLNuQV9IDpSAvFCqICNmTBESU7RpjWyYeOTONWq2W+dmr1WrmbfeifVUY\n7YYxf3Q2VnEGJMNrcb+JOmn3MWYbgOSm7g2YozIMZyxTUbSZoaWfIN+LLHGoioQgzP6rM02VMhVF\nXYyxzL/+6xowCppav2GztJKiavx2EEJ2nyTJmDt4NNO27WYDtVoNExMTu9uoWxj9jIQQQgghpIMK\nI0IIIYSQDiqMCCGEEEI6qDAihBBCCOmgwogQQgghpIMKI0IIIYSQDiqMCCGEEEI6qDAihBBCCOnY\nV4URY7ipi9B1F3ccpwmcAYrEkXVNQc6T7RU5+0srS6yTu5ZtH5wBOV2GLGU/E5wlWW/jmq7moCnZ\njkOWGNqWB8cLxmpLraxD13rnq6WR1+RdOReEEEKG21crXzPGUM6rsNwwdSYV0Hu16lFXsN7891lu\nYRvbM4ZSQYMXRHBGPA5V4RtBsmkDZDeTOIOqSsjrMhjT4QcRlhs2LCdA2ui4gqHg0HQB07UcAMD1\nQ9humLoNAKB2Mr3GXTkbAB46NY07DpTxg/OrWG06qbPnCoa8EST79pX20ADZQQ5MFTBdzeH8wjrq\nLS91Dl9OkzMHyRJCCMlmXxVGQJL1Vc5zuH4Exxt8Qx4UONsrGHbUfWx+PM0+NtMUCarM4XghPD8a\nmJ0mS0nY5+aQU8YYcoYCXZNhOQH8IOobLcFwraiSN934VUXCweki2paPtaYL2+sfraGpEqYrBo7O\nlbbkaemqDE2RYLkhPD8cGG8hSww5TYGmZu9d6aVa1PDYA/O4uNjG+YV1NE2/798aqoRyUUO1qG0p\nRtZaHhptD3OTeRRyCqQRIzYUmePuozW0LA9vXWmhZfp93xdJxpqO4wfKmfLRCCGEZLfvCiMgKQoM\nTYauSjDdAF4nVHXL32B4wdJ9fFCP0vXcB2MMOV2Brsqw3E5xs6mzQeIMmiIhZ8h9exQ4ZyjmVQRB\nBNsN4W/rgVJkDkOToKn93wrFvIpCTsFa00HT9LdkqEmcoVrScPxAGXqffTDGUDAUGKoE0wl2tCEJ\nOpWQ0/ofx7gYYzg2X8LhmQJevrCGhRUTjhdtPK7IHMWcgqmq0bfoiQVwecWCKnPMT+VhZGhvKa/h\n/jsnsbhq4cqqBcu9VmxyBpQLGo4fLCOvK9kOlBBCyFj2ZWHUxRhD0VBhqHHSaxLGqQuazXoVN6MO\nl23++1HbwDlDMaciCJPiJghjqDJHboThJkWRUOr0QLl+BAhAVyUYerqbO2MMk5UcqkUdS/VkeC2n\nyTg6V0K1pKdqgyRxlDvDhLYbIIoFVJmjYKg3LLVdkjjuPzGFOw9V8L03V7HasKFrMiYrBgwt3cfB\nD2NcXGyjXFAwVclB6STXp8UYw/xUATO1HC5caWJt3YWqcByaLm4MQRJCSFpRFGFp8XLPx3KGMfD6\nZFnt69WsW9a+Loy65M4Ned10EYTZJ7Hu1vTXrPtRZAmlPIcQIlNa+kYPlCYDApmKEUniODBVgCpz\nlPJqph6e7jBhLMTIQ1K7JW8oeOS+Obx5aR1+EGU6jqYZoGk2cfJwBVKGieaSxHHiUBXebJRMuL9B\nxSEhZL8REFGw419ty8QjZ6ZRq9UGbl2tVq9Xw25Jt0Vh1MVGnlK99zDGwBkb6yg4Y+P9dA7YMp8p\nC8YYpD0woVhXpZEmuPcy7jtKU3Z3ThUh5PYiSTLmDh7d8e/tZgO1Wg0TExM3vlG3MJrZSQghhBDS\nQYURIYQQQkgHFUaEEEIIIR1UGBFCCCGEdFBhRAghhBDSQYURIYQQQkgHFUaEEEIIIR23VWE0TuL8\nXpI1Lb5L4gxKhgUJN0viSbKv4BPHAq4XjpUa7wURgjAa/ocDJDEk2beXJT7uklCEEEL2kNtqgUdD\nSwJNbTeEG2S/oWZdJnLc5SW7eWKcMxix2Ig5GeX5CzkFqiyBMSAIY7Rtf2Cwa7/9eEGMIPJGzjgT\nQsD2QrhehFgIOH6EgiGPlFofRfFG5hpjgCpLKOSUZOHKEdXKOkoFFWvrLuptL/V2jAGztRyK+RsX\nZ0IIIeT6u60KI8YYJImhkFOgRxLadpLXNXQ7bC1oRi1u+mWjpS2UJM5QzCW5aN0CRJYYSnk1KW6c\nYGjvjaFJMDR5SwSHqkioFjW4frQlzHSY7jPFsUiCaYMIOU2Bpg4ubjw/gu0FCKNrbQ2jGE3Th6Jw\nFIdkpgkhYLkhPD/cKOaE6PQcteNMQbSMMSiyhJmJHMpFDYurVpIlN0ClqGKybEClFasJIWTfua0K\no67uzbBS5PCDCKYToNeITpqw12HFzaDHe4XTbm0nUDQUKIrUszeEMZYUNxKH1zmO7RSJIW9sLao2\n45zD0JL92G4AL+jdAzXoOMJIoGX7UH2+8VxbH48H9m4JAH4QoxF60FQJ+R7Btq4fwnbDvoXsliJN\nV0aO2WCMwdBkHJkrwXJ8XFm1dxSbmsIxP5mHPmLxRQgh5NZxWxZGXZwx6KoMReZwvRC2l/QUpCmI\nuvoVN+PuI6dJ0Lf18PTDeXJTV2W+MUzIGFDKqamS3xljkCWGYk6Fvq0HapTj8MMYodktbhQAgOkG\n8P0o1XBdLAQcL0QQRshpMjRVRhhGMN0wdZ5ZGAm0LB+qzFEwFEjSaPOxJM5QymswdAXrbRcrDRec\nMcxP5pDPsD9CCCG3ltu6MOqSOEdOV8A5g+WEmeYBbd8m6z4YgEpBhdSnh2cQSeIo5BQYsQzOkt6g\nUWzugVo3PUSxGPk4YgE4XgTPTxLr0wxVbpf0QAWQ3ACxQM/evGH8MMa66aFS1FIVl9spEsdk2UA5\nr270MBJCyF4URRGWFi9v+becYcC2zZvUolsbFUYdjDFAjJ+UPu4EazCAZyiKNjbv9P6Mg3M29i+t\nYoFsFc3mfcTjncsxfjQHoFso0keEELLXCYjo2lQK2zLxyJlp1GpHUK1Wb2K7bk101SeEEEJuYZIk\nY+7g0Y3/bjcbqNVqmJiYuHmNuoXRhAlCCCGEkA4qjAghhBBCOqgwIoQQQgjpoMKIEEIIIaSDCiNC\nCCGEkA4qjAghhBBCOqgwIoQQQgjpoMKoQwgBMIy9sOHYSesCiCORtCfL5kIgjOKhobKDxBlWvN4u\njGKEUboYj344T/LiMm+/B+LMhBAIwzjz60kI2f/o+rC30AKPAOI4hutFsLz0CfPbyRJHTpehKRK8\nIILtbk2RT6O7anbD9JDXZOiaNFKsRxTHsL0QrheBM6CYMiutq1tUte1gI8pj1JW841igbfm4smYB\nAOYn8yjm1JEKRokz5HQZuiojCCNYI2SldalyEmibJQ5kN3TPpeUECCIxNMyXEHL72XydqBT1m90c\n0nFTCqMnn3wSxWIRjDGUy2X84R/+4c1oBoQQ8IMIbSfomV6RpijgnMFQJRibEtc1RYIqczheCMeP\nhvbe9ApqtbwQth+imFOgytLAm2kcC/hhBNMONvYRC6Bp+VBkjoKuQJLYwH1EUQzbDeAGWwuQUYoi\nxwuwsGxtKWIur1hQZAcHp/IwOsGy/XAGaKqMvH7tXCqyhHKew/UjOF44NHtNlhhymgJNvXnZZlEc\nJ699J5QYAIJIYN30YWjJe+VmFWyEkL2h13WC7A03pTBijOFLX/oSdP3mVMjdKt10Bvfq9Eq972IM\nUBUJBUMB71FwMMaQ0xXoqgzTCeCH0Y7ia1hyvRBAywogSyEKPXobhBAIwuQ4+hUMQRijYXrIaRL0\nHjfkOBbw/BCmO7y3rF+h6AcRVhoOmpbftw1vL7ZRzquYrhpQlJ1FiypzFPqk1zPGYGgydFWC6Qbw\n/J3nknMGXZWQ21Sg3mi9CtTtHC+C60coGEnBO/bQKyHklpLmOkFurptSGAkhEMfjzT/J/LxCjFyl\nb3/zKjJHXpdTJa5zzlDKqz2HhNJ+KMJtvQ28k1pvuwG8IN15tL0Ijh+haChQFAkMScHStv3UYavb\nC8UojtFse1iqO6m2b1o+mpaP2VoO5aIKifOkh0dXoPUolrZjjKFoqDDUpOvZD2MwAKrCUTBGG67b\nTb2GIAf/PdC2A0g86RGk4TVC9r9RrxPk5rlpPUa/+Iu/CEmS8Eu/9Et46qmnUm23vLyMlZWVno8F\nQQBFGTxU43ghbDccq0ovGMncl1FvZN0hoZblwx9xvkyX40VwvQi6KsHxR+9+FQJodW7InLOR5+1s\n7AfoFER2pg/4Ut3GyrqD+++cQCGnjnwuZYmjXNDg+RE4R6oC9XoRQsB0fLj+6OcyipOCt2gkQ39U\nHBGyPyXXiQBuhus2MPzeFwYBlhYvb/ybY5uo1wsb/12tVkear3q7uymF0Z/92Z9henoiOCnQAAAW\n+klEQVQaKysr+JVf+RWcPHkSJ06cGLrdl770JTzzzDN9Hz948ODA7YMwHrvrUlOyD9UwxiBLPHNh\nBCRFSdYPV1cUi7G/sdgp5vsMa4OijFcM3Mx5RJul7bXrJxaCiiJC9jkvyH7dHnbv04w8RBRs/Leu\nafjOmy1wbsKy2njqiXswMTGR+flvNzelMJqengYATE1N4cMf/jDOnTuXqjB6+umn8eSTT/Z87NOf\n/vSutpEQQgjZC4bd+1w/wtzBoze2UfvYDS+MHMdBHMfI5/OwLAsvvvgiPvaxj6Xadnp6eqOo2m7Y\nMBohhBByKxp27/NDmrO0m254YbS6uorPfOYzYIwhiiI8/fTTuPfee290MwghhBBCdrjhhdGhQ4fw\n7LPP3uinJYQQQggZiqapE0IIIYR0UGFECCGEENJBhREhhBBCSMdtVRixfXK0u7FO17jL5sgSrbvT\nRakehJBhaKmyW8dNWcfoZikaKnQ1WZJ9WLDrdt209nHf3DldhqZKG5EWo5A4QyGnQOa8s7R8+jiP\nrm6eGBjgeiHsEQMMGYBCTsFEqYrDsyHOLzTRNHtnpPVTLqi482AZaooYkFtBpaCnzpvbrqDL0FQZ\nghZ5JGRfq45xnSA31m1VGDHGoMoSqgUOP4zQtoOh23DOknwxeXfyrJLVr7v5aTHazvAirVuMbA4d\nVbmEalGD6ycZbMNInO3I5UoyymSYbpAqHmR7MnzBUHHm+ATWTQ+vv7M+dB+KzHHySAWVgrZv0uUZ\nY2AMMHQFqiLBdgO4KVbC1hWOnN47NJcQsr9kvU6Qm+O2Koy6kiR2GYrMBwbKFowk3PR6hJMyxqAq\nEqoShxdEMJ3eRdr2YmQzzjkMjW180HpFUzCGjeBYvq2wY4xBlhnK3SKtTw+UIjHkjd5hpxL//9u7\n+xi56nqP45/zOA87Q7tbqBTQ2ssNreEPesmFSHKB65aEP0hpKxBjQtOAJgaz0agJ1BgJRsVsNUYS\nIsaEGJIGQ2qoBh8gZi2of4hIfYj8QUrSW2lFqHa33Zmdh3N+53f/2LPr9nEfZnbOPLxff7UzOzPf\n/Z3NnM/8fr85X1frLivov7eEevfUjI7+/cx5bVccSf9x1WVaP1Lsm1miC/E8V6ViqPwlGkVeKKAC\nGBxLeZ9AtgYyGM3xXFdDaWf3Si1SbGb/QOeWmzrxad51HRVyvkLf1Uw9Vj3tp+N7jkoXCSMLzc1A\nlYuh8ufMQBVznvIXCVXnPkcYeBounz3V6zpSuRguabYsDDxds76kdWvy+r93pnVyqiZJumJtQR/c\nUFYht/Iec73EcRwFvqe16axkZSaS1YVn/QAMpgu9T6B7DHQwks75A42MXNfJ5NP87KeIQHnjyVqr\nwF9eg9WFM1DN2Mh3XXmes6zncF1nfqo3MolC311WR2bHcVTMB9rywWFdXRmSHKk8FJ43UzUIFs5K\nNqNEYeD2zfIhgPZY+D6B7jHwwWjOXLDIclZjLqS1shHXdR3lWvw9PM+V6y4vVJ1Vg+NoTTm34tfv\nJ57rKh+ufCwB9L9WPzQZY3Rm6tQF32eq1emWnnsQEYwW6JaTV6t1tGuTONqDsQSwmmyS6L/+s6yR\nkZEL3j88PNzhinobwQgAgB7mep5GRka0bt26rEvpCyxsAgAApAhGAAAAKYIRAABAimAEAACQIhgB\nAACkCEYAAAApgtECSWJlbbZ9a6y1SjKuoVskSZL58QAADBauY6TZMDLXRNVzL94wdbVriE2iam22\nqeBSe5T1oySx841187m0bx3tNAAAHTDQwchaK2OsKvVIUTzbmT4xVlOV5iW72rebSRLVGrFqDTN/\n2+lqU4HvqpQPlt3zrFfNB9QFjXDrDaNGw9CAFQDQEQMbjEySqN6INbMgjCxUaxjVV/mEnCT2rA7s\n54riRJOVhoo5T/k+njWx1sokVtVapGYaUM+6X9L0TCTPjVUqBAM7kwYAWH0DF4wSaxVFRtO1SItt\nX1l4Qi4X27e8NrdsNj0zu2y2mJmGUa1pVC4ECgKvr7rVJ0miesOo2ogX/VmTWJ2uNpULXBXzgbwW\nGt0CAHAhAxWMotgsOYwsZJLZ5bV84GqoELY0exTFieqNSPXo/JmRS7FWOpOGtDWlsC9mjxrNeEkB\n9bzHRYkaUUPlQqBc6BGOAABt0/tn12WYqcfLDkULLTfMXEgzMi09j0ns/P6bXletx8sORQs1YkMo\nAjDwksTo1KlTSpLWz1EYsGAEAEC/cRxHv/nTCU1OTmZdSl8gGAEA0MM8z1e5vCbrMvoGwQgAACBF\nMAIAAEgRjAAAAFIEIwAAgBTBCAAAIEUwAgAASA1UMCoVA5XyK7vYt+tIa4ZCqYXrCTaasRqRaeUp\nVMr78vqkkeqaoVD50FvRY33PUTHny7ZyhUgAAM4xUC1BPNdVIe8qDDzN1JfelqOU95ULPbkrbMMR\nG6NKLVZ0gQapS5Wf6w/m9U+W9TxXpUKgfOgtuVWL40jltLEvV70GALTbQAWjOZ7nqlQMlV+kkWur\nzUqttarUIjUic9HWF45mm9VetFbXaWsD227jOI4C39Pasrtoc9+hvK98CwEVAIDFDGQwkhackEuu\nmrFRZSaaDyhuGkaCFYYRa63qjVi1pll0FmTu3nMDkqPZpb/Q91pqWtsrXMdRLvTl+67qjVgzDTN/\nX+i7GiqsPKACALBUAxuM5riuo3zoK/Bd1RqxfM9tKYxEsVG1Fisyy1s2WxiKCqGnQt6XN4AzI547\nO0uXC3xVG5EK6bEhEAEAOmHgg9Ecz3U1lA9aPgFX68sPRQs5jlTMBwMxS3QxjuPI9x2V3YBlMwBA\nR3HWWaBrZiW6pIysEYoAYHHGGFUqZ7Iuo29w5gEAoIfZJNH/3HCVhoeHsy6lLxCMAADoYa7naWRk\nhFn2NmEUAQAAUgQjAACAFMEIAAAgRTACAABIEYwAAABSBKNuRMN4AAAyQTBqs1IhUOivbFhdZ7Y9\nSbdcZxIAgEFDS5A28z1Xa0o5NZpGM41IsVl8+seRFAauSoVwoFuBAACQNYLRKsmFnsLA1UwjVr1p\nlCQXDki+56pU8BX4XocrBAAA5yIYrSLHcTSUD1QIfVVqTTWjZH77kOc6yoeeCjm/e3q0AQAw4AhG\nHeC6ji4byimKjar1WK7rqFQI5BKIAADoKgSjDgp8T2tLLJkBANCt+FYaAABAimAEAEAPSxKjU6dO\nKUmSrEvpCwQjAAB6mOM4+s2fTmhycjLrUvoCwQgAgB7meb7K5TVZl9E3CEYAAAApghEAAECKYAQA\nAJAiGAEAAKQIRj2m0Yx1utJQFJvMaohjo9OVhmr1SNYu3iQXAIBewZWve0RsjCq1WFE8e52KqNJU\nELgq5QN5XmfybWKtKrVIzcjIWqkZJ2pEiYZoggsA6BMEoy5n0zDSSMPI/O2SmlGiqbipXOhpKL96\nzWittao1YtWbRiY5e4YoMolOV5oKA1elQijXpf8bAKB3EYy6lLVW9Uas2gXCyEJJGlqi2KiY85UL\n23tIo3h2pio2F7+iqpXUiBJFpqF86KmYW72QBgDAaiIYdaEoNqrWYkWXCCPnio3VmZlIQdOoVPDl\ne60tbSWJ1XStqShKtNRdREliNVOP1YyMirlAuZDlNQBAb2HzdZdJEqsz1eayQtFCUZyoGbXeL+d0\ntaHmMkLRQrGxqrIxGwDQgwhGXajVPNGWZayWa2hTHQAAdBDBCAAAIEUwAgCgh9kkUbU6nXUZfYNg\nBABAD8uFnrb/7/UaHh7OupS+wLfSAADoYZ7nad26dVmX0TeYMQIAAEgRjAAAAFKZBKN6va7R0VHt\n27cvi5cHAAC4oEyC0VNPPaWtW7dm8dJAx3GhSwDoHR0PRseOHdPRo0d12223dfqle4LjzH7DYKXX\nRnQdpy0n4nzoyVthQ1hHkue6Ax8IrLWKTaJaI1JskoEfDwDoBR3/Vtr4+LgeeeQRHT58eNmPfe+9\n93Ty5MkL3hdFkYIgaLW8zDmOo3IxVMHMNm+N4qW193Cktna4L+QD5XK+KrVIzcgs+WrcgedqqOAr\n8Ae7T1qSJKo3jar1WJJUrRsN5X3lQ0+uy9Y+AEu32LkP7dXRYDQxMaFNmzZp48aNOnz48LI/QT/3\n3HN68sknL3r/Nddc02qJXcP3PK0teWo0Y800YsXm4mPle65KqxBGXMfRZcVQcWxUqV86pHmuo0Lo\nKZ/zB7oViLVWUZzozEzzvDBZrceqNWKVi6EC3x3ocQKwdIud+0qlUger6X+O7eD8/re//W298MIL\ncl1X1WpVxhg98MAD+vSnP72kx18qNT/00EMKgkATExPtLLkrWGtVrcdqNI2SBYfLcx3lQ0+FDoWR\nejPWTD2WSf5dg+NIucBTqRAM9Il+btmsWosUXSLEzgk8R0OFQL5HQAJwaYud+yTp17/+dSdL6msd\nDUYLHTx4UEeOHNHDDz/clufbtm2bJPVlMJqTJFaVWlNRbBUErkqFQG6HT6rzIS0y8lxHpYIv3xvc\nZTNrrRJrVWvEqjXMsh9fyM0GW9dxCEgAlm3btm1KkkSHDh3KupS+wZWve4jrOrpsKCdrbWYnUcdx\nVCoEGsoP9pLZQpPTjSXvwTpXrWHkOo6K+d7fHwcA/SCzYLRr166sXrrndUMg6YYaAABoN74eAwAA\nkCIYAQDQw4wxSpKlXdoFiyMYAQDQw2qNSJOTk1mX0TcIRgAA9DDH4VTeTowmAABAimAEAACQIhgB\nAACkCEZAiwpha1f+9lxn2X0DAQCrgytfAy1w0qtW5wJflXp0yUa75wp8V6V8IM+jHQgAdAuCEdAi\nx3Hk+47WDIWK4kTTM00ll5gAch1H5WKgwKeBLAB0G4IR0CaO4ygMPA2X82o0Y1Xq8Xk/U8r7yoW+\nXJdABADdiGAEtJnrOirkA4WBp5l6pHqUKB+4KuYDeR7b+gCgmxGMgFXiea5KxVDFxMp12UcEAL2A\nYASsIsdx5HkEIgDoFczrAwAApAhGAAAAKYIRAAA9zBijycmprMvoGwQjAAB6mO+5+vt7BKN2IRgB\nANDDXNeV7/NdqnYhGAEAAKQIRgAAACmCEQAAQIpgBGBRSZIoiowSe4nuuADQB9itBeCirLVqRkbT\ntUjWSp7rqFwM5HsuLU4A9CWCEYDzWGsVm0SVWqTY/HuWyCRWU5Wm8qGnYs6nKS6AvkMwAnAWYxLN\nNGPVG+aiP1NvGtWbRqVCoFzgyXWZPQLQHwhGAGStlbWaXzZbqkot0kwjVrkQKPBZXgPQ+5gHByCT\nWE1WGssKRXOSxOp0talmfPEZJgDoFQQjAJJmA04r+MIagH5AMAIAAEgRjAAAAFJ9s/n65MmTiuNY\n27Zty7oUoCeZFpfSXMcRe6+BldmwYYP279+/sgdbK2PY49cufROMwjCU7eFNDsYYVatVDQ0NyfO8\nrMsZOIz/7MUbs8L4Z4vxz5YxRidOnNB7772n9evXL+uxGzZskCTdesuNq1HaQHJsL6eJPvLGG2/o\nox/9qJ5//nldf/31WZczcBj/bDH+2WL8s8X4dxf2GAEAAKQIRgAAACmCEQAAQIpgBAAAkCIYAQAA\npAhGAAAAKe+xxx57LOsiMGtoaEg333yzhoaGsi5lIDH+2WL8s8X4Z4vx7x5cxwgAACDFUhoAAECK\nYAQAAJAiGAEAAKQIRgAAACmCEQAAQIpgBAAAkCIYAQAApAhGAAAAKYIRAABAimCUkbGxMd188836\n7Gc/O3/b22+/rXvuuUd33nmn6NSyuv7xj39o9+7duuuuu7Rjxw69+OKLkjgGnTI9Pa177rlHu3bt\n0vbt23XgwAFJjH+n1et1jY6Oat++fZIY/04aHR3Vjh07tHPnTu3Zs0cS498tCEYZ2bNnz/yb0Zxv\nfvOb+sxnPqOXXnpJ//znP/XKK69kVF3/8zxPX/rSl/Szn/1MTz/9tB5//HHV63WOQYeUSiU9++yz\nOnjwoA4cOKDvfe97On36NOPfYU899ZS2bt06/3/Gv3Mcx9Fzzz2nH//4x3rmmWckMf7dgmCUkZtu\nuknFYvGs2/74xz/q9ttvlyTt3LlTv/rVr7IobSBcccUV2rJliyTp8ssv18jIiKampjgGHeI4jnK5\nnKTZWQtJMsYw/h107NgxHT16VLfddtv8bYx/51hrlSTJWbcx/t2BYNQlJicntXbt2vn/v+9979O7\n776bYUWD469//auMMcrlchyDDpqentaOHTv0kY98RJ/4xCfkOA7j30Hj4+P6whe+oLk+4rwHdZbj\nOLr//vt133336ac//Snj30X8rAsAsjQ1NaW9e/fq61//etalDJxyuayf/OQnOnXqlMbGxnTnnXdm\nXdLAmJiY0KZNm7Rx40YdPnw463IG0g9/+EOtX79eJ0+e1IMPPqgrr7wy65KQIhh1ieHhYZ0+fXr+\n/++++67Wr1+fYUX9r9lsamxsTJ/61Kd0ww03SBLHIAMjIyPavHmzXnvtNca/Q/785z/r5z//uV58\n8UVVq1UZY1QsFhn/Dpob2yuuuEK33nqr/va3vzH+XYKltAxZa+ensSVp69atevnllyVJL7zwgkZH\nRzOqbDDs3btXH/7wh7V9+/b52zgGnfGvf/1L1WpV0uyS2h/+8Adde+21jH+HfP7zn9ehQ4c0MTGh\nRx55RPfdd5/GxsYY/w6p1Wrzf//ValW/+93vdN111zH+XcKxC8/M6JgHHnhAb775pmq1mtasWaMn\nnnhCa9eu1ec+9zlVKhXdcsst+spXvpJ1mX3r9ddf1+7du7V582ZZa+U4jvbt26cwDDkGHfCXv/xF\njz76qKTZDwhzey2OHTvG+HfYwYMHdeTIET388MOMf4e8/fbbGhsbk+M4MsboYx/7mO6//37Gv0sQ\njAAAAFIspQEAAKQIRgAAACmCEQAAQIpgBAAAkCIYAQAApAhGAAAAKYIRAABAimAEAACQIhgBA+TJ\nJ5/s2GudOHFCBw8e7NjrAUA7EIyAAbKSYJQkyYpe6/jx43r++edX9FgAyAotQYAB8bWvfU379+/X\nhz70IYVhqDvuuEMvvfSSoijSlVdeqfHxca1du1a///3v9a1vfUvvf//7deTIEe3bt0+u6+qLX/yi\noijSTTfdpEOHDmn//v266qqr9NZbb+nxxx/XmTNn5Lqu9u7dqxtvvFF33323jh8/ro0bN+rGG2/U\nl7/85ayHAAAWZwEMjC1btsz/e2pqav7fTz/9tB0fH7fWWvvqq6/a66+/3r755pvz9+/atcu+/PLL\n1lprf/nLX9otW7bYEydO2DiO7b333mvfeecda621x48ft6Ojo/PPs3v37lX/nQCgnfysgxmAbLz+\n+uv6/ve/r2q1qmazqQ984APz923ZskXXXXedJKlSqejEiRO6/fbbJUl33HGHyuWyJOno0aN66623\n9NBDD8mmk8/GGJ06darDvw0AtAfBCBggc+Gl2Wxq7969OnDggDZu3KhDhw7pBz/4wfzPFYvFJT/f\nNddcwyZrAH2DzdfAACmVSqpWq2o0GrLW6vLLL5cxRj/60Y8u+Zirr75ar7zyiiRpYmJC09PTkqRN\nmzYpiqL5+yTpjTfemH9cpVJZxd8GANqPYAQMkD179ujee+/VJz/5ST344IPavn27Pv7xj+vaa6+9\n5OO+8Y1v6IknntDdd9+t3/72t1q3bp3K5bJ839d3v/tdPfPMM9q5c6fuuusuPfvss5KkzZs3a926\nddqxY4e++tWvduLXA4CW8a00AIuamZmZX1577bXX9Oijj+oXv/hFxlUBQPuxxwjAol599VV95zvf\nkbVW+Xxe4+PjWZcEAKuCGSMAAIAUe4wAAABSBCMAAIAUwQgAACBFMAIAAEgRjAAAAFIEIwAAgBTB\nCAAAIEUwAgAASP0/SIcBFuu07esAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n3vcTbFq/FitWrJjrKS14S6LSREREtBQJw0AuV5jraSwaDE1ERERECTA0ERERESXA0ERERESUAEMT\nERERUQIMTUREREQJMDQdwbUNFLI2TEOkOm7WNWFZC2+5hQBacjbclOfuWgY8xwTvF01ERAvFkrhO\nUz2EELBMgULWRhgpVBq8ZpNlCmRdC6a58AITUFsPIQQynoAtFcp+jEZyjhC161VZpgEh0g2mRERE\nzcTQNAkhBFzHhGUKVMMYUVx/Ush5FmxrcYQDIQRsy0RL1kAQSfihrHsMzzHh2iaMlKt4RNR8/f39\n+NjHPobu7m6cfPLJ+NKXvgTHcca85q677sKePXsghEC1WkVfXx9++ctfjj7f09OD9773vfjEJz6B\nD33oQ7P9I+DDH/4went74bouhBDYtWvXuJ/h3nvvxb//+79j//79eOqpp5DJZOr6Ht/5znfwr//6\nrwCAk046CZ///Odh2zaee+45fO5zn0MYhshms/jCF76A1atXp/az0exYmOWPWWSaBnKejXzGQtJD\nvW0ZaMnZcGxzUQSmwxmGgOeYKGTtxOHHMGqVO89hYCKajFJqXo/5b//2b9i4cSMeeeQRrFq1Cvfe\ne++411x11VXYvXs3HnjgAVx11VU4//zzxzz/j//4jzjnnHNSm9NM7NixY3SORwYmADjjjDPwjW98\nA0cfffSMxt+2bRu++c1vYs+ePdBa4wc/+AEA4Ktf/Squu+467N69G+973/vw9a9/vaGfg+YGK00J\njFRZCjmBIJAI4on/EC2VraexW5gS1WDyqlPWNWHbJoxFvB60tHR1dWHLli044YQT8Pzzz+P000/H\nbbfdBsMw8Mwzz2Dbtm2oVCro7OzEtm3b0NLSgn/6p3/CT37yE/i+j3POOQc33XQTAGDDhg248MIL\n8cQTT+CGG27AT3/6Uzz22GPwPA8bN27E3/7t32Lfvn3YunUrgiDAqaeeiltuuQWO42DDhg24+OKL\n8cMf/hC2beNf/uVf0N7ejptvvhmu6+LZZ5/F+eefj49+9KOp/NyPPfYY7rvvPgDA5s2b8aUvfWnK\natHDDz+MK6+8cvTf9+7di3w+P6668pnPfAZ//dd/jbVr1455/Oabb4bneXj66acRBAG2bt2KM888\ns+GfY7oguWbNGgAY129ZrVZxyy234IUXXoBSCp/85Cdx9tlnTzhGtVpFLpdDpVJBR0cHAMAwDJRK\nJQBAsVgcfZwWFoamOpiGMWlvj2ub8BwDhrF0ineGEHBtE7ZpoOzHkOq1BbEMgaxnwTDEog6QtDS9\n8MIL+PznP49TTz0V119/Pb797W/jr/7qr7Bt2zb88z//M1paWnDffffhzjvvxD/8wz/giiuuwN//\n/d8DAK699lr8+te/xpvf/GYAwKpVq3D//fdjYGAAn/rUp/CjH/0IAEYPsDfddBNuv/12nHbaadi6\ndSt27tw5GkZWrVqF3bt3Y/v27bj33nuxZcsWAMDg4CD+8z//c9y8f/azn+FLX/rSuP8m3/jGN+L2\n22+f8mcul8vI5/MAgJUrV6Knp2fS1/b39+P3v/893v72twMApJTYvn07duzYgXvuuWfMa2+99dZJ\nx+np6cH999+PF198EVdffTUeeeSRMc8PDAzgyiuvnPBvzP333z/h45/4xCdg2zbe9773jQl107nz\nzjtx3nnn4Y477kB/fz8uvfRSfO973xv3us9+9rO48MIL4XkezjrrrNGg98lPfhJXXXUVbr/9dmSz\n2QkrdTT/MTTV6cjenjCSyHm1Ru+lGA6EEDBHqk6xQsWPkfUsOIukl4toIq973etw6qmnAgAuvPBC\n/OhHP8LatWvx3HPP4YorroDWGlJKnHTSSQCAJ554At/4xjcQBAH6+vrwjne8YzQ0bdy4EQBQKBRQ\nKBRw88034/zzz8d5552HYrGIKIpw2mmnAQDe//734xvf+Mbowf6d73wnAGDt2rWjYQsA3vOe90w4\n73PPPRfnnntu+gtyhB/84AfYsGEDTLN2g/JvfvOb2LhxI1paWuoa54ILLgAAnHjiicjlcuju7sbK\nlStHn29tbcXu3bsTj/flL38ZnZ2dKJVK2LJlC17/+tdj3bp1ib72Zz/7GR5//HF87WtfAwAEQYBD\nhw6NuQluHMfYtWsXvvvd76KzsxOf/OQnsWfPHmzatAk7d+7ELbfcgne84x3YuXMn7rjjjikDI81P\nDE0zNNLb4zmLr29pJsRo1UksqWob0cgZpkopnHrqqbj77rvHPB+GIe644w488MADWLFiBbZt24Yw\nDEefH2k0Nk0T9913H5544gl897vfxbe//W3cdtttU16WY6QnxzRNSPnaNvlkzcsjlaYjnXrqqeMq\nTV/5ylfw4x//GMuWLcPdd9+NfD6PUqmEfD6Pnp4edHZ2Tjqvhx56aMy24G9+8xs89dRTuOuuuzA0\n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\nECgUCrjhhhuwadMm1n8BYWgiIiIiMoHTc0REREQmMDQRERERmcDQRERERGQCQxMRERGRCQxNRERE\nRCYwNBERERGZwNBEREREZAJDExEREZEJDE1EhAcffHDe/lZPTw927do1b3+PiMgqDE1EVFZoKhaL\nZf2t7u5uPPbYY2VtS0RUTbyNCtEn3E9+8hNs374dK1asgKZpuPLKK/Hss88il8uhvr4e9913H7xe\nL/bt24df/OIXaG5uxsGDB3H//fdDkiR8//vfRy6Xw5o1a7Bnzx5s374djY2NOHToEO69915Eo1FI\nkoStW7fivPPOwzXXXIPu7m60tLTgvPPOww9+8INql4CIyBSGJiLCihUrcODAAQBAJBKBx+MBAPz+\n97/H0NAQ7rzzTuzbtw+bN2/GY489hvb2dgDAtddeizvuuAOXX345nnvuOXzrW9/C7t27UVdXhxtv\nvBG/+tWvUF9fj56eHtx8883YvXs39u3bhwcffBB//OMfq/b/EhGVQ6l2B4hoYXnttdfw29/+FolE\nAtlsFosXLy79rqOjoxSY4vE4enp6cPnllwMArrzySrjdbgDAkSNHcOjQIdx22204cVxWKBQwMjIy\nz/8NEZF1GJqIqBRsstkstm7dip07d6KlpQV79uzBH/7wh9LzHA6H6faampq44JuITitcCE5EcLlc\nSCQSyGQyMAwDwWAQhUIBf/rTn6bdZtGiRXjhhRcAALt370YsFgMAtLa2IpfLlX4HAPv37y9tF4/H\n5/C/ISKaGwxNRIRbbrkFX/7yl/GNb3wDmzdvxvr16/HVr34VbW1t0273s5/9DA888ACuueYavPji\niwgEAnC73VAUBb/+9a+xbds2bNy4EVdffTUefvhhAMDy5csRCASwYcMG/PjHP56Pf4+IyBJcCE5E\nZUsmk6Upu1deeQX33HMPnn766Sr3iohobnBNExGV7eWXX8Yvf/lLGIYBm82G++67r9pdIiKaMxxp\nIiIiIjKBa5qIiIiITGBoIiIiIjKBoYmIiIjIBIYmIiIiIhMYmoiIiIhMYGgiIiIiMoGhiYiIiMgE\nhiYiIiIiE/4/uaZc8TIBg+gAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "sns.jointplot(houses['target'], houses['RM'], kind='hex')\n", + "sns.jointplot(houses['target'], houses['LSTAT'], kind='hex')" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "('Training set', (354, 13), (354,))\n", + "('Test set', (152, 13), (152,))\n" + ] + } + ], + "source": [ + "# convert housing data to numpy format\n", + "houses_array = houses.as_matrix().astype(float)\n", + "\n", + "# split data into feature and target sets\n", + "X = houses_array[:, :-1]\n", + "y = houses_array[:, -1]\n", + "\n", + "# normalize the data per feature by dividing by the maximum value in each column\n", + "X = X / X.max(axis=0)\n", + "\n", + "# split data into training and test sets\n", + "trainingSplit = int(.7 * houses_array.shape[0])\n", + "\n", + "X_train = X[:trainingSplit]\n", + "y_train = y[:trainingSplit]\n", + "X_test = X[trainingSplit:]\n", + "y_test = y[trainingSplit:]\n", + "\n", + "print('Training set', X_train.shape, y_train.shape)\n", + "print('Test set', X_test.shape, y_test.shape)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# helper variables\n", + "num_samples = X_train.shape[0]\n", + "num_features = X_train.shape[1]\n", + "num_outputs = 1\n", + "\n", + "# Hyper-parameters\n", + "batch_size = 50\n", + "num_hidden_1 = 16\n", + "num_hidden_2 = 16\n", + "learning_rate = 0.0001\n", + "training_epochs = 200\n", + "dropout_keep_prob = 1.0 # set to no dropout by default\n", + "\n", + "# variable to control the resolution at which the training results are stored\n", + "display_step = 1" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def accuracy(predictions, targets):\n", + " error = np.absolute(predictions.reshape(-1) - targets)\n", + " return np.mean(error)\n", + "\n", + "def weight_variable(shape):\n", + " initial = tf.truncated_normal(shape, stddev=0.1)\n", + " return tf.Variable(initial)\n", + "\n", + "def bias_variable(shape):\n", + " initial = tf.constant(0.1, shape=shape)\n", + " return tf.Variable(initial)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "'''First we create a variable to store our graph'''\n", + "graph = tf.Graph()\n", + "\n", + "'''Next we build our neural network within this graph variable'''\n", + "with graph.as_default():\n", + " \n", + " '''Our training data will come in as x feature data and \n", + " y target data. We need to create tensorflow placeholders \n", + " to capture this data as it comes in'''\n", + " \n", + " x = tf.placeholder(tf.float32, shape=(None, num_features))\n", + " _y = tf.placeholder(tf.float32, shape=(None))\n", + " \n", + " '''Another placeholder stores the hyperparameter \n", + " that controls dropout'''\n", + " \n", + " keep_prob = tf.placeholder(tf.float32)\n", + " \n", + " '''Finally, we convert the test and train feature data sets \n", + " to tensorflow constants so we can use them to generate \n", + " predictions on both data sets'''\n", + " \n", + " tf_X_test = tf.constant(X_test, dtype=tf.float32)\n", + " tf_X_train = tf.constant(X_train, dtype=tf.float32)\n", + " \n", + " '''Next we create the parameter variables for the model.\n", + " Each layer of the neural network needs it's own weight \n", + " and bias variables which will be tuned during training.\n", + " The sizes of the parameter variables are determined by \n", + " the number of neurons in each layer.'''\n", + " \n", + " W_fc1 = weight_variable([num_features, num_hidden_1])\n", + " b_fc1 = bias_variable([num_hidden_1])\n", + " \n", + " W_fc2 = weight_variable([num_hidden_1, num_hidden_2])\n", + " b_fc2 = bias_variable([num_hidden_2])\n", + " \n", + " W_fc3 = weight_variable([num_hidden_2, num_outputs])\n", + " b_fc3 = bias_variable([num_outputs])\n", + " \n", + " '''Next, we define the forward computation of the model.\n", + " We do this by defining a function model() which takes in \n", + " a set of input data, and performs computations through \n", + " the network until it generates the output.'''\n", + " \n", + " def model(data, keep):\n", + " \n", + " # computing first hidden layer from input, using relu activation function\n", + " fc1 = tf.nn.sigmoid(tf.matmul(data, W_fc1) + b_fc1)\n", + " # adding dropout to first hidden layer\n", + " fc1_drop = tf.nn.dropout(fc1, keep)\n", + " \n", + " # computing second hidden layer from first hidden layer, using relu activation function\n", + " fc2 = tf.nn.sigmoid(tf.matmul(fc1_drop, W_fc2) + b_fc2)\n", + " # adding dropout to second hidden layer\n", + " fc2_drop = tf.nn.dropout(fc2, keep)\n", + " \n", + " # computing output layer from second hidden layer\n", + " # the output is a single neuron which is directly interpreted as the prediction of the target value\n", + " fc3 = tf.matmul(fc2_drop, W_fc3) + b_fc3\n", + " \n", + " # the output is returned from the function\n", + " return fc3\n", + " \n", + " '''Next we define a few calls to the model() function which \n", + " will return predictions for the current batch input data (x),\n", + " as well as the entire test and train feature set'''\n", + " \n", + " prediction = model(x, keep_prob)\n", + " test_prediction = model(tf_X_test, 1.0)\n", + " train_prediction = model(tf_X_train, 1.0)\n", + " \n", + " '''Finally, we define the loss and optimization functions \n", + " which control how the model is trained.\n", + " \n", + " For the loss we will use the basic mean square error (MSE) function,\n", + " which tries to minimize the MSE between the predicted values and the \n", + " real values (_y) of the input dataset.\n", + " \n", + " For the optimization function we will use basic Gradient Descent (SGD)\n", + " which will minimize the loss using the specified learning rate.'''\n", + " \n", + " loss = tf.reduce_mean(tf.square(tf.sub(prediction, _y)))\n", + " optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss)\n", + " \n", + " '''We also create a saver variable which will allow us to \n", + " save our trained model for later use'''\n", + " \n", + " saver = tf.train.Saver()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Initialized\n", + "Model saved in file: model_houses.ckpt\n" + ] + } + ], + "source": [ + "# create an array to store the results of the optimization at each epoch\n", + "results = []\n", + "\n", + "'''First we open a session of Tensorflow using our graph as the base. \n", + "While this session is active all the parameter values will be stored, \n", + "and each step of training will be using the same model.'''\n", + "with tf.Session(graph=graph) as session:\n", + " \n", + " '''After we start a new session we first need to\n", + " initialize the values of all the variables.'''\n", + " tf.initialize_all_variables().run()\n", + " print('Initialized')\n", + "\n", + " '''Now we iterate through each training epoch based on the hyper-parameter set above.\n", + " Each epoch represents a single pass through all the training data.\n", + " The total number of training steps is determined by the number of epochs and \n", + " the size of mini-batches relative to the size of the entire training set.'''\n", + " for epoch in range(training_epochs):\n", + " \n", + " '''At the beginning of each epoch, we create a set of shuffled indexes \n", + " so that we are using the training data in a different order each time'''\n", + " indexes = range(num_samples)\n", + " random.shuffle(indexes)\n", + " \n", + " '''Next we step through each mini-batch in the training set'''\n", + " for step in range(int(math.floor(num_samples/float(batch_size)))):\n", + " offset = step * batch_size\n", + " \n", + " '''We subset the feature and target training sets to create each mini-batch'''\n", + " batch_data = X_train[indexes[offset:(offset + batch_size)]]\n", + " batch_labels = y_train[indexes[offset:(offset + batch_size)]]\n", + "\n", + " '''Then, we create a 'feed dictionary' that will feed this data, \n", + " along with any other hyper-parameters such as the dropout probability,\n", + " to the model'''\n", + " feed_dict = {x : batch_data, _y : batch_labels, keep_prob: dropout_keep_prob}\n", + " \n", + " '''Finally, we call the session's run() function, which will feed in \n", + " the current training data, and execute portions of the graph as necessary \n", + " to return the data we ask for.\n", + " \n", + " The first argument of the run() function is a list specifying the \n", + " model variables we want it to compute and return from the function. \n", + " The most important is 'optimizer' which triggers all calculations necessary \n", + " to perform one training step. We also include 'loss' and 'prediction' \n", + " because we want these as ouputs from the function so we can keep \n", + " track of the training process.\n", + " \n", + " The second argument specifies the feed dictionary that contains \n", + " all the data we want to pass into the model at each training step.'''\n", + " _, l, p = session.run([optimizer, loss, prediction], feed_dict=feed_dict)\n", + "\n", + " '''At the end of each epoch, we will calcule the error of predictions \n", + " on the full training and test data set. We will then store the epoch number, \n", + " along with the mini-batch, training, and test accuracies to the 'results' array \n", + " so we can visualize the training process later. How often we save the data to \n", + " this array is specified by the display_step variable created above''' \n", + " if (epoch % display_step == 0):\n", + " batch_acc = accuracy(p, batch_labels)\n", + " train_acc = accuracy(train_prediction.eval(session=session), y_train)\n", + " test_acc = accuracy(test_prediction.eval(session=session), y_test)\n", + " results.append([epoch, batch_acc, train_acc, test_acc])\n", + "\n", + " '''Once training is complete, we will save the trained model so that we can use it later'''\n", + " save_path = saver.save(session, \"model_houses.ckpt\")\n", + " print(\"Model saved in file: %s\" % save_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Minimum test loss: 5.53258911685\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1MAAAGHCAYAAABViAiMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzs3Xd0VGX+x/H3nUkjjZBKC53Qew2CICBVMOAKrv7UZV2X\nBUFxEYS1rLKoIK4Lwq6VXVBRQUQEqdJBkC6dEHpISO89mZnfH5HBGAIkhCSQz+scz0luee73znEO\nfHie+72GzWazISIiIiIiIsViKu8CRERERERE7kQKUyIiIiIiIiWgMCUiIiIiIlICClMiIiIiIiIl\noDAlIiIiIiJSAgpTIiIiIiIiJaAwJSIiIiIiUgIKUyIiIiIiIiWgMCUiIiIiIlICClMiIlLhDBgw\ngKNHj97wuPDwcIKDg8ugotJnsVho2rQp8fHx5V2KiIiUkGGz2WzlXYSIiNzZ2rVrh2EY2Gw2MjMz\nqVKlCgCGYbB69WqqV69ezhVWPBaLhZYtW7Jjxw58fHyYNGkSQUFBPP300+VdmoiI3CSH8i5ARETu\nfAcPHrT/3KZNG1avXk2NGjWueazFYsFsNpdVaaXidtWsf88UEbmzaZmfiIiUKpvNVigk9OzZk/nz\n5zNw4EAGDhwIwOuvv0737t3p3LkzTz/9NFFRUQWOP3z4MACTJk3irbfe4oknnqBDhw48/fTTpKam\nAnDx4kVat25d4LwFCxYwcOBAunTpwhtvvGHfl5eXx2uvvUaXLl0YPHgwH330kb2W3/r666/54x//\nyMsvv0ynTp1YsWIFFouF2bNn07t3b7p3787bb79tv8+DBw/y4IMP0r59e3r16sXnn38OwOzZs3nt\ntdfs4+7atavANQ3DAGDp0qWsWbOGuXPn0r59e6ZPn168D11ERMqFwpSIiJSJDRs28MUXX/D9998D\n0KlTJ9avX29f5vbmm28Wee6aNWv4+9//zq5du8jKyrKHFbgaSK7YtGkTixcvZvny5axcuZL9+/cD\n8Pnnn3P06FHWrVvHggUL+P777wud+2t79uyhS5cu7N27l8GDB/PJJ59w5MgRli9fzpo1azhy5AhL\nliwBYPr06fzlL3/hwIEDrFy5ko4dOxY57q+veSWM/e53v2PgwIGMHz+eAwcO8PLLLxd5voiIVBwK\nUyIiUiZGjRpFtWrVcHJyAmDQoEG4urri5OTEU089xYEDB4o8d9CgQTRs2BAnJyf69evHyZMnr3sd\n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\nrkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df = pd.DataFrame(data=results, columns = [\"epoch\", \"batch_acc\", \"train_acc\", \"test_acc\"])\n", + "df.set_index(\"epoch\", drop=True, inplace=True)\n", + "\n", + "fig, ax = plt.subplots(1, 1, figsize=(10, 4))\n", + " \n", + "ax.plot(df)\n", + "ax.set(xlabel='Epoch',\n", + " ylabel='Error',\n", + " title='Training result')\n", + " \n", + "ax.legend(df.columns, loc=1)\n", + "\n", + "print \"Minimum test loss:\", np.min(df[\"test_acc\"])" + ] + } + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Python [default]", + "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.12" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/notebooks/week-5/01-CNN in keras for mnist.ipynb b/notebooks/week-5/01-CNN in keras for mnist.ipynb new file mode 100644 index 0000000..d84b7ad --- /dev/null +++ b/notebooks/week-5/01-CNN in keras for mnist.ipynb @@ -0,0 +1,348 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Lab 5.1 - Keras for CNN\n", + "\n", + "In this lab we will use the [Keras deep learning library](https://keras.io/) to construct a simple convolutional neural network (CNN) to classify the digits from the MNIST dataset. Keras is a very high-level machine learning library that wraps many of the functions and data formats we developed from scratch in earlier labs into simple, easy to use functions. Infact, the library does not actually implement any computation itself, but borrows the necessary functions from either the TensorFlow or Theano libraries. Thus, the goal of Keras is not to compete with these state-of-the-art machine learning libraries, but simply to make them easier to use, especially for non-expert users.\n", + "\n", + "As a result, you can see that this week's code, despite representing a more complex network, is actually much shorter and easier to understand. This ease of use has made Keras quite popular for neural network development in recent years. The tradeoff to this ease of use is that, while Keras implements many typical machine learning processes and methods, much of its funcitonality is hidden from the user. Thus, it is harder to access the model's parameters, investigate what is happening during model training, and to implement custom features such as your own activation and cost functions. In short, higher level libraries such as Keras may be easier to use for typical tasks, but they are harder to hack and use in non-typical ways.\n", + "\n", + "We will be using Keras to develop more complex neural networks for the rest of the course, but as you develop your own applications you may want or need to go back to more low-level implementations such as in basic numpy or a medium-level library such as Tensorflow.\n", + "\n", + "Let's begin this week's lab by importing the libraries we will be using:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "np.random.seed(1337) # for reproducibility\n", + "\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\n", + "\n", + "from keras.datasets import mnist\n", + "\n", + "import pickle\n", + "\n", + "print \"using ordering:\", K.image_dim_ordering()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "After you import the Keras library you should see a message telling you whether it is using the Theano or Tensorflow library as its backend. Because it relies on one of these libraries to perform its calculations, you need to have at least one of them installed to use Keras. If you are using the virtual machine from the first tutorial you should already have both installed, and for our purposes it does not matter which Keras is configured to use.\n", + "\n", + "Next, let's import the MNIST dataset from Keras' data library:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "(X_train, y_train), (X_test, y_test) = mnist.load_data()\n", + "\n", + "print 'X_train shape:', X_train.shape\n", + "print X_train.shape[0], 'train samples'\n", + "print X_test.shape[0], 'test samples'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The data comes in as separate variables for feature (X) and target (y) data, and is already split between training and test sets.\n", + "\n", + "The format for the X data is a three-dimensional numpy array of integers. The first dimension represents the individual images, and the second and third dimensions represent the grayscale pixels values of each 28x28 image. The pixel values are represented as integers in the range 0-255. The y data contains a list of single integers representing the type of digit 0-9.\n", + "\n", + "Before we can use this data for training, we need to convert the integer (whole number) numbers in the range 0-255 to float (decimal) numbers in the range 0-1. We do this by casting the numpy arrays to 'float' type, and dividing each value by 255." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "X_train = X_train.astype('float32')\n", + "X_test = X_test.astype('float32')\n", + "X_train /= 255.0\n", + "X_test /= 255.0" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To use this data with Keras we also need to reformat it to match the specific needs of the library. Because Keras' convolutional operations are made specifically for processing images, they expect each piece of image data to be represented by three dimensions: two for the dimensions of the image, and an extra dimension to represent the RGB channels of a full-color image. \n", + "\n", + "Since in this case we are working with black and white images, we will simply add an extra dimension to the end of both X datasets so it matches the expected format. We will also use the `to_categorical()` utility included with the Keras library to convert both of the y datasets to the categorical format expected by Keras." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# number of classes\n", + "num_classes = 10\n", + "\n", + "# image dimensions\n", + "img_rows, img_cols = X_train.shape[1], X_train.shape[2]\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", + "Y_train = np_utils.to_categorical(y_train, num_classes)\n", + "Y_test = np_utils.to_categorical(y_test, num_classes)\n", + "\n", + "print X_train.shape\n", + "print y_train.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Before we begin training the network, we can use the matplotlib library to visualize one of the digits to make sure everything has been loaded correctly." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "from matplotlib.pyplot import imshow\n", + "import matplotlib.pyplot as plt\n", + "\n", + "img_num = 0\n", + "\n", + "if K.image_dim_ordering() == 'th':\n", + " img = X_train[img_num][0,:,:]\n", + "else:\n", + " img = X_train[img_num][:,:,0]\n", + "\n", + "print img.shape\n", + "print y_train.shape\n", + "imshow(img, cmap = plt.get_cmap('gray'), vmin = 0, vmax = 1, interpolation='nearest')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we define the hyper-parameters of our model and the architecture of the network. In this case we will base our network on the one described in chapter 6 of the textbook:\n", + "\n", + "http://neuralnetworksanddeeplearning.com/chap6.html\n", + "\n", + "This is a fairly shallow CNN model utilizing two convolutional layers with 2x2 max pooling for data reduction, and two fully connected layers with 50% dropout for regularization. All layers except for the final classification layer utilize the ReLu activation function. The final layer uses the softmax activation function to convert the raw outputs to a probability distribution. The layers have the following dimensions:\n", + "\n", + "- The first convolutional layer will use a patch (filter) size of 5 x 5 pixels, and a depth of 20 feature layers\n", + "- The second convolutional layer will use a patch (filter) size of 5 x 5 pixels, and a depth of 40 feature layers\n", + "- The two fully connected hidden layers will each contain 1000 neurons\n", + "\n", + "We will train the model for 30 epochs, using mini-batches of 128 samples at a time with the SGD algorithm." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# model hyperparameters\n", + "batch_size = 128\n", + "nb_epoch = 30\n", + "\n", + "# network architecture\n", + "patch_size_1 = 5\n", + "patch_size_2 = 5\n", + "\n", + "depth_1 = 20\n", + "depth_2 = 40\n", + "\n", + "pool_size = 2\n", + "\n", + "num_hidden_1 = 1000\n", + "num_hidden_2 = 1000\n", + "\n", + "dropout = 0.5" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now it is time to build the actual model in Keras. To specify the architecture of the neural network, Keras uses an abstracted sequential or 'stack' model. Instead of specifying each step of computation as we did with numpy and Tensorflow, we simply create a new Sequential model, and then use its `.add()` function to add layers to the network according to the parameters specified above." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# create new Keras Sequential model\n", + "model = Sequential()\n", + "\n", + "# add first convolutional layer to model and specify it's depth and filter size\n", + "# for the first layer we also have to specify the size of each input image\n", + "# which we calculated above\n", + "model.add(Convolution2D(depth_1, patch_size_1, patch_size_1,\n", + " border_mode='valid',\n", + " input_shape=input_shape))\n", + "# apply 'relu' activation function for first layer\n", + "model.add(Activation('relu'))\n", + "# apply max pooling to reduce the size of the image by a factor of 2\n", + "model.add(MaxPooling2D(pool_size=(pool_size, pool_size)))\n", + "\n", + "# repeat these operations for the second convolutional layer\n", + "# this time Keras can figure out the input size \n", + "# from the previous layer on it's own\n", + "model.add(Convolution2D(depth_2, patch_size_2, patch_size_2,\n", + " border_mode='valid'))\n", + "model.add(Activation('relu'))\n", + "model.add(MaxPooling2D(pool_size=(pool_size, pool_size)))\n", + "\n", + "# flatten the three-dimensional convolutional layer to a single layer of neurons\n", + "model.add(Flatten())\n", + "\n", + "# add the first fully connected layer, applying 'relu' activation and dropout\n", + "model.add(Dense(num_hidden_1))\n", + "model.add(Activation('relu'))\n", + "model.add(Dropout(dropout))\n", + "\n", + "# add the second fully connected layer\n", + "model.add(Dense(num_hidden_2))\n", + "model.add(Activation('relu'))\n", + "model.add(Dropout(dropout))\n", + "\n", + "# add the final classification layer with the number of neurons \n", + "# matching the number of classes we are trying to learn\n", + "model.add(Dense(num_classes))\n", + "\n", + "# apply the 'softmax' activation to the final layer to convert the output to \n", + "# a probability distribution\n", + "model.add(Activation('softmax'))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, we ask Keras to compile our model, and specify the loss function we want to use, along with the optimization algorithm and the performance metrics we want the model to output after training. You can see that this is much easier and more intuitive than our previous examples where we had to actually write out the forumulas for the loss function and explicitly develop the optimization algorithm. However, if you wanted to use a different loss function or optimization strategy than those already included with Keras you would again have to specify it explicitly using additional functions." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "model.compile(loss='categorical_crossentropy',\n", + " optimizer='adadelta',\n", + " metrics=['accuracy'])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Once we have compiled the model, we can begin training. The entire training operation is now wrapped into a single function called `.fit()`. Instead of creating our own structure to loop over every epoch and mini-batch, we simply have to call the `.fit()` function of our Sequential model, and pass in our training and test sets, along with the hyper-parameters that specify the number of epochs and mini-batch size we want to use. If you set the optional `verbose` variable to `1`, Keras will output information about loss and accuracy on both training and test sets as it is training so you can monitor the process." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "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": [ + "Depending on the computer you're using, training this network through 30 epochs will take some time. Using the virtual machine from Lab 1, each epoch takes approximately 40-50 seconds. Once the training is complete, we can use the model's `.evaluate()` function to apply the model to the entire test set, and get back the model's performance in terms of total loss and prediction accuracy." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "score = model.evaluate(X_test, Y_test, verbose=0)\n", + "\n", + "print 'Test score:', score[0]\n", + "print 'Test accuracy: {:.2%}'.format(score[1])" + ] + } + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Python [default]", + "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.12" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/notebooks/week-5/02-using your own images.ipynb b/notebooks/week-5/02-using your own images.ipynb new file mode 100644 index 0000000..938f8af --- /dev/null +++ b/notebooks/week-5/02-using your own images.ipynb @@ -0,0 +1,288 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Lab 5.2 - Using your own images\n", + "\n", + "In the next part of the lab we will download another set of images from the web and format them for use with a Convolutional Neural Network (CNN). In this example we will use cat and dog images from a [recent competition on Kaggle](https://www.kaggle.com/c/dogs-vs-cats) but you will be able to follow the same process to import and format your own sets of images and use them to solve your own image classification problems if you wish.\n", + "\n", + "Let's begin by importing some of the libraries we will be using in this lab:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "\n", + "from matplotlib.pyplot import imshow\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "from scipy import misc\n", + "\n", + "import os\n", + "import random\n", + "import pickle" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Go to https://www.kaggle.com/c/dogs-vs-cats/data and download the **\"train\" dataset only** to your computer. You will have to register for a Kaggle account before you can download the data. [Kaggle](https://www.kaggle.com) is an online repository for Machine Learning (ML) and Artificial Intelligence (AI) competitions and is a great resource for getting data to test your learning algorithms, and to keep up with the state-of-the-art in the ML and AI fields.\n", + "\n", + "Once the `train.zip` file has been downloaded, uncompress it to a folder on your computer. The folder contains 25,000 images named according to whether they are a 'cat' or 'dog'. To make sure that these images work with the code below, create a new folder in the `week-5` folder in your local repository (the same folder that contains this notebook file) called `-catsdogs`. Notice the dash (`-`) before the name, this is important so that Github does not sync the images to your account (which is not necessary and would take a really long time). Within this folder create two new folders called `0` and `1`. Your folder structure should look like this:\n", + "\n", + " .\n", + " ├── dmc\n", + " | ├── notebooks\n", + " | | └── week-5\n", + " | | | └── -catsdogs\n", + " | | | | └── 0\n", + " | | | | └── 1\n", + "\n", + "\n", + "Finally, move all the cat images into the `0` folder, and all dog images into the `1` folder. From now on, we will consider the category `0` to represent `cat` and the category `1` to represent `dog`.\n", + "\n", + "Next, we will use the `os` library to find the folders inside the main `-catsdogs` folder. This will make the code extensible to image recognition problems with any number of categories. In this case we only have two categories (cats and dogs) but you can extend it to more categories simply by adding more folders with images and labeling the folders sequentially starting with `0`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "imageFolder = \"-catsdogs\"\n", + "\n", + "folders = os.listdir(imageFolder)\n", + "num_categories = len(folders)\n", + "\n", + "print folders" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we will look through each folder and generate a data set of properly formatted image data matched with the proper category label." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# specify desired image properties\n", + "# in this case we want black and white square images 64x64 pixels in size\n", + "image_dim = 1 # black and white\n", + "image_size = 64\n", + "\n", + "# create an empty array to store the image data\n", + "data = []\n", + "\n", + "# look inside each folder which represents the categories of our data\n", + "for folder in folders:\n", + " \n", + " # find the files within each folder\n", + " fileNames = os.listdir(\"/\".join([imageFolder, folder]))\n", + " \n", + " # for each file, load and process each image\n", + " # in this case we limit the number of images used per cateogry to 10,000\n", + " # to prevent overloading our RAM memory\n", + " for fileName in fileNames[:10000]:\n", + " \n", + " # read in the image data into a numpy array\n", + " img = misc.imread(\"/\".join([imageFolder, folder, fileName]))\n", + " \n", + " # if the image contains more than one color channel,\n", + " # take only the first channel (in effect, convert it to black and white)\n", + " if image_dim == 1 and len(img.shape) > 2: \n", + " img = img[:,:,0] # convert to black and white\n", + "\n", + " # resize to target resolution if necessary\n", + " if img.shape[0] != image_size or img.shape[1] != image_size:\n", + " img = misc.imresize(img, (image_size, image_size), interp='nearest')\n", + "\n", + " # normalize data to have mean 0 and standard deviation 1\n", + " # then rescale it to roughly the range 0-1\n", + " img = (img - img.mean()) / img.std() / 4 + 0.5\n", + " \n", + " # add the image data and the associated category \n", + " # (which is stored in the folder variable) to the data set\n", + " # for this to work you need to make sure your folders \n", + " # are named sequentially starting with 0\n", + " data.append([img, folder])\n", + "\n", + "print \"Load data complete\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The process of loading all the image data and putting them into the `data` array will take some time so be patient and wait for the cell to finish running before continuing with the rest of the notebook. \n", + "\n", + "If you get an error saying the kernel has crashed, you are probably running out of RAM memory. The entire data array with all image information needs to be stored dynamically in your RAM while the process is running, so depending on your computer's available RAM, using too many images or too high of a resolution can cause the RAM to fill up completely before the process has finished running, which will unfortunately cause Python to crash. If you run into this issue try setting a lower target resolution for the images or loading less images from the folder.\n", + "\n", + "Once the data is loaded, we will shuffle the whole dataset to ensure random distribution of both categories." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "random.shuffle(data)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next we will make two new blank numpy arrays for both the feature (X) and target (y) data, and fill them with data from the `data` array. It might seem redundant to first load the data into a Python array and then transfer them to the numpy arrays we actually want. However, Python arrays have a more flexible data structure which allows us to fill the data set without first knowing how many images we have, and lets us keep the feature and target data together for each sample. This makes it easier to shuffle the entire data set in one move, and makes the process more flexible for other sets of images." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "X = np.ndarray((len(data), image_size, image_size), dtype=np.float32)\n", + "y = np.ndarray((len(data), 1), dtype=np.int32)\n", + "\n", + "for i, d in enumerate(data):\n", + " X[i] = d[0]\n", + " y[i] = d[1]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's make sure the data set has been properly imported and formatted by visualizing one of the images in the X feature dataset and printing the corresponding category from the y target dataset." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "img_index = 2\n", + "\n", + "img = X[img_index]\n", + "print \"image dimensions:\", img.shape\n", + "print \"target category:\", (['cat', 'dog'][y[img_index][0]])\n", + "\n", + "imshow(img, cmap = plt.get_cmap('gray'), vmin = 0, vmax = 1, interpolation='nearest')\n", + "plt.axis('off')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we will split both the X and y data sets by an arbitrary factor to create separate training and test sets. As before we will use the first 70% of the data for training, and the remaining 30% of the data for testing." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "trainingSplit = int(.7 * X.shape[0])\n", + "\n", + "X_train = X[:trainingSplit]\n", + "y_train = y[:trainingSplit]\n", + "X_test = X[trainingSplit:]\n", + "y_test = y[trainingSplit:]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Finally, we will use the `pickle` library to save these datasets out to a local file. \n", + "\n", + "The `pickle` library is extremely useful for saving the state of variables in your Python programs for later reuse. The library is able to take variables of any data type and output them to efficiently compressed local binary files. When you need the data again you can use the `pickle` library to reload the variables from the generated file. This is especially useful for storing sets of data that you may want to reuse several times, but take a long time to produce. This way you won't need to run the process in this notebook each time you want to use the images to train a model.\n", + "\n", + "*Warning:* the saved dataset with 10,000 images per category will be over 300mb, so make sure you have enough space on your hard drive before running the following cell:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "pickle_file = imageFolder + '.pickle'\n", + "\n", + "try:\n", + " f = open(pickle_file, 'wb')\n", + " save = {\n", + " 'X_train': X_train,\n", + " 'y_train': y_train,\n", + " 'X_test': X_test,\n", + " 'y_test': y_test,\n", + " }\n", + " pickle.dump(save, f, pickle.HIGHEST_PROTOCOL)\n", + " f.close()\n", + "except Exception as e:\n", + " print 'Unable to save data to', pickle_file, ':', e\n", + " raise\n", + " \n", + "statinfo = os.stat(pickle_file)\n", + "print 'Saved data to', pickle_file\n", + "print 'Compressed pickle size:', statinfo.st_size" + ] + } + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Python [default]", + "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.12" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/notebooks/week-5/03-CNN in keras for dogs and cats.ipynb b/notebooks/week-5/03-CNN in keras for dogs and cats.ipynb new file mode 100644 index 0000000..347b179 --- /dev/null +++ b/notebooks/week-5/03-CNN in keras for dogs and cats.ipynb @@ -0,0 +1,90 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Lab 5.3 - CNN for cats and dogs\n", + "\n", + "Now that we have imported our custom image data, formatted them as proper feature and target numpy arrays, and split them between individual training and test data sets, we can use Keras to create another Convolutional Neural Network (CNN) and train it to classify images of cats and dogs (the holy grail of Arificial Intelligence!)\n", + "\n", + "First, let's use the pickle library to bring in the data sets we generated in the previous part of the lab:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import pickle\n", + "\n", + "pickle_file = '-catsdogs.pickle'\n", + "\n", + "with open(pickle_file, 'rb') as f:\n", + " save = pickle.load(f)\n", + " X_train = save['X_train']\n", + " y_train = save['y_train']\n", + " X_test = save['X_test']\n", + " y_test = save['y_test']\n", + " del save # hint to help gc free up memory\n", + " print('Training set', X_train.shape, y_train.shape)\n", + " print('Test set', X_test.shape, y_test.shape)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now that the data is imported, go through and implement the CNN from scratch based on the one developed in Lab 5.1. \n", + "\n", + "Experiment with different hyper-parameters as well as different architectures for your network. If you're not getting the results you want try a deeper network by adding more convolutional or fully connected layers. Remember that with CNN's, all convolutional layers should go in the beginning, and the fully connected layers should go at the end. You can also try to make the network 'wider' by adding more depth to each convolutional layer or more neurons to the fully connected layers. If you are noticing problems with over-fitting you can experiment with larger dropout rates or other regularlization strategies.\n", + "\n", + "You can also experiment with filters of a larger size in the convolutional layers. Larger filters will capture more information in the image at the expense of longer training times. For more information about the tradeoffs between depth and width in a CNN, you can read this paper: \n", + "\n", + "https://arxiv.org/pdf/1409.1556.pdf\n", + "\n", + "Known as the 'VGG paper', this research is currently one of the state-of-the-art benchmarks for image recognition using CNN's. The authors' hypothesis for the paper was that depth in a CNN (total number of layers) is much more important than the size of the filters or the depth within each convolutional layer. Thus they used very small filter sizes (only 3x3) but focused on making the networks as deep as possible. If you are still getting poor results and want to develop a deeper network, a good place to start would be to try to implement one of the networks from the 'VGG paper'. The deepest ones will probably take too long to train without having a dedicated graphics card, but you should be able to train one of the medium ones (for example network 'B') using just the virtual machine developed in the first lab.\n", + "\n", + "Just like when we initially loaded the data, with large networks you again run the risk of overloading your RAM memory, which will either throw an error during model compilation or training, or cause your Python kernel to crash. If you run into these issues, try reducing the complexity of your network (either using less layers, or reducing the depth of each layer) or using a smaller mini-batch size. If you are using the virtual machine, your RAM will be quite limited so you will not be able to train very deep or complex networks. This is ok for the demonstration purposes of the class, but for your own work you may want to use a native installation of Python and the related libraries so that you can use the full potential of your computer.\n", + "\n", + "Ofcourse classifying dogs and cats is a much more difficult problem than digit classification, so you should not expect to reach the same level of performance we did before. With an average sized network training over night on the virtual machine, you should be able to get at least 80% accuracy on the test dataset. Once you get a result you like, submit your work on this file as a pull request back to the main project." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "## implement your CNN starting here." + ] + } + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Python [default]", + "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.12" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/notebooks/week-5/Week5-1 sw3036.ipynb b/notebooks/week-5/Week5-1 sw3036.ipynb new file mode 100644 index 0000000..08d0e19 --- /dev/null +++ b/notebooks/week-5/Week5-1 sw3036.ipynb @@ -0,0 +1,403 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Using TensorFlow backend.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "using ordering: tf\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "np.random.seed(1337) # for reproducibility\n", + "\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\n", + "\n", + "from keras.datasets import mnist\n", + "\n", + "import pickle\n", + "\n", + "print \"using ordering:\", K.image_dim_ordering()" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Downloading data from https://s3.amazonaws.com/img-datasets/mnist.pkl.gz\n", + "15286272/15296311 [============================>.] - ETA: 0sX_train shape: (60000, 28, 28)\n", + "60000 train samples\n", + "10000 test samples\n" + ] + } + ], + "source": [ + "(X_train, y_train), (X_test, y_test) = mnist.load_data()\n", + "\n", + "print 'X_train shape:', X_train.shape\n", + "print X_train.shape[0], 'train samples'\n", + "print X_test.shape[0], 'test samples'" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "X_train = X_train.astype('float32')\n", + "X_test = X_test.astype('float32')\n", + "X_train /= 255.0\n", + "X_test /= 255.0" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(60000, 28, 28, 1)\n", + "(60000,)\n" + ] + } + ], + "source": [ + "# number of classes\n", + "num_classes = 10\n", + "\n", + "# image dimensions\n", + "img_rows, img_cols = X_train.shape[1], X_train.shape[2]\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", + "Y_train = np_utils.to_categorical(y_train, num_classes)\n", + "Y_test = np_utils.to_categorical(y_test, num_classes)\n", + "\n", + "print X_train.shape\n", + "print y_train.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(28, 28)\n", + "(60000,)\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%matplotlib inline\n", + "from matplotlib.pyplot import imshow\n", + "import matplotlib.pyplot as plt\n", + "\n", + "img_num = 0\n", + "\n", + "if K.image_dim_ordering() == 'th':\n", + " img = X_train[img_num][0,:,:]\n", + "else:\n", + " img = X_train[img_num][:,:,0]\n", + "\n", + "print img.shape\n", + "print y_train.shape\n", + "imshow(img, cmap = plt.get_cmap('gray'), vmin = 0, vmax = 1, interpolation='nearest')" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# model hyperparameters\n", + "batch_size = 128\n", + "nb_epoch = 30\n", + "\n", + "# network architecture\n", + "patch_size_1 = 5\n", + "patch_size_2 = 5\n", + "\n", + "depth_1 = 20\n", + "depth_2 = 40\n", + "\n", + "pool_size = 2\n", + "\n", + "num_hidden_1 = 1000\n", + "num_hidden_2 = 1000\n", + "\n", + "dropout = 0.5" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# create new Keras Sequential model\n", + "model = Sequential()\n", + "\n", + "# add first convolutional layer to model and specify it's depth and filter size\n", + "# for the first layer we also have to specify the size of each input image\n", + "# which we calculated above\n", + "model.add(Convolution2D(depth_1, patch_size_1, patch_size_1,\n", + " border_mode='valid',\n", + " input_shape=input_shape))\n", + "# apply 'relu' activation function for first layer\n", + "model.add(Activation('relu'))\n", + "# apply max pooling to reduce the size of the image by a factor of 2\n", + "model.add(MaxPooling2D(pool_size=(pool_size, pool_size)))\n", + "\n", + "# repeat these operations for the second convolutional layer\n", + "# this time Keras can figure out the input size \n", + "# from the previous layer on it's own\n", + "model.add(Convolution2D(depth_2, patch_size_2, patch_size_2,\n", + " border_mode='valid'))\n", + "model.add(Activation('relu'))\n", + "model.add(MaxPooling2D(pool_size=(pool_size, pool_size)))\n", + "\n", + "# flatten the three-dimensional convolutional layer to a single layer of neurons\n", + "model.add(Flatten())\n", + "\n", + "# add the first fully connected layer, applying 'relu' activation and dropout\n", + "model.add(Dense(num_hidden_1))\n", + "model.add(Activation('relu'))\n", + "model.add(Dropout(dropout))\n", + "\n", + "# add the second fully connected layer\n", + "model.add(Dense(num_hidden_2))\n", + "model.add(Activation('relu'))\n", + "model.add(Dropout(dropout))\n", + "\n", + "# add the final classification layer with the number of neurons \n", + "# matching the number of classes we are trying to learn\n", + "model.add(Dense(num_classes))\n", + "\n", + "# apply the 'softmax' activation to the final layer to convert the output to \n", + "# a probability distribution\n", + "model.add(Activation('softmax'))" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "model.compile(loss='categorical_crossentropy',\n", + " optimizer='adadelta',\n", + " metrics=['accuracy'])" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train on 60000 samples, validate on 10000 samples\n", + "Epoch 1/30\n", + "60000/60000 [==============================] - 42s - loss: 0.2915 - acc: 0.9078 - val_loss: 0.0639 - val_acc: 0.9794\n", + "Epoch 2/30\n", + "60000/60000 [==============================] - 42s - loss: 0.0792 - acc: 0.9755 - val_loss: 0.0394 - val_acc: 0.9861\n", + "Epoch 3/30\n", + "60000/60000 [==============================] - 45s - loss: 0.0567 - acc: 0.9829 - val_loss: 0.0305 - val_acc: 0.9898\n", + "Epoch 4/30\n", + "60000/60000 [==============================] - 42s - loss: 0.0458 - acc: 0.9857 - val_loss: 0.0266 - val_acc: 0.9916\n", + "Epoch 5/30\n", + "60000/60000 [==============================] - 43s - loss: 0.0374 - acc: 0.9885 - val_loss: 0.0261 - val_acc: 0.9910\n", + "Epoch 6/30\n", + "60000/60000 [==============================] - 42s - loss: 0.0314 - acc: 0.9905 - val_loss: 0.0251 - val_acc: 0.9919\n", + "Epoch 7/30\n", + "60000/60000 [==============================] - 45s - loss: 0.0276 - acc: 0.9914 - val_loss: 0.0282 - val_acc: 0.9913\n", + "Epoch 8/30\n", + "60000/60000 [==============================] - 44s - loss: 0.0245 - acc: 0.9922 - val_loss: 0.0228 - val_acc: 0.9929\n", + "Epoch 9/30\n", + "60000/60000 [==============================] - 42s - loss: 0.0209 - acc: 0.9935 - val_loss: 0.0231 - val_acc: 0.9924\n", + "Epoch 10/30\n", + "60000/60000 [==============================] - 43s - loss: 0.0190 - acc: 0.9939 - val_loss: 0.0205 - val_acc: 0.9929\n", + "Epoch 11/30\n", + "60000/60000 [==============================] - 43s - loss: 0.0170 - acc: 0.9948 - val_loss: 0.0216 - val_acc: 0.9935\n", + "Epoch 12/30\n", + "60000/60000 [==============================] - 43s - loss: 0.0158 - acc: 0.9948 - val_loss: 0.0261 - val_acc: 0.9922\n", + "Epoch 13/30\n", + "60000/60000 [==============================] - 43s - loss: 0.0136 - acc: 0.9958 - val_loss: 0.0220 - val_acc: 0.9927\n", + "Epoch 14/30\n", + "60000/60000 [==============================] - 44s - loss: 0.0131 - acc: 0.9958 - val_loss: 0.0222 - val_acc: 0.9930\n", + "Epoch 15/30\n", + "60000/60000 [==============================] - 42s - loss: 0.0118 - acc: 0.9962 - val_loss: 0.0209 - val_acc: 0.9935\n", + "Epoch 16/30\n", + "60000/60000 [==============================] - 42s - loss: 0.0106 - acc: 0.9967 - val_loss: 0.0226 - val_acc: 0.9931\n", + "Epoch 17/30\n", + "60000/60000 [==============================] - 43s - loss: 0.0097 - acc: 0.9970 - val_loss: 0.0212 - val_acc: 0.9936\n", + "Epoch 18/30\n", + "60000/60000 [==============================] - 43s - loss: 0.0089 - acc: 0.9973 - val_loss: 0.0230 - val_acc: 0.9937\n", + "Epoch 19/30\n", + "60000/60000 [==============================] - 44s - loss: 0.0083 - acc: 0.9973 - val_loss: 0.0220 - val_acc: 0.9939\n", + "Epoch 20/30\n", + "60000/60000 [==============================] - 44s - loss: 0.0075 - acc: 0.9978 - val_loss: 0.0217 - val_acc: 0.9944\n", + "Epoch 21/30\n", + "60000/60000 [==============================] - 44s - loss: 0.0072 - acc: 0.9978 - val_loss: 0.0245 - val_acc: 0.9918\n", + "Epoch 22/30\n", + "60000/60000 [==============================] - 45s - loss: 0.0067 - acc: 0.9980 - val_loss: 0.0247 - val_acc: 0.9934\n", + "Epoch 23/30\n", + "60000/60000 [==============================] - 45s - loss: 0.0063 - acc: 0.9981 - val_loss: 0.0239 - val_acc: 0.9937\n", + "Epoch 24/30\n", + "60000/60000 [==============================] - 45s - loss: 0.0056 - acc: 0.9981 - val_loss: 0.0243 - val_acc: 0.9938\n", + "Epoch 25/30\n", + "60000/60000 [==============================] - 43s - loss: 0.0058 - acc: 0.9982 - val_loss: 0.0234 - val_acc: 0.9937\n", + "Epoch 26/30\n", + "60000/60000 [==============================] - 43s - loss: 0.0044 - acc: 0.9987 - val_loss: 0.0246 - val_acc: 0.9932\n", + "Epoch 27/30\n", + "60000/60000 [==============================] - 44s - loss: 0.0044 - acc: 0.9986 - val_loss: 0.0251 - val_acc: 0.9940\n", + "Epoch 28/30\n", + "60000/60000 [==============================] - 44s - loss: 0.0041 - acc: 0.9987 - val_loss: 0.0261 - val_acc: 0.9935\n", + "Epoch 29/30\n", + "60000/60000 [==============================] - 44s - loss: 0.0035 - acc: 0.9989 - val_loss: 0.0252 - val_acc: 0.9940\n", + "Epoch 30/30\n", + "60000/60000 [==============================] - 44s - loss: 0.0035 - acc: 0.9990 - val_loss: 0.0234 - val_acc: 0.9938\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "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": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Test score: 0.0233515533706\n", + "Test accuracy: 99.38%\n" + ] + } + ], + "source": [ + "score = model.evaluate(X_test, Y_test, verbose=0)\n", + "\n", + "print 'Test score:', score[0]\n", + "print 'Test accuracy: {:.2%}'.format(score[1])" + ] + } + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Python [default]", + "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.12" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/notebooks/week-5/Week5-2 sw3036.ipynb b/notebooks/week-5/Week5-2 sw3036.ipynb new file mode 100644 index 0000000..576679d --- /dev/null +++ b/notebooks/week-5/Week5-2 sw3036.ipynb @@ -0,0 +1,265 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "\n", + "from matplotlib.pyplot import imshow\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "from scipy import misc\n", + "\n", + "import os\n", + "import random\n", + "import pickle" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['0', '1']\n" + ] + } + ], + "source": [ + "imageFolder = \"-catsdogs\"\n", + "\n", + "folders = os.listdir(imageFolder)\n", + "num_categories = len(folders)\n", + "\n", + "print folders" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Load data complete\n" + ] + } + ], + "source": [ + "# specify desired image properties\n", + "# in this case we want black and white square images 64x64 pixels in size\n", + "image_dim = 1 # black and white\n", + "image_size = 64\n", + "\n", + "# create an empty array to store the image data\n", + "data = []\n", + "\n", + "# look inside each folder which represents the categories of our data\n", + "for folder in folders:\n", + " \n", + " # find the files within each folder\n", + " fileNames = os.listdir(\"/\".join([imageFolder, folder]))\n", + " \n", + " # for each file, load and process each image\n", + " # in this case we limit the number of images used per cateogry to 10,000\n", + " # to prevent overloading our RAM memory\n", + " for fileName in fileNames[:10000]:\n", + " \n", + " # read in the image data into a numpy array\n", + " img = misc.imread(\"/\".join([imageFolder, folder, fileName]))\n", + " \n", + " # if the image contains more than one color channel,\n", + " # take only the first channel (in effect, convert it to black and white)\n", + " if image_dim == 1 and len(img.shape) > 2: \n", + " img = img[:,:,0] # convert to black and white\n", + "\n", + " # resize to target resolution if necessary\n", + " if img.shape[0] != image_size or img.shape[1] != image_size:\n", + " img = misc.imresize(img, (image_size, image_size), interp='nearest')\n", + "\n", + " # normalize data to have mean 0 and standard deviation 1\n", + " # then rescale it to roughly the range 0-1\n", + " img = (img - img.mean()) / img.std() / 4 + 0.5\n", + " \n", + " # add the image data and the associated category \n", + " # (which is stored in the folder variable) to the data set\n", + " # for this to work you need to make sure your folders \n", + " # are named sequentially starting with 0\n", + " data.append([img, folder])\n", + "\n", + "print \"Load data complete\"" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "random.shuffle(data)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "X = np.ndarray((len(data), image_size, image_size), dtype=np.float32)\n", + "y = np.ndarray((len(data), 1), dtype=np.int32)\n", + "\n", + "for i, d in enumerate(data):\n", + " X[i] = d[0]\n", + " y[i] = d[1]" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "image dimensions: (64, 64)\n", + "target category: dog\n" + ] + }, + { + "data": { + "image/png": "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\nTsbWoQ6oYAAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "img_index = 2\n", + "\n", + "img = X[img_index]\n", + "print \"image dimensions:\", img.shape\n", + "print \"target category:\", (['cat', 'dog'][y[img_index][0]])\n", + "\n", + "imshow(img, cmap = plt.get_cmap('gray'), vmin = 0, vmax = 1, interpolation='nearest')\n", + "plt.axis('off')\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "trainingSplit = int(.7 * X.shape[0])\n", + "\n", + "X_train = X[:trainingSplit]\n", + "y_train = y[:trainingSplit]\n", + "X_test = X[trainingSplit:]\n", + "y_test = y[trainingSplit:]" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Unable to save data to -catsdogs.pickle : \n" + ] + }, + { + "ename": "MemoryError", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mMemoryError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 9\u001b[0m \u001b[0;34m'y_test'\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0my_test\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 10\u001b[0m }\n\u001b[0;32m---> 11\u001b[0;31m \u001b[0mpickle\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdump\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msave\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpickle\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mHIGHEST_PROTOCOL\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 12\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mclose\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 13\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mException\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/home/vagrant/anaconda2/lib/python2.7/pickle.pyc\u001b[0m in \u001b[0;36mdump\u001b[0;34m(obj, file, protocol)\u001b[0m\n\u001b[1;32m 1374\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1375\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mdump\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfile\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mprotocol\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1376\u001b[0;31m \u001b[0mPickler\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfile\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mprotocol\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdump\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1377\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1378\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mdumps\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mprotocol\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/home/vagrant/anaconda2/lib/python2.7/pickle.pyc\u001b[0m in \u001b[0;36mdump\u001b[0;34m(self, obj)\u001b[0m\n\u001b[1;32m 222\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mproto\u001b[0m \u001b[0;34m>=\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 223\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mwrite\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mPROTO\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mchr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mproto\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 224\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msave\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 225\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mwrite\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mSTOP\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 226\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/home/vagrant/anaconda2/lib/python2.7/pickle.pyc\u001b[0m in \u001b[0;36msave\u001b[0;34m(self, obj)\u001b[0m\n\u001b[1;32m 284\u001b[0m \u001b[0mf\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdispatch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mt\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 285\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 286\u001b[0;31m \u001b[0mf\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mobj\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# Call unbound method with explicit self\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 287\u001b[0m \u001b[0;32mreturn\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 288\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/home/vagrant/anaconda2/lib/python2.7/pickle.pyc\u001b[0m in \u001b[0;36msave_dict\u001b[0;34m(self, obj)\u001b[0m\n\u001b[1;32m 653\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 654\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmemoize\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 655\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_batch_setitems\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0miteritems\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 656\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 657\u001b[0m \u001b[0mdispatch\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mDictionaryType\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0msave_dict\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/home/vagrant/anaconda2/lib/python2.7/pickle.pyc\u001b[0m in \u001b[0;36m_batch_setitems\u001b[0;34m(self, items)\u001b[0m\n\u001b[1;32m 685\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mk\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mv\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mtmp\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 686\u001b[0m \u001b[0msave\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mk\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 687\u001b[0;31m \u001b[0msave\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mv\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 688\u001b[0m \u001b[0mwrite\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mSETITEMS\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 689\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0mn\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/home/vagrant/anaconda2/lib/python2.7/pickle.pyc\u001b[0m in \u001b[0;36msave\u001b[0;34m(self, obj)\u001b[0m\n\u001b[1;32m 304\u001b[0m \u001b[0mreduce\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgetattr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"__reduce_ex__\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 305\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mreduce\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 306\u001b[0;31m \u001b[0mrv\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mreduce\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mproto\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 307\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 308\u001b[0m \u001b[0mreduce\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgetattr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"__reduce__\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mMemoryError\u001b[0m: " + ] + } + ], + "source": [ + "pickle_file = imageFolder + '.pickle'\n", + "\n", + "try:\n", + " f = open(pickle_file, 'wb')\n", + " save = {\n", + " 'X_train': X_train,\n", + " 'y_train': y_train,\n", + " 'X_test': X_test,\n", + " 'y_test': y_test,\n", + " }\n", + " pickle.dump(save, f, pickle.HIGHEST_PROTOCOL)\n", + " f.close()\n", + "except Exception as e:\n", + " print 'Unable to save data to', pickle_file, ':', e\n", + " raise\n", + " \n", + "statinfo = os.stat(pickle_file)\n", + "print 'Saved data to', pickle_file\n", + "print 'Compressed pickle size:', statinfo.st_size" + ] + } + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Python [default]", + "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.12" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/notebooks/week-5/Week5-3 sw3036.ipynb b/notebooks/week-5/Week5-3 sw3036.ipynb new file mode 100644 index 0000000..3fbee0c --- /dev/null +++ b/notebooks/week-5/Week5-3 sw3036.ipynb @@ -0,0 +1,371 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "('Training set', (14000, 64, 64), (14000, 1))\n", + "('Test set', (6000, 64, 64), (6000, 1))\n" + ] + } + ], + "source": [ + "import pickle\n", + "\n", + "pickle_file = '-catsdogs.pickle'\n", + "\n", + "with open(pickle_file, 'rb') as f:\n", + " save = pickle.load(f)\n", + " X_train = save['X_train']\n", + " y_train = save['y_train']\n", + " X_test = save['X_test']\n", + " y_test = save['y_test']\n", + " del save # hint to help gc free up memory\n", + " print('Training set', X_train.shape, y_train.shape)\n", + " print('Test set', X_test.shape, y_test.shape)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Using TensorFlow backend.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(14000, 64, 64)\n", + "64 64\n", + "(14000, 64, 64, 1)\n", + "(14000, 1)\n", + "(64, 64)\n", + "(14000, 1)\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\nvgnMk3RBl63zT+QLJP2iqXrtLSml1eoYpNb29FPHlwht057OBfj9ks5LKVX2guktbch4h6RDeknd\n75J0kjrcESd3/ntE0vclnZxSWqX2b0OFiDhMHQvwhl4yBg9IGpvZxqrjbX7/PgNNq5SdquNHJG2V\ndIWkEyR9Ux1q96Cm69ZNfQ9Vx4MzSR1fFfxR5/Hwzp//SWf936eOh+1WScslHdx03Tvrd5M6PsU5\nRx2/2bv+9Wkp07ZtkPRXnXU/RtIESX8t6Q1J57d73XfTpvzriLZug6S/lXRu5xicKelOdbzBH9FL\n6n+qOvSEL0o6TtInJP1K0sf29xg03hktDf4DdaSzfFXSg5JObbpOu6nr9M7Fd0f2759bylyrjk9c\ntkqaJWl00/VuqRvVfYekK7JybdkGSd+StKpzrmyS9NOuBbjd676bNs1uXYTbvQ2S/k0dn5G+KulJ\nSTdLGtlb6t9Zv0slPdZZv0WS/geU2edtcCpLY4xpkMZ9wsYYcyDjRdgYYxrEi7AxxjSIF2FjjGkQ\nL8LGGNMgXoSNMaZBvAgbY0yDeBE2xpgG8SJsjDEN4kXYGGMaxIuwMcY0iBdhY4xpkP8PdyDDeK72\nvLEAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "## implement your CNN starting here.\n", + "\n", + "import numpy as np\n", + "np.random.seed(1337) # for reproducibility\n", + "\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\n", + "\n", + "#from keras.datasets import mnist\n", + "\n", + "import pickle\n", + "K.set_image_dim_ordering('tf')\n", + "\n", + "num_classes = 2\n", + "img_rows, img_cols = X_train.shape[1], X_train.shape[2]\n", + "\n", + "print X_train.shape\n", + "print img_rows, img_cols\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", + "Y_train = np_utils.to_categorical(y_train, num_classes)\n", + "Y_test = np_utils.to_categorical(y_test, num_classes)\n", + "\n", + "print X_train.shape\n", + "print y_train.shape\n", + "\n", + "%matplotlib inline\n", + "from matplotlib.pyplot import imshow\n", + "import matplotlib.pyplot as plt\n", + "\n", + "img_num = 0\n", + "\n", + "img = X_train[img_num][:,:,0]\n", + "\n", + "print img.shape\n", + "print y_train.shape\n", + "imshow(img, cmap = plt.get_cmap('gray'), vmin = 0, vmax = 1, interpolation='nearest')\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "\n", + "\n", + "# model hyperparameters\n", + "batch_size = 128\n", + "nb_epoch = 30\n", + "\n", + "# network architecture\n", + "patch_size_1 = 3\n", + "patch_size_2 = 3\n", + "patch_size_3 = 3\n", + "\n", + "depth_1 = 20\n", + "depth_2 = 40\n", + "depth_3 = 60\n", + "\n", + "pool_size = 2\n", + "\n", + "num_hidden_1 = 1000\n", + "num_hidden_2 = 1000\n", + "num_hidden_3 = 1000\n", + "\n", + "dropout = 0.5" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# create new Keras Sequential model\n", + "model = Sequential()\n", + "\n", + "# add first convolutional layer to model and specify it's depth and filter size\n", + "# for the first layer we also have to specify the size of each input image\n", + "# which we calculated above\n", + "model.add(Convolution2D(depth_1, patch_size_1, patch_size_1,\n", + " border_mode='valid',\n", + " input_shape=input_shape))\n", + "# apply 'relu' activation function for first layer\n", + "model.add(Activation('relu'))\n", + "# apply max pooling to reduce the size of the image by a factor of 2\n", + "model.add(MaxPooling2D(pool_size=(pool_size, pool_size)))\n", + "\n", + "# repeat these operations for the second convolutional layer\n", + "# this time Keras can figure out the input size \n", + "# from the previous layer on it's own\n", + "model.add(Convolution2D(depth_2, patch_size_2, patch_size_2,\n", + " border_mode='valid'))\n", + "model.add(Activation('relu'))\n", + "model.add(MaxPooling2D(pool_size=(pool_size, pool_size)))\n", + "\n", + "#extra below:\n", + "\n", + "model.add(Convolution2D(depth_3, patch_size_3, patch_size_3,\n", + " border_mode='valid'))\n", + "model.add(Activation('relu'))\n", + "model.add(MaxPooling2D(pool_size=(pool_size, pool_size)))\n", + "\n", + "\n", + "# flatten the three-dimensional convolutional layer to a single layer of neurons\n", + "model.add(Flatten())\n", + "\n", + "# add the first fully connected layer, applying 'relu' activation and dropout\n", + "model.add(Dense(num_hidden_1))\n", + "model.add(Activation('relu'))\n", + "model.add(Dropout(dropout))\n", + "\n", + "# add the second fully connected layer\n", + "model.add(Dense(num_hidden_2))\n", + "model.add(Activation('relu'))\n", + "model.add(Dropout(dropout))\n", + "\n", + "model.add(Dense(num_hidden_3))\n", + "model.add(Activation('relu'))\n", + "model.add(Dropout(dropout))\n", + "\n", + "# add the final classification layer with the number of neurons \n", + "# matching the number of classes we are trying to learn\n", + "model.add(Dense(num_classes))\n", + "\n", + "# apply the 'softmax' activation to the final layer to convert the output to \n", + "# a probability distribution\n", + "model.add(Activation('softmax'))\n", + "\n", + "model.compile(loss='categorical_crossentropy',\n", + " optimizer='adadelta',\n", + " metrics=['accuracy'])" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train on 14000 samples, validate on 6000 samples\n", + "Epoch 1/30\n", + "14000/14000 [==============================] - 50s - loss: 0.6922 - acc: 0.5149 - val_loss: 0.6916 - val_acc: 0.4970\n", + "Epoch 2/30\n", + "14000/14000 [==============================] - 50s - loss: 0.6784 - acc: 0.5754 - val_loss: 0.6476 - val_acc: 0.6388\n", + "Epoch 3/30\n", + "14000/14000 [==============================] - 57s - loss: 0.6577 - acc: 0.6119 - val_loss: 0.6516 - val_acc: 0.6175\n", + "Epoch 4/30\n", + "14000/14000 [==============================] - 63s - loss: 0.6439 - acc: 0.6253 - val_loss: 0.6434 - val_acc: 0.6223\n", + "Epoch 5/30\n", + "14000/14000 [==============================] - 57s - loss: 0.6257 - acc: 0.6509 - val_loss: 0.6091 - val_acc: 0.6707\n", + "Epoch 6/30\n", + "14000/14000 [==============================] - 50s - loss: 0.5943 - acc: 0.6836 - val_loss: 0.7811 - val_acc: 0.5538\n", + "Epoch 7/30\n", + "14000/14000 [==============================] - 50s - loss: 0.5540 - acc: 0.7210 - val_loss: 0.5323 - val_acc: 0.7297\n", + "Epoch 8/30\n", + "14000/14000 [==============================] - 50s - loss: 0.5243 - acc: 0.7414 - val_loss: 0.4956 - val_acc: 0.7568\n", + "Epoch 9/30\n", + "14000/14000 [==============================] - 50s - loss: 0.4938 - acc: 0.7596 - val_loss: 0.5707 - val_acc: 0.7008\n", + "Epoch 10/30\n", + "14000/14000 [==============================] - 50s - loss: 0.4724 - acc: 0.7742 - val_loss: 0.4952 - val_acc: 0.7480\n", + "Epoch 11/30\n", + "14000/14000 [==============================] - 50s - loss: 0.4462 - acc: 0.7939 - val_loss: 0.4512 - val_acc: 0.7867\n", + "Epoch 12/30\n", + "14000/14000 [==============================] - 50s - loss: 0.4289 - acc: 0.7999 - val_loss: 0.5617 - val_acc: 0.7360\n", + "Epoch 13/30\n", + "14000/14000 [==============================] - 50s - loss: 0.4066 - acc: 0.8161 - val_loss: 0.4460 - val_acc: 0.7915\n", + "Epoch 14/30\n", + "14000/14000 [==============================] - 50s - loss: 0.3831 - acc: 0.8316 - val_loss: 0.4320 - val_acc: 0.7982\n", + "Epoch 15/30\n", + "14000/14000 [==============================] - 50s - loss: 0.3594 - acc: 0.8426 - val_loss: 0.4514 - val_acc: 0.7920\n", + "Epoch 16/30\n", + "14000/14000 [==============================] - 50s - loss: 0.3309 - acc: 0.8565 - val_loss: 0.4557 - val_acc: 0.7977\n", + "Epoch 17/30\n", + "14000/14000 [==============================] - 50s - loss: 0.3102 - acc: 0.8696 - val_loss: 0.4314 - val_acc: 0.8015\n", + "Epoch 18/30\n", + "14000/14000 [==============================] - 50s - loss: 0.2747 - acc: 0.8866 - val_loss: 0.4411 - val_acc: 0.8022\n", + "Epoch 19/30\n", + "14000/14000 [==============================] - 50s - loss: 0.2349 - acc: 0.9039 - val_loss: 0.5065 - val_acc: 0.7990\n", + "Epoch 20/30\n", + "14000/14000 [==============================] - 50s - loss: 0.2020 - acc: 0.9202 - val_loss: 0.5189 - val_acc: 0.8032\n", + "Epoch 21/30\n", + "14000/14000 [==============================] - 50s - loss: 0.1593 - acc: 0.9403 - val_loss: 0.5528 - val_acc: 0.8040\n", + "Epoch 22/30\n", + "14000/14000 [==============================] - 50s - loss: 0.1263 - acc: 0.9531 - val_loss: 0.6769 - val_acc: 0.7878\n", + "Epoch 23/30\n", + "14000/14000 [==============================] - 50s - loss: 0.1022 - acc: 0.9619 - val_loss: 0.6285 - val_acc: 0.8012\n", + "Epoch 24/30\n", + "14000/14000 [==============================] - 50s - loss: 0.0753 - acc: 0.9724 - val_loss: 0.7553 - val_acc: 0.7987\n", + "Epoch 25/30\n", + "14000/14000 [==============================] - 50s - loss: 0.0534 - acc: 0.9811 - val_loss: 0.8661 - val_acc: 0.7923\n", + "Epoch 26/30\n", + "14000/14000 [==============================] - 50s - loss: 0.0421 - acc: 0.9850 - val_loss: 0.8491 - val_acc: 0.8017\n", + "Epoch 27/30\n", + "14000/14000 [==============================] - 50s - loss: 0.0465 - acc: 0.9839 - val_loss: 0.8363 - val_acc: 0.8027\n", + "Epoch 28/30\n", + "14000/14000 [==============================] - 50s - loss: 0.0277 - acc: 0.9905 - val_loss: 0.9287 - val_acc: 0.8050\n", + "Epoch 29/30\n", + "14000/14000 [==============================] - 50s - loss: 0.0303 - acc: 0.9898 - val_loss: 0.9415 - val_acc: 0.8055\n", + "Epoch 30/30\n", + "14000/14000 [==============================] - 50s - loss: 0.0264 - acc: 0.9912 - val_loss: 1.0273 - val_acc: 0.7870\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "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": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Test score: 1.02733491\n", + "Test accuracy: 78.70%\n" + ] + } + ], + "source": [ + "score = model.evaluate(X_test, Y_test, verbose=0)\n", + "\n", + "print 'Test score:', score[0]\n", + "print 'Test accuracy: {:.2%}'.format(score[1])" + ] + } + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Python [default]", + "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.12" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/notebooks/week-6/01-training a RNN model in Keras.ipynb b/notebooks/week-6/01-training a RNN model in Keras.ipynb new file mode 100644 index 0000000..7a44731 --- /dev/null +++ b/notebooks/week-6/01-training a RNN model in Keras.ipynb @@ -0,0 +1,470 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Lab 6.1 - Keras for RNN\n", + "\n", + "In this lab we will use the [Keras deep learning library](https://keras.io/) to construct a simple recurrent neural network (RNN) that can *learn* linguistic structure from a piece of text, and use that knowledge to *generate* new text passages. To review general RNN architecture, specific types of RNN networks such as the LSTM networks we'll be using here, and other concepts behind this type of machine learning, you should consult the following resources:\n", + "\n", + "- http://www.wildml.com/2015/09/recurrent-neural-networks-tutorial-part-1-introduction-to-rnns/\n", + "- http://ml4a.github.io/guides/recurrent_neural_networks/\n", + "- http://colah.github.io/posts/2015-08-Understanding-LSTMs/\n", + "- http://karpathy.github.io/2015/05/21/rnn-effectiveness/\n", + "\n", + "This code is an adaptation of these two examples:\n", + "\n", + "- http://machinelearningmastery.com/text-generation-lstm-recurrent-neural-networks-python-keras/\n", + "- https://github.com/fchollet/keras/blob/master/examples/lstm_text_generation.py\n", + "\n", + "You can consult the original sites for more information and documentation.\n", + "\n", + "Let's start by importing some of the libraries we'll be using in this lab:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "from keras.models import Sequential\n", + "from keras.layers import Dense\n", + "from keras.layers import Dropout\n", + "from keras.layers import LSTM\n", + "from keras.callbacks import ModelCheckpoint\n", + "from keras.utils import np_utils\n", + "\n", + "from time import gmtime, strftime\n", + "import os\n", + "import re\n", + "import pickle\n", + "import random\n", + "import sys" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The first thing we need to do is generate our training data set. In this case we will use a recent article written by Barack Obama for The Economist newspaper. Make sure you have the `obama.txt` file in the `/data` folder within the `/week-6` folder in your repository." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# load ascii text from file\n", + "filename = \"data/obama.txt\"\n", + "raw_text = open(filename).read()\n", + "\n", + "# get rid of any characters other than letters, numbers, \n", + "# and a few special characters\n", + "raw_text = re.sub('[^\\nA-Za-z0-9 ,.:;?!-]+', '', raw_text)\n", + "\n", + "# convert all text to lowercase\n", + "raw_text = raw_text.lower()\n", + "\n", + "n_chars = len(raw_text)\n", + "print \"length of text:\", n_chars\n", + "print \"text preview:\", raw_text[:500]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, we use python's `set()` function to generate a list of all unique characters in the text. This will form our 'vocabulary' of characters, which is similar to the categories found in typical ML classification problems. \n", + "\n", + "Since neural networks work with numerical data, we also need to create a mapping between each character and a unique integer value. To do this we create two dictionaries: one which has characters as keys and the associated integers as the value, and one which has integers as keys and the associated characters as the value. These dictionaries will allow us to do translation both ways." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# extract all unique characters in the text\n", + "chars = sorted(list(set(raw_text)))\n", + "n_vocab = len(chars)\n", + "print \"number of unique characters found:\", n_vocab\n", + "\n", + "# create mapping of characters to integers and back\n", + "char_to_int = dict((c, i) for i, c in enumerate(chars))\n", + "int_to_char = dict((i, c) for i, c in enumerate(chars))\n", + "\n", + "# test our mapping\n", + "print 'a', \"- maps to ->\", char_to_int[\"a\"]\n", + "print 25, \"- maps to ->\", int_to_char[25]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false + }, + "source": [ + "Now we need to define the training data for our network. With RNN's, the training data usually takes the shape of a three-dimensional matrix, with the size of each dimension representing:\n", + "\n", + "[# of training sequences, # of training samples per sequence, # of features per sample]\n", + "\n", + "- The training sequences are the sets of data subjected to the RNN at each training step. As with all neural networks, these training sequences are presented to the network in small batches during training.\n", + "- Each training sequence is composed of some number of training samples. The number of samples in each sequence dictates how far back in the data stream the algorithm will learn, and sets the depth of the RNN layer.\n", + "- Each training sample within a sequence is composed of some number of features. This is the data that the RNN layer is learning from at each time step. In our example, the training samples and targets will use one-hot encoding, so will have a feature for each possible character, with the actual character represented by `1`, and all others by `0`.\n", + "\n", + "To prepare the data, we first set the length of training sequences we want to use. In this case we will set the sequence length to 100, meaning the RNN layer will be able to predict future characters based on the 100 characters that came before.\n", + "\n", + "We will then slide this 100 character 'window' over the entire text to create `input` and `output` arrays. Each entry in the `input` array contains 100 characters from the text, and each entry in the `output` array contains the single character that came after." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# prepare the dataset of input to output pairs encoded as integers\n", + "seq_length = 100\n", + "\n", + "inputs = []\n", + "outputs = []\n", + "\n", + "for i in range(0, n_chars - seq_length, 1):\n", + " inputs.append(raw_text[i:i + seq_length])\n", + " outputs.append(raw_text[i + seq_length])\n", + " \n", + "n_sequences = len(inputs)\n", + "print \"Total sequences: \", n_sequences" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now let's shuffle both the input and output data so that we can later have Keras split it automatically into a training and test set. To make sure the two lists are shuffled the same way (maintaining correspondance between inputs and outputs), we create a separate shuffled list of indeces, and use these indeces to reorder both lists." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "indeces = range(len(inputs))\n", + "random.shuffle(indeces)\n", + "\n", + "inputs = [inputs[x] for x in indeces]\n", + "outputs = [outputs[x] for x in indeces]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's visualize one of these sequences to make sure we are getting what we expect:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "print inputs[0], \"-->\", outputs[0]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next we will prepare the actual numpy datasets which will be used to train our network. We first initialize two empty numpy arrays in the proper formatting:\n", + "\n", + "- X --> [# of training sequences, # of training samples, # of features]\n", + "- y --> [# of training sequences, # of features]\n", + "\n", + "We then iterate over the arrays we generated in the previous step and fill the numpy arrays with the proper data. Since all character data is formatted using one-hot encoding, we initialize both data sets with zeros. As we iterate over the data, we use the `char_to_int` dictionary to map each character to its related position integer, and use that position to change the related value in the data set to `1`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# create two empty numpy array with the proper dimensions\n", + "X = np.zeros((n_sequences, seq_length, n_vocab), dtype=np.bool)\n", + "y = np.zeros((n_sequences, n_vocab), dtype=np.bool)\n", + "\n", + "# iterate over the data and build up the X and y data sets\n", + "# by setting the appropriate indices to 1 in each one-hot vector\n", + "for i, example in enumerate(inputs):\n", + " for t, char in enumerate(example):\n", + " X[i, t, char_to_int[char]] = 1\n", + " y[i, char_to_int[outputs[i]]] = 1\n", + " \n", + "print 'X dims -->', X.shape\n", + "print 'y dims -->', y.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, we define our RNN model in Keras. This is very similar to how we defined the CNN model, except now we use the `LSTM()` function to create an LSTM layer with an internal memory of 128 neurons. LSTM is a special type of RNN layer which solves the unstable gradients issue seen in basic RNN. Along with LSTM layers, Keras also supports basic RNN layers and GRU layers, which are similar to LSTM. You can find full documentation for recurrent layers in [Keras' documentation](https://keras.io/layers/recurrent/)\n", + "\n", + "As before, we need to explicitly define the input shape for the first layer. Also, we need to tell Keras whether the LSTM layer should pass its sequence of predictions or its internal memory as the output to the next layer. If you are connecting the LSTM layer to a fully connected layer as we do in this case, you should set the `return_sequences` parameter to `False` to have the layer pass the value of its hidden neurons. If you are connecting multiple LSTM layers, you should set the parameter to `True` in all but the last layer, so that subsequent layers can learn from the sequence of predictions of previous layers.\n", + "\n", + "We will use dropout with a probability of 50% to regularize the network and prevent overfitting on our training data. The output of the network will be a fully connected layer with one neuron for each character in the vocabulary. The softmax function will convert this output to a probability distribution across all characters." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# define the LSTM model\n", + "model = Sequential()\n", + "model.add(LSTM(128, return_sequences=False, input_shape=(X.shape[1], X.shape[2])))\n", + "model.add(Dropout(0.50))\n", + "model.add(Dense(y.shape[1], activation='softmax'))\n", + "model.compile(loss='categorical_crossentropy', optimizer='adam')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, we define two helper functions: one to select a character based on a probability distribution, and one to generate a sequence of predicted characters based on an input (or 'seed') list of characters.\n", + "\n", + "The `sample()` function will take in a probability distribution generated by the `softmax()` function, and select a character based on the 'temperature' input. The temperature (also often called the 'diversity') effects how strictly the probability distribution is sampled. \n", + "\n", + "- Lower values (closer to zero) output more confident predictions, but are also more conservative. In our case, if the model has overfit the training data, lower values are likely to give back exactly what is found in the text\n", + "- Higher values (1 and above) introduce more diversity and randomness into the results. This can lead the model to generate novel information not found in the training data. However, you are also likely to see more errors such as grammatical or spelling mistakes." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def sample(preds, temperature=1.0):\n", + " # helper function to sample an index from a probability array\n", + " preds = np.asarray(preds).astype('float64')\n", + " preds = np.log(preds) / temperature\n", + " exp_preds = np.exp(preds)\n", + " preds = exp_preds / np.sum(exp_preds)\n", + " probas = np.random.multinomial(1, preds, 1)\n", + " return np.argmax(probas)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `generate()` function will take in:\n", + "\n", + "- input sentance ('seed')\n", + "- number of characters to generate\n", + "- and target diversity or temperature\n", + "\n", + "and print the resulting sequence of characters to the screen." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def generate(sentence, prediction_length=50, diversity=0.35):\n", + " print '----- diversity:', diversity \n", + "\n", + " generated = sentence\n", + " sys.stdout.write(generated)\n", + "\n", + " # iterate over number of characters requested\n", + " for i in range(prediction_length):\n", + " \n", + " # build up sequence data from current sentence\n", + " x = np.zeros((1, X.shape[1], X.shape[2]))\n", + " for t, char in enumerate(sentence):\n", + " x[0, t, char_to_int[char]] = 1.\n", + "\n", + " # use trained model to return probability distribution\n", + " # for next character based on input sequence\n", + " preds = model.predict(x, verbose=0)[0]\n", + " \n", + " # use sample() function to sample next character \n", + " # based on probability distribution and desired diversity\n", + " next_index = sample(preds, diversity)\n", + " \n", + " # convert integer to character\n", + " next_char = int_to_char[next_index]\n", + "\n", + " # add new character to generated text\n", + " generated += next_char\n", + " \n", + " # delete the first character from beginning of sentance, \n", + " # and add new caracter to the end. This will form the \n", + " # input sequence for the next predicted character.\n", + " sentence = sentence[1:] + next_char\n", + "\n", + " # print results to screen\n", + " sys.stdout.write(next_char)\n", + " sys.stdout.flush()\n", + " print" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, we define a system for Keras to save our model's parameters to a local file after each epoch where it achieves an improvement in the overall loss. This will allow us to reuse the trained model at a later time without having to retrain it from scratch. This is useful for recovering models incase your computer crashes, or you want to stop the training early." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "filepath=\"-basic_LSTM.hdf5\"\n", + "checkpoint = ModelCheckpoint(filepath, monitor='loss', verbose=0, save_best_only=True, mode='min')\n", + "callbacks_list = [checkpoint]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we are finally ready to train the model. We want to train the model over 50 epochs, but we also want to output some generated text after each epoch to see how our model is doing. \n", + "\n", + "To do this we create our own loop to iterate over each epoch. Within the loop we first train the model for one epoch. Since all parameters are stored within the model, training one epoch at a time has the same exact effect as training over a longer series of epochs. We also use the model's `validation_split` parameter to tell Keras to automatically split the data into 80% training data and 20% test data for validation. Remember to always shuffle your data if you will be using validation!\n", + "\n", + "After each epoch is trained, we use the `raw_text` data to extract a new sequence of 100 characters as the 'seed' for our generated text. Finally, we use our `generate()` helper function to generate text using two different diversity settings.\n", + "\n", + "*Warning:* because of their large depth (remember that an RNN trained on a 100 long sequence effectively has 100 layers!), these networks typically take a much longer time to train than traditional multi-layer ANN's and CNN's. You shoud expect these models to train overnight on the virtual machine, but you should be able to see enough progress after the first few epochs to know if it is worth it to train a model to the end. For more complex RNN models with larger data sets in your own work, you should consider a native installation, along with a dedicated GPU if possible." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "epochs = 50\n", + "prediction_length = 100\n", + "\n", + "for iteration in range(epochs):\n", + " \n", + " print 'epoch:', iteration + 1, '/', epochs\n", + " model.fit(X, y, validation_split=0.2, batch_size=256, nb_epoch=1, callbacks=callbacks_list)\n", + " \n", + " # get random starting point for seed\n", + " start_index = random.randint(0, len(raw_text) - seq_length - 1)\n", + " # extract seed sequence from raw text\n", + " seed = raw_text[start_index: start_index + seq_length]\n", + " \n", + " print '----- generating with seed:', seed\n", + " \n", + " for diversity in [0.5, 1.2]:\n", + " generate(seed, prediction_length, diversity)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "That looks pretty good! You can see that the RNN has learned alot of the linguistic structure of the original writing, including typical length for words, where to put spaces, and basic punctuation with commas and periods. Many words are still misspelled but seem almost reasonable, and it is pretty amazing that it is able to learn this much in only 50 epochs of training. \n", + "\n", + "You can see that the loss is still going down after 50 epochs, so the model can definitely benefit from longer training. If you're curious you can try to train for more epochs, but as the error decreases be careful to monitor the output to make sure that the model is not overfitting. As with other neural network models, you can monitor the difference between training and validation loss to see if overfitting might be occuring. In this case, since we're using the model to generate new information, we can also get a sense of overfitting from the material it generates.\n", + "\n", + "A good indication of overfitting is if the model outputs exactly what is in the original text given a seed from the text, but jibberish if given a seed that is not in the original text. Remember we don't want the model to learn how to reproduce exactly the original text, but to learn its style to be able to generate new text. As with other models, regularization methods such as dropout and limiting model complexity can be used to avoid the problem of overfitting.\n", + "\n", + "Finally, let's save our training data and character to integer mapping dictionaries to an external file so we can reuse it with the model at a later time." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "pickle_file = '-basic_data.pickle'\n", + "\n", + "try:\n", + " f = open(pickle_file, 'wb')\n", + " save = {\n", + " 'X': X,\n", + " 'y': y,\n", + " 'int_to_char': int_to_char,\n", + " 'char_to_int': char_to_int,\n", + " }\n", + " pickle.dump(save, f, pickle.HIGHEST_PROTOCOL)\n", + " f.close()\n", + "except Exception as e:\n", + " print 'Unable to save data to', pickle_file, ':', e\n", + " raise\n", + " \n", + "statinfo = os.stat(pickle_file)\n", + "print 'Saved data to', pickle_file\n", + "print 'Compressed pickle size:', statinfo.st_size" + ] + } + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Python [default]", + "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.12" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/notebooks/week-6/02-using a pre-trained model with Keras.ipynb b/notebooks/week-6/02-using a pre-trained model with Keras.ipynb new file mode 100644 index 0000000..b8e161c --- /dev/null +++ b/notebooks/week-6/02-using a pre-trained model with Keras.ipynb @@ -0,0 +1,215 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Lab 6.2 - Using a pre-trained model with Keras\n", + "\n", + "In this section of the lab, we will load the model we trained in the previous section, along with the training data and mapping dictionaries, and use it to generate longer sequences of text.\n", + "\n", + "Let's start by importing the libraries we will be using:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "from keras.models import Sequential\n", + "from keras.layers import Dense\n", + "from keras.layers import Dropout\n", + "from keras.layers import LSTM\n", + "from keras.callbacks import ModelCheckpoint\n", + "from keras.utils import np_utils\n", + "\n", + "import sys\n", + "import re\n", + "import pickle" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, we will import the data we saved previously using the `pickle` library." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "pickle_file = '-basic_data.pickle'\n", + "\n", + "with open(pickle_file, 'rb') as f:\n", + " save = pickle.load(f)\n", + " X = save['X']\n", + " y = save['y']\n", + " char_to_int = save['char_to_int'] \n", + " int_to_char = save['int_to_char'] \n", + " del save # hint to help gc free up memory\n", + " print('Training set', X.shape, y.shape)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we need to define the Keras model. Since we will be loading parameters from a pre-trained model, this needs to match exactly the definition from the previous lab section. The only difference is that we will comment out the dropout layer so that the model uses all the hidden neurons when doing the predictions." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# define the LSTM model\n", + "model = Sequential()\n", + "model.add(LSTM(128, return_sequences=False, input_shape=(X.shape[1], X.shape[2])))\n", + "# model.add(Dropout(0.50))\n", + "model.add(Dense(y.shape[1], activation='softmax'))\n", + "model.compile(loss='categorical_crossentropy', optimizer='adam')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next we will load the parameters from the model we trained previously, and compile it with the same loss and optimizer function." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# load the parameters from the pretrained model\n", + "filename = \"-basic_LSTM.hdf5\"\n", + "model.load_weights(filename)\n", + "model.compile(loss='categorical_crossentropy', optimizer='adam')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We also need to rewrite the `sample()` and `generate()` helper functions so that we can use them in our code:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def sample(preds, temperature=1.0):\n", + " preds = np.asarray(preds).astype('float64')\n", + " preds = np.log(preds) / temperature\n", + " exp_preds = np.exp(preds)\n", + " preds = exp_preds / np.sum(exp_preds)\n", + " probas = np.random.multinomial(1, preds, 1)\n", + " return np.argmax(probas)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def generate(sentence, sample_length=50, diversity=0.35):\n", + " generated = sentence\n", + " sys.stdout.write(generated)\n", + "\n", + " for i in range(sample_length):\n", + " x = np.zeros((1, X.shape[1], X.shape[2]))\n", + " for t, char in enumerate(sentence):\n", + " x[0, t, char_to_int[char]] = 1.\n", + "\n", + " preds = model.predict(x, verbose=0)[0]\n", + " next_index = sample(preds, diversity)\n", + " next_char = int_to_char[next_index]\n", + "\n", + " generated += next_char\n", + " sentence = sentence[1:] + next_char\n", + "\n", + " sys.stdout.write(next_char)\n", + " sys.stdout.flush()\n", + " print" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can use the `generate()` function to generate text of any length based on our imported pre-trained model and a seed text of our choice. For best result, the length of the seed text should be the same as the length of training sequences (100 in the previous lab section). \n", + "\n", + "In this case, we will test the overfitting of the model by supplying it two seeds:\n", + "\n", + "- one which comes verbatim from the training text, and\n", + "- one which comes from another earlier speech by Obama\n", + "\n", + "If the model has not overfit our training data, we should expect it to produce reasonable results for both seeds. If it has overfit, it might produce pretty good results for something coming directly from the training set, but perform poorly on a new seed. This means that it has learned to replicate our training text, but cannot generalize to produce text based on other inputs. Since the original article was very short, however, the entire vocabulary of the model might be very limited, which is why as input we use a part of another speech given by Obama, instead of completely random text.\n", + "\n", + "Since we have not trained the model for that long, we will also use a lower temperature to get the model to generate more accurate if less diverse results. Try running the code a few times with different temperature settings to generate different results." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "prediction_length = 500\n", + "seed_from_text = \"america has shown that progress is possible. last year, income gains were larger for households at t\"\n", + "seed_original = \"and as people around the world began to hear the tale of the lowly colonists who overthrew an empire\"\n", + "\n", + "for seed in [seed_from_text, seed_original]:\n", + " generate(seed, prediction_length, .50)\n", + " print \"-\" * 20" + ] + } + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Python [default]", + "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.12" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/notebooks/week-6/03-model improvement.ipynb b/notebooks/week-6/03-model improvement.ipynb new file mode 100644 index 0000000..422529c --- /dev/null +++ b/notebooks/week-6/03-model improvement.ipynb @@ -0,0 +1,177 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Lab 6.3 - Improving the model\n", + "\n", + "In this section of the lab, you will be asked to apply what you have learned to create a RNN model that can generate new sequences of text based on what it has learned from a large set of existing text. In this case we will be using the full text of Lewis Carroll's *Alice in Wonderland*. Your task for the assignment is to:\n", + "\n", + "- format the book text into a set of training data\n", + "- define a RNN model in Keras based on one or more LSTM or GRU layers\n", + "- train the model with the training data\n", + "- use the trained model to generate new text\n", + "\n", + "Our previous model based on Obama's essay was prone to overfitting since there was not that much data to learn from. Thus, the generated text was either unintelligeable (not enough learning) or exactly replicated the training data (over-fitting). In this case, we are working with a much bigger data set, which should provide enough data to avoid over-fitting, but will also take more time to train. To improve your model, you can experiment with tuning the following hyper-parameters:\n", + "\n", + "- Use more than one recurrent layer and/or add more memory units (hidden neurons) to each layer. This will allow you to learn more complex structures in the data.\n", + "- Use sequences longer than 100 characters, which will allow you to learn from patterns further back in time.\n", + "- Change the way the sequences are generated. For example you could try to break up the text into real sentances using the periods, and then either cut or pad each sentance to make it 100 characters long.\n", + "- Increase the number of training epochs, which will give the model more time to learn. Monitor the validation loss at each epoch to make sure the model is still improving at each epoch and is not overfitting the training data.\n", + "- Add more dropout to the recurrent layers to minimize over-fitting.\n", + "- Tune the batch size - try a batch size of 1 as a (very slow) baseline and larger sizes from there.\n", + "- Experiment with scale factors (temperature) when interpreting the prediction probabilities.\n", + "\n", + "If you get an error such as `alloc error` or `out of memory error` during training it means that your computer does not have enough RAM memory to store the model parameters or the batch of training data needed during a training step. If you run into this issue, try reducing the complexity of your model (both number and depth of layers) or the mini-batch size.\n", + "\n", + "The last three code blocks will use your trained model to generate a sequence of text based on a predefined seed. Do not change any of the code, but run it before submitting your assignment. Your work will be evaluated based on the quality of the generated text. A good result should be legible with decent grammar and spelling (this indicates a high level of learning), but the exact text should not be found anywhere in the actual text (this indicates over-fitting).\n", + "\n", + "Let's start by importing the libraries we will be using, and importing the full text from Alice in Wonderland:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "from keras.models import Sequential\n", + "from keras.layers import Dense\n", + "from keras.layers import Dropout\n", + "from keras.layers import LSTM\n", + "from keras.callbacks import ModelCheckpoint\n", + "from keras.utils import np_utils\n", + "\n", + "from time import gmtime, strftime\n", + "import os\n", + "import re\n", + "import pickle\n", + "import random\n", + "import sys" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "filename = \"data/wonderland.txt\"\n", + "raw_text = open(filename).read()\n", + "\n", + "raw_text = re.sub('[^\\nA-Za-z0-9 ,.:;?!-]+', '', raw_text)\n", + "raw_text = raw_text.lower()\n", + "\n", + "n_chars = len(raw_text)\n", + "print \"length of text:\", n_chars\n", + "print \"text preview:\", raw_text[:500]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# write your code here" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Do not change this code, but run it before submitting your assignment to generate the results**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def sample(preds, temperature=1.0):\n", + " preds = np.asarray(preds).astype('float64')\n", + " preds = np.log(preds) / temperature\n", + " exp_preds = np.exp(preds)\n", + " preds = exp_preds / np.sum(exp_preds)\n", + " probas = np.random.multinomial(1, preds, 1)\n", + " return np.argmax(probas)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def generate(sentence, sample_length=50, diversity=0.35):\n", + " generated = sentence\n", + " sys.stdout.write(generated)\n", + "\n", + " for i in range(sample_length):\n", + " x = np.zeros((1, X.shape[1], X.shape[2]))\n", + " for t, char in enumerate(sentence):\n", + " x[0, t, char_to_int[char]] = 1.\n", + "\n", + " preds = model.predict(x, verbose=0)[0]\n", + " next_index = sample(preds, diversity)\n", + " next_char = int_to_char[next_index]\n", + "\n", + " generated += next_char\n", + " sentence = sentence[1:] + next_char\n", + "\n", + " sys.stdout.write(next_char)\n", + " sys.stdout.flush()\n", + " print" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "prediction_length = 500\n", + "seed = \"this time alice waited patiently until it chose to speak again. in a minute or two the caterpillar t\"\n", + "\n", + "generate(seed, prediction_length, .50)" + ] + } + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Python [default]", + "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.12" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/notebooks/week-6/Week6-1 sw3036.ipynb b/notebooks/week-6/Week6-1 sw3036.ipynb new file mode 100644 index 0000000..6c8396f --- /dev/null +++ b/notebooks/week-6/Week6-1 sw3036.ipynb @@ -0,0 +1,926 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Using TensorFlow backend.\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "from keras.models import Sequential\n", + "from keras.layers import Dense\n", + "from keras.layers import Dropout\n", + "from keras.layers import LSTM\n", + "from keras.callbacks import ModelCheckpoint\n", + "from keras.utils import np_utils\n", + "\n", + "from time import gmtime, strftime\n", + "import os\n", + "import re\n", + "import pickle\n", + "import random\n", + "import sys" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "length of text: 18312\n", + "text preview: wherever i go these days, at home or abroad, people ask me the same question: what is happening in the american political system? how has a country that has benefitedperhaps more than any otherfrom immigration, trade and technological innovation suddenly developed a strain of anti-immigrant, anti-innovation protectionism? why have some on the far left and even more on the far right embraced a crude populism that promises a return to a past that is not possible to restoreand that, for most americ\n" + ] + } + ], + "source": [ + "# load ascii text from file\n", + "filename = \"data/obama.txt\"\n", + "raw_text = open(filename).read()\n", + "\n", + "# get rid of any characters other than letters, numbers, \n", + "# and a few special characters\n", + "raw_text = re.sub('[^\\nA-Za-z0-9 ,.:;?!-]+', '', raw_text)\n", + "\n", + "# convert all text to lowercase\n", + "raw_text = raw_text.lower()\n", + "\n", + "n_chars = len(raw_text)\n", + "print \"length of text:\", n_chars\n", + "print \"text preview:\", raw_text[:500]" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "number of unique characters found: 44\n", + "a - maps to -> 18\n", + "25 - maps to -> h\n" + ] + } + ], + "source": [ + "# extract all unique characters in the text\n", + "chars = sorted(list(set(raw_text)))\n", + "n_vocab = len(chars)\n", + "print \"number of unique characters found:\", n_vocab\n", + "\n", + "# create mapping of characters to integers and back\n", + "char_to_int = dict((c, i) for i, c in enumerate(chars))\n", + "int_to_char = dict((i, c) for i, c in enumerate(chars))\n", + "\n", + "# test our mapping\n", + "print 'a', \"- maps to ->\", char_to_int[\"a\"]\n", + "print 25, \"- maps to ->\", int_to_char[25]" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Total sequences: 18212\n" + ] + } + ], + "source": [ + "# prepare the dataset of input to output pairs encoded as integers\n", + "seq_length = 100\n", + "\n", + "inputs = []\n", + "outputs = []\n", + "\n", + "for i in range(0, n_chars - seq_length, 1):\n", + " inputs.append(raw_text[i:i + seq_length])\n", + " outputs.append(raw_text[i + seq_length])\n", + " \n", + "n_sequences = len(inputs)\n", + "print \"Total sequences: \", n_sequences" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "indeces = range(len(inputs))\n", + "random.shuffle(indeces)\n", + "\n", + "inputs = [inputs[x] for x in indeces]\n", + "outputs = [outputs[x] for x in indeces]" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "mericans are as a people. we dont begrudge success, we aspire to it and admire those who achieve it. --> \n" + ] + } + ], + "source": [ + "print inputs[0], \"-->\", outputs[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "X dims --> (18212, 100, 44)\n", + "y dims --> (18212, 44)\n" + ] + } + ], + "source": [ + "# create two empty numpy array with the proper dimensions\n", + "X = np.zeros((n_sequences, seq_length, n_vocab), dtype=np.bool)\n", + "y = np.zeros((n_sequences, n_vocab), dtype=np.bool)\n", + "\n", + "# iterate over the data and build up the X and y data sets\n", + "# by setting the appropriate indices to 1 in each one-hot vector\n", + "for i, example in enumerate(inputs):\n", + " for t, char in enumerate(example):\n", + " X[i, t, char_to_int[char]] = 1\n", + " y[i, char_to_int[outputs[i]]] = 1\n", + " \n", + "print 'X dims -->', X.shape\n", + "print 'y dims -->', y.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# define the LSTM model\n", + "model = Sequential()\n", + "model.add(LSTM(128, return_sequences=False, input_shape=(X.shape[1], X.shape[2])))\n", + "model.add(Dropout(0.50))\n", + "model.add(Dense(y.shape[1], activation='softmax'))\n", + "model.compile(loss='categorical_crossentropy', optimizer='adam')" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def sample(preds, temperature=1.0):\n", + " # helper function to sample an index from a probability array\n", + " preds = np.asarray(preds).astype('float64')\n", + " preds = np.log(preds) / temperature\n", + " exp_preds = np.exp(preds)\n", + " preds = exp_preds / np.sum(exp_preds)\n", + " probas = np.random.multinomial(1, preds, 1)\n", + " return np.argmax(probas)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def generate(sentence, prediction_length=50, diversity=0.35):\n", + " print '----- diversity:', diversity \n", + "\n", + " generated = sentence\n", + " sys.stdout.write(generated)\n", + "\n", + " # iterate over number of characters requested\n", + " for i in range(prediction_length):\n", + " \n", + " # build up sequence data from current sentence\n", + " x = np.zeros((1, X.shape[1], X.shape[2]))\n", + " for t, char in enumerate(sentence):\n", + " x[0, t, char_to_int[char]] = 1.\n", + "\n", + " # use trained model to return probability distribution\n", + " # for next character based on input sequence\n", + " preds = model.predict(x, verbose=0)[0]\n", + " \n", + " # use sample() function to sample next character \n", + " # based on probability distribution and desired diversity\n", + " next_index = sample(preds, diversity)\n", + " \n", + " # convert integer to character\n", + " next_char = int_to_char[next_index]\n", + "\n", + " # add new character to generated text\n", + " generated += next_char\n", + " \n", + " # delete the first character from beginning of sentance, \n", + " # and add new caracter to the end. This will form the \n", + " # input sequence for the next predicted character.\n", + " sentence = sentence[1:] + next_char\n", + "\n", + " # print results to screen\n", + " sys.stdout.write(next_char)\n", + " sys.stdout.flush()\n", + " print" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "filepath=\"-basic_LSTM.hdf5\"\n", + "checkpoint = ModelCheckpoint(filepath, monitor='loss', verbose=0, save_best_only=True, mode='min')\n", + "callbacks_list = [checkpoint]" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch: 1 / 50\n", + "Train on 14569 samples, validate on 3643 samples\n", + "Epoch 1/1\n", + "14569/14569 [==============================] - 55s - loss: 3.2278 - val_loss: 2.9687\n", + "----- generating with seed: rked by uncertainty and unease. so we have a choiceretreat into old, closed-off economies or press f\n", + "----- diversity: 0.5\n", + "rked by uncertainty and unease. so we have a choiceretreat into old, closed-off economies or press f i e sr rorn e rcienst t el reptetar e e areetr antn neasentt hwo r epe e os oi ai ti io t ttp\n", + "----- diversity: 1.2\n", + "rked by uncertainty and unease. so we have a choiceretreat into old, closed-off economies or press fzeeotretloe6na pu?jdyie\n", + "ukrtnsyeetslausyoauoheglr?anha tlim t edfo\n", + "enrwyft2cse\n", + "refwapb lertiigd r\n", + "oe\n", + "epoch: 2 / 50\n", + "Train on 14569 samples, validate on 3643 samples\n", + "Epoch 1/1\n", + "14569/14569 [==============================] - 52s - loss: 3.0249 - val_loss: 2.9253\n", + "----- generating with seed: enacted during my administration have increased the share of income received by all other families \n", + "----- diversity: 0.5\n", + " enacted during my administration have increased the share of income received by all other families teeoee ret iutea nth etee atreao re nheea sti e esg ero dtee tlt t ea elors idamh etse s a e\n", + "----- diversity: 1.2\n", + " enacted during my administration have increased the share of income received by all other families srb1rt.aeagtckrpro8 ltrg1dsnl;osay;i ooegtyniibydlrhdumiilarratpetcw.oaloxrueith kns t oslete ygoemg\n", + "epoch: 3 / 50\n", + "Train on 14569 samples, validate on 3643 samples\n", + "Epoch 1/1\n", + "14569/14569 [==============================] - 52s - loss: 2.9671 - val_loss: 2.8679\n", + "----- generating with seed: er the gains they have delivered in the past centuries.\n", + "\n", + "this paradox of progress and peril has been\n", + "----- diversity: 0.5\n", + "er the gains they have delivered in the past centuries.\n", + "\n", + "this paradox of progress and peril has beeni te nec eaie et brenteo sae1a e eht e eeeeo roocsetoneato t s ne ahea torr ewsho i ol eo raso\n", + "----- diversity: 1.2\n", + "er the gains they have delivered in the past centuries.\n", + "\n", + "this paradox of progress and peril has beenevfi9 owc -mw h ashsise n1tmpha saa eet ih oam tuirteman tm ce n8:e an 23hcoth1 \n", + "aoiioosmrlnnbbbt 6 \n", + "epoch: 4 / 50\n", + "Train on 14569 samples, validate on 3643 samples\n", + "Epoch 1/1\n", + "14569/14569 [==============================] - 53s - loss: 2.8775 - val_loss: 2.7553\n", + "----- generating with seed: en and women get equal pay for equal work would help to move us in the right direction too.\n", + "\n", + "\n", + "third,\n", + "----- diversity: 0.5\n", + "en and women get equal pay for equal work would help to move us in the right direction too.\n", + "\n", + "\n", + "third, noe ot are at me earsa ln om on rt ions a rit e ase a de e ist pt uraat owm to ian area t, rae \n", + "----- diversity: 1.2\n", + "en and women get equal pay for equal work would help to move us in the right direction too.\n", + "\n", + "\n", + "third,lihe,u;\n", + "imrangs locf.uosntl \n", + "imu vytl -tanon rrrxd-itraopa anttos ehiidee bleeha9y 0oepncgeans h g\n", + "epoch: 5 / 50\n", + "Train on 14569 samples, validate on 3643 samples\n", + "Epoch 1/1\n", + "14569/14569 [==============================] - 53s - loss: 2.7476 - val_loss: 2.6383\n", + "----- generating with seed: for increasing economic growth and for ensuring that it is shared broadly. these include everything\n", + "----- diversity: 0.5\n", + " for increasing economic growth and for ensuring that it is shared broadly. these include everything roas ieois ts ad eceres on ire nonlsrontthoci net ae ear is sane thon ogr se ate tness pa ndeln sma\n", + "----- diversity: 1.2\n", + " for increasing economic growth and for ensuring that it is shared broadly. these include everything cot. hoshiocagk nfuinonjt c fpks.tumf-an s dowh th a-c ateme slghrtes nticono are acooum, popsrodc \n", + "epoch: 6 / 50\n", + "Train on 14569 samples, validate on 3643 samples\n", + "Epoch 1/1\n", + "14569/14569 [==============================] - 52s - loss: 2.6565 - val_loss: 2.5568\n", + "----- generating with seed: rfrom immigration, trade and technological innovation suddenly developed a strain of anti-immigrant,\n", + "----- diversity: 0.5\n", + "rfrom immigration, trade and technological innovation suddenly developed a strain of anti-immigrant, tan eos sinte lo tal one th or prertis ns ooe otole ticd rote th the thes the tan ton toot toad \n", + "----- diversity: 1.2\n", + "rfrom immigration, trade and technological innovation suddenly developed a strain of anti-immigrant, ip \n", + "alirlneeiive hgabaelid is oocpogt see.\n", + "vhdit t,lon wntehtt fthpisd.v mnernp todpjcl ao mec\n", + "t,o\n", + "epoch: 7 / 50\n", + "Train on 14569 samples, validate on 3643 samples\n", + "Epoch 1/1\n", + "14569/14569 [==============================] - 53s - loss: 2.5712 - val_loss: 2.4891\n", + "----- generating with seed: all levelsat church, at their childrens schools, in civic organisations. thats why ceos took home ab\n", + "----- diversity: 0.5\n", + "all levelsat church, at their childrens schools, in civic organisations. thats why ceos took home abe the aud roret and ore or corn icase the an rore tar ane rere onit eine edith boom sinl the core th\n", + "----- diversity: 1.2\n", + "all levelsat church, at their childrens schools, in civic organisations. thats why ceos took home abhgeniceembiner 2l aveiterihaslaaiy cisilsim ih\n", + ":r,\n", + "e8ety ntig a rothe lby2f-sb4 orsu ri0amid\n", + "oeyr p\n", + "epoch: 8 / 50\n", + "Train on 14569 samples, validate on 3643 samples\n", + "Epoch 1/1\n", + "14569/14569 [==============================] - 53s - loss: 2.5185 - val_loss: 2.4395\n", + "----- generating with seed: om foreign competition, trade has helped our economy much more than it has hurt. exports helped lead\n", + "----- diversity: 0.5\n", + "om foreign competition, trade has helped our economy much more than it has hurt. exports helped lead il the then and or tor cate ane wtat the the the thals the sor ing thereo the the thas the tha fhel\n", + "----- diversity: 1.2\n", + "om foreign competition, trade has helped our economy much more than it has hurt. exports helped leads ?dijniaicescancothi taen sing\n", + "h afdrilsorbsutulg paptbomig unraffansedd osn aow boissr gore latoho\n", + "epoch: 9 / 50\n", + "Train on 14569 samples, validate on 3643 samples\n", + "Epoch 1/1\n", + "14569/14569 [==============================] - 53s - loss: 2.4773 - val_loss: 2.3997\n", + "----- generating with seed: ferent set of rules to ordinary citizens.\n", + "\n", + "so its no wonder that so many are receptive to the argume\n", + "----- diversity: 0.5\n", + "ferent set of rules to ordinary citizens.\n", + "\n", + "so its no wonder that so many are receptive to the argumein the the afince the moristing the the ling on the re sher ans ane the pored ans dorusning ther te \n", + "----- diversity: 1.2\n", + "ferent set of rules to ordinary citizens.\n", + "\n", + "so its no wonder that so many are receptive to the argumeed detmogky,ras, ffthres c2mc8tuti1dy th.teulwlnon ruurlnxlons sfetcoxre fad yoanehyef r8 wojdu\n", + "ciut\n", + "epoch: 10 / 50\n", + "Train on 14569 samples, validate on 3643 samples\n", + "Epoch 1/1\n", + "14569/14569 [==============================] - 52s - loss: 2.4460 - val_loss: 2.3661\n", + "----- generating with seed: op 1 of american families received 7 of all after-tax income. by 2007, that share had more than doub\n", + "----- diversity: 0.5\n", + "op 1 of american families received 7 of all after-tax income. by 2007, that share had more than doub pore sind of erer intacl in wores an or imeritin and boour re te the me and wonte ingase the at ore\n", + "----- diversity: 1.2\n", + "op 1 of american families received 7 of all after-tax income. by 2007, that share had more than doubritiyeinntaalzeus hoond inh vacil hharer soreop yemfit angeqg hverecotc7ssune ahiosd or?i anycinitf2\n", + "epoch: 11 / 50\n", + "Train on 14569 samples, validate on 3643 samples\n", + "Epoch 1/1\n", + "14569/14569 [==============================] - 52s - loss: 2.4095 - val_loss: 2.3413\n", + "----- generating with seed: the pastthe alien and sedition acts of 1798, the know-nothings of the mid-1800s, the anti-asian sent\n", + "----- diversity: 0.5\n", + "the pastthe alien and sedition acts of 1798, the know-nothings of the mid-1800s, the anti-asian senthe me ropadly hes the ao cheont to tore of reres the on the incale the pot shes the t and on fom or \n", + "----- diversity: 1.2\n", + "the pastthe alien and sedition acts of 1798, the know-nothings of the mid-1800s, the anti-asian sentt baass soretqo4.t,uy cocamyamax webs-attokor it an cevibrt ion andell, wisisny w. watl onwawn,isis,\n", + "epoch: 12 / 50\n", + "Train on 14569 samples, validate on 3643 samples\n", + "Epoch 1/1\n", + "14569/14569 [==============================] - 52s - loss: 2.3766 - val_loss: 2.3089\n", + "----- generating with seed: for each commonsense measure expended substantial energy. i did not get some of the expansions i sou\n", + "----- diversity: 0.5\n", + "for each commonsense measure expended substantial energy. i did not get some of the expansions i sour ins the anese the the nove the thes ore an ins inile the icrane un on and the derotion the seswin\n", + "----- diversity: 1.2\n", + "for each commonsense measure expended substantial energy. i did not get some of the expansions i souas, fotf o ingvesedt cortu?; ela.iiba ovariinty bhe orimeas. impauldh s beesse-nfur fucistcon th ho\n", + "epoch: 13 / 50\n", + "Train on 14569 samples, validate on 3643 samples\n", + "Epoch 1/1\n", + "14569/14569 [==============================] - 52s - loss: 2.3540 - val_loss: 2.2894\n", + "----- generating with seed: ngress to pass the trans-pacific partnership and to conclude a transatlantic trade and investment pa\n", + "----- diversity: 0.5\n", + "ngress to pass the trans-pacific partnership and to conclude a transatlantic trade and investment pantine the in nant an cantieg the pave tes or the an the wore for of and an fore cuind tian core son \n", + "----- diversity: 1.2\n", + "ngress to pass the trans-pacific partnership and to conclude a transatlantic trade and investment pam secba, shin fcaln woemot co ene thdca linpwde far mite bi9g be0anss cy porest ovxilo2ep\n", + "al aas 1re\n", + "epoch: 14 / 50\n", + "Train on 14569 samples, validate on 3643 samples\n", + "Epoch 1/1\n", + "14569/14569 [==============================] - 52s - loss: 2.3272 - val_loss: 2.2733\n", + "----- generating with seed: fiscal stimulus than even president roosevelts new deal and oversaw the most comprehensive rewriting\n", + "----- diversity: 0.5\n", + "fiscal stimulus than even president roosevelts new deal and oversaw the most comprehensive rewriting the and in the ware and the are faring the thale whe prengre this cealitit an the ale and the ore \n", + "----- diversity: 1.2\n", + "fiscal stimulus than even president roosevelts new deal and oversaw the most comprehensive rewritingr. daprarichl lge w9rebkoms. uto hove co; censis. trorino-gores ;meejyy alde. ineite asore an -thii\n", + "epoch: 15 / 50\n", + "Train on 14569 samples, validate on 3643 samples\n", + "Epoch 1/1\n", + "14569/14569 [==============================] - 52s - loss: 2.3033 - val_loss: 2.2505\n", + "----- generating with seed: prove our own station and watch our children do even better.\n", + "\n", + "as abraham lincoln said, while we do n\n", + "----- diversity: 0.5\n", + "prove our own station and watch our children do even better.\n", + "\n", + "as abraham lincoln said, while we do nertitt cints and werverdes on mere the the bereling the imesd butiss the gerserade the ing to the an\n", + "----- diversity: 1.2\n", + "prove our own station and watch our children do even better.\n", + "\n", + "as abraham lincoln said, while we do nccjald cotren ydy fbosing,sitersac rog jloty .iady sinor. cyoventdystpremope toribfog fmive pay ?hes\n", + "epoch: 16 / 50\n", + "Train on 14569 samples, validate on 3643 samples\n", + "Epoch 1/1\n", + "14569/14569 [==============================] - 52s - loss: 2.2713 - val_loss: 2.2384\n", + "----- generating with seed: n with all the progress, segments of the shadow banking system still present vulnerabilities and the\n", + "----- diversity: 0.5\n", + "n with all the progress, segments of the shadow banking system still present vulnerabilities and the patle the panition the toupres on ar ane thas the eoprest an the amero s one res ote cale pate pore\n", + "----- diversity: 1.2\n", + "n with all the progress, segments of the shadow banking system still present vulnerabilities and theerdipgl\n", + "nossicom we. jod cat chace cysuot the lhen-, rujuny the foulfwocdedad idetomee protaugbekant\n", + "epoch: 17 / 50\n", + "Train on 14569 samples, validate on 3643 samples\n", + "Epoch 1/1\n", + "14569/14569 [==============================] - 53s - loss: 2.2546 - val_loss: 2.2115\n", + "----- generating with seed: the 1970s. these gains would have been impossible without the globalisation and technological trans\n", + "----- diversity: 0.5\n", + " the 1970s. these gains would have been impossible without the globalisation and technological transe the pare an tore rest on reas for bo thee burion th the ererees in ore sing the gored bus bere in \n", + "----- diversity: 1.2\n", + " the 1970s. these gains would have been impossible without the globalisation and technological transhe praore toe narceniin angatitistpros trex xrael 1mti-inor ceosnasnos ameregav afrese pore whon th\n", + "epoch: 18 / 50\n", + "Train on 14569 samples, validate on 3643 samples\n", + "Epoch 1/1\n", + "14569/14569 [==============================] - 52s - loss: 2.2340 - val_loss: 2.2032\n", + "----- generating with seed: d measured productivity growth. over the past decade, america has enjoyed the fastest productivity g\n", + "----- diversity: 0.5\n", + "d measured productivity growth. over the past decade, america has enjoyed the fastest productivity galing rhast in the pesticing the the the wate the coneslt on mon enet ond and the the the ta the the\n", + "----- diversity: 1.2\n", + "d measured productivity growth. over the past decade, america has enjoyed the fastest productivity ger int,e-isidissces d emkesy wthe asdhetheis thatiin of eydasly ?ep5lbcprgve at iinapto epuxsesf 2 f\n", + "epoch: 19 / 50\n", + "Train on 14569 samples, validate on 3643 samples\n", + "Epoch 1/1\n", + "14569/14569 [==============================] - 53s - loss: 2.2112 - val_loss: 2.1878\n", + "----- generating with seed: ears should also give the world some measure of hope. despite all manner of division and discord, a \n", + "----- diversity: 0.5\n", + "ears should also give the world some measure of hope. despite all manner of division and discord, a the choste the erante propored in the for cencatiling sestore an are and and alt ann id and thit the\n", + "----- diversity: 1.2\n", + "ears should also give the world some measure of hope. despite all manner of division and discord, a 2qcandest, taon wor ongem tos res 2re dlreno4e, fikheuttofol renare5s roved tming ey nongit nep tuv\n", + "epoch: 20 / 50\n", + "Train on 14569 samples, validate on 3643 samples\n", + "Epoch 1/1\n", + "14569/14569 [==============================] - 53s - loss: 2.1937 - val_loss: 2.1707\n", + "----- generating with seed: economy, one that grows sustainably without plundering the future at the service of the present. th\n", + "----- diversity: 0.5\n", + " economy, one that grows sustainably without plundering the future at the service of the present. thare as the andenting the recand be ace the thy the en ald enaly the of the wer ande so and of the to\n", + "----- diversity: 1.2\n", + " economy, one that grows sustainably without plundering the future at the service of the present. th allde er, deblrs ankin shamp gpngo besiltssscof anmery arat aep foncica cuwxon il thove ulod trowt \n", + "epoch: 21 / 50\n", + "Train on 14569 samples, validate on 3643 samples\n", + "Epoch 1/1\n", + "14569/14569 [==============================] - 51s - loss: 2.1640 - val_loss: 2.1599\n", + "----- generating with seed: issions by 6, even as our economy has grown by 11 see chart 4. progress in america also helped catal\n", + "----- diversity: 0.5\n", + "issions by 6, even as our economy has grown by 11 see chart 4. progress in america also helped cataly the sane por for in in reans in acerige th american the the werating the pot dest and the sest the\n", + "----- diversity: 1.2\n", + "issions by 6, even as our economy has grown by 11 see chart 4. progress in america also helped catals woudrove and bitilthand ffurnit laveyyso, to meng pramly ba icilacessre7 tuaneid c stole nof roy t\n", + "epoch: 22 / 50\n", + "Train on 14569 samples, validate on 3643 samples\n", + "Epoch 1/1\n", + "14569/14569 [==============================] - 52s - loss: 2.1506 - val_loss: 2.1466\n", + "----- generating with seed: anifested in scepticism towards international institutions, trade agreements and immigration. it can\n", + "----- diversity: 0.5\n", + "anifested in scepticism towards international institutions, trade agreements and immigration. it cant des in 19s pans ane cat ind aes ande lore sors all in or tha and and forlt and in one the the shat\n", + "----- diversity: 1.2\n", + "anifested in scepticism towards international institutions, trade agreements and immigration. it cannl-ubidslys hcoytormt airisgasisg tieprcibllming ro7alsaod or eroustering, inhonton honder idprivel\n", + "epoch: 23 / 50\n", + "Train on 14569 samples, validate on 3643 samples\n", + "Epoch 1/1\n", + "14569/14569 [==============================] - 53s - loss: 2.1294 - val_loss: 2.1392\n", + "----- generating with seed: the american political system? how has a country that has benefitedperhaps more than any otherfrom i\n", + "----- diversity: 0.5\n", + "the american political system? how has a country that has benefitedperhaps more than any otherfrom indation fersing buthal gof tho ee in more then wo the sereg are fronger ficl in er an rives to more \n", + "----- diversity: 1.2\n", + "the american political system? how has a country that has benefitedperhaps more than any otherfrom if lity cost wre0e avd fof cevatuing prow-em le. tuorsimars me and oam regressps coporyy 2o;. ract in\n", + "epoch: 24 / 50\n", + "Train on 14569 samples, validate on 3643 samples\n", + "Epoch 1/1\n", + "14569/14569 [==============================] - 52s - loss: 2.1188 - val_loss: 2.1281\n", + "----- generating with seed: banks, less reliance on short-term funding, and better oversight for a range of institutions and mar\n", + "----- diversity: 0.5\n", + "banks, less reliance on short-term funding, and better oversight for a range of institutions and mare tor the al the lold the the the the the the the tor sore the ande of the rofor in conste of the pe\n", + "----- diversity: 1.2\n", + "banks, less reliance on short-term funding, and better oversight for a range of institutions and mare\n", + "\n", + "hishicystnoggatrenme0. uth anenn vetrey theue rons. whonge-chap pithon m ol tilg madom: tours ben\n", + "epoch: 25 / 50\n", + "Train on 14569 samples, validate on 3643 samples\n", + "Epoch 1/1\n", + "14569/14569 [==============================] - 53s - loss: 2.0914 - val_loss: 2.1257\n", + "----- generating with seed: ham lincoln said, while we do not propose any war upon capital, we do wish to allow the humblest man\n", + "----- diversity: 0.5\n", + "ham lincoln said, while we do not propose any war upon capital, we do wish to allow the humblest mane the andicis se the the for fures entreg the and und by the antaly ald conccution the partimise in \n", + "----- diversity: 1.2\n", + "ham lincoln said, while we do not propose any war upon capital, we do wish to allow the humblest mant of 17, euclyhari di-h, coub-imir srting fusm drmsiln.w\n", + "hs xcicantoing the susasdserse sverwtat. b\n", + "epoch: 26 / 50\n", + "Train on 14569 samples, validate on 3643 samples\n", + "Epoch 1/1\n", + "14569/14569 [==============================] - 53s - loss: 2.0732 - val_loss: 2.1089\n", + "----- generating with seed: formation that drives some of the anxiety behind our current political debate.\n", + "\n", + "this is the paradox \n", + "----- diversity: 0.5\n", + "formation that drives some of the anxiety behind our current political debate.\n", + "\n", + "this is the paradox are reanden y ald and elithes of the wold and anericas sore the prominitisination sice not or eroste\n", + "----- diversity: 1.2\n", + "formation that drives some of the anxiety behind our current political debate.\n", + "\n", + "this is the paradox prtwsrbens tap oa dey the ty iverficotbaly atith is whit rasys lowel fernderuts ond metehandes foul\n", + "epoch: 27 / 50\n", + "Train on 14569 samples, validate on 3643 samples\n", + "Epoch 1/1\n", + "14569/14569 [==============================] - 55s - loss: 2.0589 - val_loss: 2.1065\n", + "----- generating with seed: come distribution by 18 by 2017, while raising the average tax rates on households projected to earn\n", + "----- diversity: 0.5\n", + "come distribution by 18 by 2017, while raising the average tax rates on households projected to earne ar in the were and porteres and that the gat enorce ported and urtaly roticn to and the sounde the\n", + "----- diversity: 1.2\n", + "come distribution by 18 by 2017, while raising the average tax rates on households projected to earnes ic pislyineslted tiof. ts ohitaragy sromof fale thesf 9ret-econo lo. pith hehramissshut shuhicuan\n", + "epoch: 28 / 50\n", + "Train on 14569 samples, validate on 3643 samples\n", + "Epoch 1/1\n", + "14569/14569 [==============================] - 55s - loss: 2.0460 - val_loss: 2.1004\n", + "----- generating with seed: ns, trade agreements and immigration. it can be seen in britains recent vote to leave the european u\n", + "----- diversity: 0.5\n", + "ns, trade agreements and immigration. it can be seen in britains recent vote to leave the european und enore to by heve the andene panded the and bostent on the ale and the and the parting co wh the t\n", + "----- diversity: 1.2\n", + "ns, trade agreements and immigration. it can be seen in britains recent vote to leave the european un oud abpianlity fo-li ppesssing ath uppplini g parting ar, thean thoin cisstavense. led poy dopll h\n", + "epoch: 29 / 50\n", + "Train on 14569 samples, validate on 3643 samples\n", + "Epoch 1/1\n", + "14569/14569 [==============================] - 55s - loss: 2.0286 - val_loss: 2.0968\n", + "----- generating with seed: ve long recognised that markets, left to their own devices, can fail. this can happen through the te\n", + "----- diversity: 0.5\n", + "ve long recognised that markets, left to their own devices, can fail. this can happen through the teresty pronte ins are tho patenore the forcal of the and botithat oun moro we cheas reand were ans in\n", + "----- diversity: 1.2\n", + "ve long recognised that markets, left to their own devices, can fail. this can happen through the tea cy bopi-pefitiog anehinesnange luve deonco yowo sorade forbtes tosphr jagen to bits shoututho ce w\n", + "epoch: 30 / 50\n", + "Train on 14569 samples, validate on 3643 samples\n", + "Epoch 1/1\n", + "14569/14569 [==============================] - 56s - loss: 2.0026 - val_loss: 2.0903\n", + "----- generating with seed: ored the need for a more resilient economy, one that grows sustainably without plundering the future\n", + "----- diversity: 0.5\n", + "ored the need for a more resilient economy, one that grows sustainably without plundering the future be to and anderase for hes in or arcitiring beoned mering nar epore so the workere the in and batio\n", + "----- diversity: 1.2\n", + "ored the need for a more resilient economy, one that grows sustainably without plundering the future to toutity thos yhraperhusd toy toae ol omimkradien. fhes chasmhreed pifr biukes on aliqgunt. tas w\n", + "epoch: 31 / 50\n", + "Train on 14569 samples, validate on 3643 samples\n", + "Epoch 1/1\n", + "14569/14569 [==============================] - 57s - loss: 1.9789 - val_loss: 2.0835\n", + "----- generating with seed: t energy-sector emissions by 6, even as our economy has grown by 11 see chart 4. progress in america\n", + "----- diversity: 0.5\n", + "t energy-sector emissions by 6, even as our economy has grown by 11 see chart 4. progress in americas for whal anders condmed the tas bures the aldes the pante in insioliss ic onatice worker for bupar\n", + "----- diversity: 1.2\n", + "t energy-sector emissions by 6, even as our economy has grown by 11 see chart 4. progress in america reasm. ivmegtabibace howdreg parteretifon murcenermes . wo 8rati grothat y ensounesive to herd pand\n", + "epoch: 32 / 50\n", + "Train on 14569 samples, validate on 3643 samples\n", + "Epoch 1/1\n", + "14569/14569 [==============================] - 58s - loss: 1.9704 - val_loss: 2.0749\n", + "----- generating with seed: d by self-imposed constraints: an anti-tax ideology that rejects virtually all sources of new public\n", + "----- diversity: 0.5\n", + "d by self-imposed constraints: an anti-tax ideology that rejects virtually all sources of new publice for the rours the the tor sarie tha seconom the fos rote in the ale ans im ant antimation ald ol o\n", + "----- diversity: 1.2\n", + "d by self-imposed constraints: an anti-tax ideology that rejects virtually all sources of new publicn, mestye sot, dedmeas, chsthen fow and onothe teanbus thot proittrkests-temy anies bontidy badle an\n", + "epoch: 33 / 50\n", + "Train on 14569 samples, validate on 3643 samples\n", + "Epoch 1/1\n", + "14569/14569 [==============================] - 58s - loss: 1.9447 - val_loss: 2.0860\n", + "----- generating with seed: cluding more capital for american banks, less reliance on short-term funding, and better oversight f\n", + "----- diversity: 0.5\n", + "cluding more capital for american banks, less reliance on short-term funding, and better oversight former that werkent tho lof al the for ex ines an thir and wing rome in the patition on the tor merar\n", + "----- diversity: 1.2\n", + "cluding more capital for american banks, less reliance on short-term funding, and better oversight fricimy gerpact the mexputlet ones tofe. ce-ligit uconhat dewqre-trebssourme to brees bys 25y on allj\n", + "epoch: 34 / 50\n", + "Train on 14569 samples, validate on 3643 samples\n", + "Epoch 1/1\n", + "14569/14569 [==============================] - 59s - loss: 1.9359 - val_loss: 2.0954\n", + "----- generating with seed: an be a powerful force for the common good, driving businesses to create products that consumers rav\n", + "----- diversity: 0.5\n", + "an be a powerful force for the common good, driving businesses to create products that consumers rave inenst bereve portica sast and merist and enot hehile workent and aminising anden gee domes of whe\n", + "----- diversity: 1.2\n", + "an be a powerful force for the common good, driving businesses to create products that consumers raved ofowthris the putpde seccbost bgakt parlofer can oimerghe conovsed b8inde of ald if bubtes bodsin\n", + "epoch: 35 / 50\n", + "Train on 14569 samples, validate on 3643 samples\n", + "Epoch 1/1\n", + "14569/14569 [==============================] - 61s - loss: 1.9087 - val_loss: 2.0781\n", + "----- generating with seed: uality that can come with globalisation while committing ourselves to making the global economy work\n", + "----- diversity: 0.5\n", + "uality that can come with globalisation while committing ourselves to making the global economy work worke pore pariting eassing the omering the the rageren tho ghing persing this that biss for the pa\n", + "----- diversity: 1.2\n", + "uality that can come with globalisation while committing ourselves to making the global economy workq alsedyd mong andequility. mh smance fot fher burtewplud onsing owo. the-eupivsto aps to1 pipldriac\n", + "epoch: 36 / 50\n", + "Train on 14569 samples, validate on 3643 samples\n", + "Epoch 1/1\n", + "14569/14569 [==============================] - 61s - loss: 1.8858 - val_loss: 2.0713\n", + "----- generating with seed: ty. it is related to a devastating rise of opioid abuse and an associated increase in overdose death\n", + "----- diversity: 0.5\n", + "ty. it is related to a devastating rise of opioid abuse and an associated increase in overdose deather the ang omentorested more s ond canler of the the paptiin and anger and by the parting in ant ond\n", + "----- diversity: 1.2\n", + "ty. it is related to a devastating rise of opioid abuse and an associated increase in overdose deathen dexgefily to ed inpore thaty th adoquice. ais has in eaclot er, seve reastonaris. resenad -zen ch\n", + "epoch: 37 / 50\n", + "Train on 14569 samples, validate on 3643 samples\n", + "Epoch 1/1\n", + "14569/14569 [==============================] - 60s - loss: 1.8757 - val_loss: 2.0749\n", + "----- generating with seed: past eight years should also give the world some measure of hope. despite all manner of division and\n", + "----- diversity: 0.5\n", + "past eight years should also give the world some measure of hope. despite all manner of division and the andens for mane parding the tor tor ane thir and casing the and wing that tha ing mene cans and\n", + "----- diversity: 1.2\n", + "past eight years should also give the world some measure of hope. despite all manner of division and robolien, 2ve-formicimansthelf comrstar-are-carr tice, ual of, mimidestoumes. .xoflace mens tuad on\n", + "epoch: 38 / 50\n", + "Train on 14569 samples, validate on 3643 samples\n", + "Epoch 1/1\n", + "14569/14569 [==============================] - 62s - loss: 1.8617 - val_loss: 2.0815\n", + "----- generating with seed: ate agreement, which presents the best opportunity to save the planet for future generations.\n", + "\n", + "a hop\n", + "----- diversity: 0.5\n", + "ate agreement, which presents the best opportunity to save the planet for future generations.\n", + "\n", + "a hople the partedis if aring crimiliga bout come the tore to hered arkert the thas the forte and the sin\n", + "----- diversity: 1.2\n", + "ate agreement, which presents the best opportunity to save the planet for future generations.\n", + "\n", + "a hopctreng wes andrewsinn, but engecyneo sithtcorleeg awd oflthe calm groasmringucc thewlwchraly micinve\n", + "epoch: 39 / 50\n", + "Train on 14569 samples, validate on 3643 samples\n", + "Epoch 1/1\n", + "14569/14569 [==============================] - 61s - loss: 1.8457 - val_loss: 2.0784\n", + "----- generating with seed: for low- and middle-income families. globalisation and automation have weakened the position of wor\n", + "----- diversity: 0.5\n", + " for low- and middle-income families. globalisation and automation have weakened the position of workers al caminating and ad inventimans for andericisstincalle and butadest roves more and wore and re\n", + "----- diversity: 1.2\n", + " for low- and middle-income families. globalisation and automation have weakened the position of woreastins. motiem tu ins. un 293-gfemnle th elalise evenlporalins roflinfzng umince of luliby bets dnk\n", + "epoch: 40 / 50\n", + "Train on 14569 samples, validate on 3643 samples\n", + "Epoch 1/1\n", + "14569/14569 [==============================] - 61s - loss: 1.8255 - val_loss: 2.0843\n", + "----- generating with seed: rms during this business cycle than in any since the 1970s. these gains would have been impossible w\n", + "----- diversity: 0.5\n", + "rms during this business cycle than in any since the 1970s. these gains would have been impossible with hes the ress ard in ald recensting the ports and an the prodees and the mored and ander fiver se\n", + "----- diversity: 1.2\n", + "rms during this business cycle than in any since the 1970s. these gains would have been impossible woy wepre mers al renating onomutering e horse, an ercomendimithat, prosi-uslidy shsthel. ymake. th-a\n", + "epoch: 41 / 50\n", + "Train on 14569 samples, validate on 3643 samples\n", + "Epoch 1/1\n", + "14569/14569 [==============================] - 59s - loss: 1.8108 - val_loss: 2.0700\n", + "----- generating with seed: devastating rise of opioid abuse and an associated increase in overdose deaths and suicides among no\n", + "----- diversity: 0.5\n", + "devastating rise of opioid abuse and an associated increase in overdose deaths and suicides among not omens in rusing and in even te har if cor ance lore. wo jec prealing the praticins the we worke mo\n", + "----- diversity: 1.2\n", + "devastating rise of opioid abuse and an associated increase in overdose deaths and suicides among norice8 towe lho- ant ast.\n", + "\n", + "ain azis chhead on iverisiss piramimiif and ghab omporigio .\n", + "blo.\n", + "\n", + "8f nor \n", + "epoch: 42 / 50\n", + "Train on 14569 samples, validate on 3643 samples\n", + "Epoch 1/1\n", + "14569/14569 [==============================] - 58s - loss: 1.7928 - val_loss: 2.0722\n", + "----- generating with seed: ome households, preventing colleges from pricing out hardworking students, and ensuring men and wome\n", + "----- diversity: 0.5\n", + "ome households, preventing colleges from pricing out hardworking students, and ensuring men and wome erentored sest the some thas domens and the the to innested contreestor side to the tor gas the for\n", + "----- diversity: 1.2\n", + "ome households, preventing colleges from pricing out hardworking students, and ensuring men and wome ;oratsebrove foa cont oy rage-ratee l.waycs bite, iveresl whos halve beobse sof ehaned merkati-gat:\n", + "epoch: 43 / 50\n", + "Train on 14569 samples, validate on 3643 samples\n", + "Epoch 1/1\n", + "14569/14569 [==============================] - 58s - loss: 1.7693 - val_loss: 2.0830\n", + "----- generating with seed: est income gains on record and the poverty rate fell faster than at any point since the 1960s. wages\n", + "----- diversity: 0.5\n", + "est income gains on record and the poverty rate fell faster than at any point since the 1960s. wages ane for of economicat intinasithat conte ment e on more ecoromicad and consimes in prestere to mork\n", + "----- diversity: 1.2\n", + "est income gains on record and the poverty rate fell faster than at any point since the 1960s. wages a y-onr, shraspathe crase-mem diats in cannuemars the rhat fonsimantentuhef als in papition imiscit\n", + "epoch: 44 / 50\n", + "Train on 14569 samples, validate on 3643 samples\n", + "Epoch 1/1\n", + "14569/14569 [==============================] - 59s - loss: 1.7596 - val_loss: 2.0803\n", + "----- generating with seed: 3, stabilising the participation rate but not reversing the longer-term adverse trend.\n", + "\n", + "involuntary \n", + "----- diversity: 0.5\n", + "3, stabilising the participation rate but not reversing the longer-term adverse trend.\n", + "\n", + "involuntary shale enot the we luritiom that proves teant in al of the proste in ruced and poremition soce more f\n", + "----- diversity: 1.2\n", + "3, stabilising the participation rate but not reversing the longer-term adverse trend.\n", + "\n", + "involuntary falce polticg mreselinesquiprandd, fpricimid fiad morieg ubpeapawt, aclesingscimerme afpreu-ite to m\n", + "epoch: 45 / 50\n", + "Train on 14569 samples, validate on 3643 samples\n", + "Epoch 1/1\n", + "14569/14569 [==============================] - 59s - loss: 1.7369 - val_loss: 2.0925\n", + "----- generating with seed: bipartisan ideas like bridge and airport upgrades are nonstarters.\n", + "\n", + "we could also help private inves\n", + "----- diversity: 0.5\n", + "bipartisan ideas like bridge and airport upgrades are nonstarters.\n", + "\n", + "we could also help private investemson datising the for and reating thag of not shit dening the proste to growth to the to and parti\n", + "----- diversity: 1.2\n", + "bipartisan ideas like bridge and airport upgrades are nonstarters.\n", + "\n", + "we could also help private invesomreme canss.\n", + "\n", + "adling nofbut ta6 berucaly foprevinstling und thes rarned.uurs, praduring phritingqpa\n", + "epoch: 46 / 50\n", + "Train on 14569 samples, validate on 3643 samples\n", + "Epoch 1/1\n", + "14569/14569 [==============================] - 58s - loss: 1.7224 - val_loss: 2.0764\n", + "----- generating with seed: s, artificial intelligence, robotics, advanced materials, improvements in energy efficiency and pers\n", + "----- diversity: 0.5\n", + "s, artificial intelligence, robotics, advanced materials, improvements in energy efficiency and perseer es to sepres for enore cons but detites some the workdos cendenat economy chost ard secines and \n", + "----- diversity: 1.2\n", + "s, artificial intelligence, robotics, advanced materials, improvements in energy efficiency and persiouutatpy,stagtist fom intrectimyricl firepise mane anc pforang-ford sacomuchald, for cabsiom chaste\n", + "epoch: 47 / 50\n", + "Train on 14569 samples, validate on 3643 samples\n", + "Epoch 1/1\n", + "14569/14569 [==============================] - 58s - loss: 1.7071 - val_loss: 2.0908\n", + "----- generating with seed: sed medicine. but while these innovations have changed lives, they have not yet substantially booste\n", + "----- diversity: 0.5\n", + "sed medicine. but while these innovations have changed lives, they have not yet substantially boosted nes to thare for the forle the worke to whuld al betully sese thal and and purition and chilles so\n", + "----- diversity: 1.2\n", + "sed medicine. but while these innovations have changed lives, they have not yet substantially boosten, and gisenent wauts col-anito mire is no? bed utd it herelep coppast as topold geherecemtioin ics \n", + "epoch: 48 / 50\n", + "Train on 14569 samples, validate on 3643 samples\n", + "Epoch 1/1\n", + "14569/14569 [==============================] - 59s - loss: 1.6949 - val_loss: 2.0989\n", + "----- generating with seed: n an equal chance to get rich with everybody else. thats the problem with increased inequalityit dim\n", + "----- diversity: 0.5\n", + "n an equal chance to get rich with everybody else. thats the problem with increased inequalityit diminitical sone mos ares con amerece that be tar inghel dinget hes job thar propreding sichal erofom t\n", + "----- diversity: 1.2\n", + "n an equal chance to get rich with everybody else. thats the problem with increased inequalityit dimithlit atqligas,-rimkeal s ore cme ty 2. forgebilo dorat hans. lo kerke thap on puston, s, the axpra\n", + "epoch: 49 / 50\n", + "Train on 14569 samples, validate on 3643 samples\n", + "Epoch 1/1\n", + "14569/14569 [==============================] - 60s - loss: 1.6673 - val_loss: 2.0970\n", + "----- generating with seed: g a resilient economy thats primed for future growth.\n", + "\n", + "restoring economic dynamism\n", + "\n", + "first, in recent\n", + "----- diversity: 0.5\n", + "g a resilient economy thats primed for future growth.\n", + "\n", + "restoring economic dynamism\n", + "\n", + "first, in recentican and to eaner in 197 sistiming and tomerses res to ealy emonomy and regenticas the wtha icanes i\n", + "----- diversity: 1.2\n", + "g a resilient economy thats primed for future growth.\n", + "\n", + "restoring economic dynamism\n", + "\n", + "first, in recenty olf livestumetimasitions, slica ansione and satio s aprunct the lof ondenligta, inpelesinan jos om\n", + "epoch: 50 / 50\n", + "Train on 14569 samples, validate on 3643 samples\n", + "Epoch 1/1\n", + "14569/14569 [==============================] - 58s - loss: 1.6687 - val_loss: 2.0874\n", + "----- generating with seed: nce of who americans are as a people. we dont begrudge success, we aspire to it and admire those who\n", + "----- diversity: 0.5\n", + "nce of who americans are as a people. we dont begrudge success, we aspire to it and admire those who deversene the werd for engrectant hes predsing the reares so work rout ho nderes and merite in noun\n", + "----- diversity: 1.2\n", + "nce of who americans are as a people. we dont begrudge success, we aspire to it and admire those who heald \n", + "eos mors. wtrehped amelofautimpristasis chin eno we le do porrtignodw exprasth un mues om on\n" + ] + } + ], + "source": [ + "epochs = 50\n", + "prediction_length = 100\n", + "\n", + "for iteration in range(epochs):\n", + " \n", + " print 'epoch:', iteration + 1, '/', epochs\n", + " model.fit(X, y, validation_split=0.2, batch_size=256, nb_epoch=1, callbacks=callbacks_list)\n", + " \n", + " # get random starting point for seed\n", + " start_index = random.randint(0, len(raw_text) - seq_length - 1)\n", + " # extract seed sequence from raw text\n", + " seed = raw_text[start_index: start_index + seq_length]\n", + " \n", + " print '----- generating with seed:', seed\n", + " \n", + " for diversity in [0.5, 1.2]:\n", + " generate(seed, prediction_length, diversity)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saved data to -basic_data.pickle\n", + "Compressed pickle size: 80934860\n" + ] + } + ], + "source": [ + "pickle_file = '-basic_data.pickle'\n", + "\n", + "try:\n", + " f = open(pickle_file, 'wb')\n", + " save = {\n", + " 'X': X,\n", + " 'y': y,\n", + " 'int_to_char': int_to_char,\n", + " 'char_to_int': char_to_int,\n", + " }\n", + " pickle.dump(save, f, pickle.HIGHEST_PROTOCOL)\n", + " f.close()\n", + "except Exception as e:\n", + " print 'Unable to save data to', pickle_file, ':', e\n", + " raise\n", + " \n", + "statinfo = os.stat(pickle_file)\n", + "print 'Saved data to', pickle_file\n", + "print 'Compressed pickle size:', statinfo.st_size" + ] + } + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Python [default]", + "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.12" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/notebooks/week-6/Week6-2 sw3036.ipynb b/notebooks/week-6/Week6-2 sw3036.ipynb new file mode 100644 index 0000000..40d78b2 --- /dev/null +++ b/notebooks/week-6/Week6-2 sw3036.ipynb @@ -0,0 +1,187 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Using TensorFlow backend.\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "from keras.models import Sequential\n", + "from keras.layers import Dense\n", + "from keras.layers import Dropout\n", + "from keras.layers import LSTM\n", + "from keras.callbacks import ModelCheckpoint\n", + "from keras.utils import np_utils\n", + "\n", + "import sys\n", + "import re\n", + "import pickle" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "('Training set', (18212, 100, 44), (18212, 44))\n" + ] + } + ], + "source": [ + "pickle_file = '-basic_data.pickle'\n", + "\n", + "with open(pickle_file, 'rb') as f:\n", + " save = pickle.load(f)\n", + " X = save['X']\n", + " y = save['y']\n", + " char_to_int = save['char_to_int'] \n", + " int_to_char = save['int_to_char'] \n", + " del save # hint to help gc free up memory\n", + " print('Training set', X.shape, y.shape)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# define the LSTM model\n", + "model = Sequential()\n", + "model.add(LSTM(128, return_sequences=False, input_shape=(X.shape[1], X.shape[2])))\n", + "# model.add(Dropout(0.50))\n", + "model.add(Dense(y.shape[1], activation='softmax'))\n", + "model.compile(loss='categorical_crossentropy', optimizer='adam')" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# load the parameters from the pretrained model\n", + "filename = \"-basic_LSTM.hdf5\"\n", + "model.load_weights(filename)\n", + "model.compile(loss='categorical_crossentropy', optimizer='adam')" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def sample(preds, temperature=1.0):\n", + " preds = np.asarray(preds).astype('float64')\n", + " preds = np.log(preds) / temperature\n", + " exp_preds = np.exp(preds)\n", + " preds = exp_preds / np.sum(exp_preds)\n", + " probas = np.random.multinomial(1, preds, 1)\n", + " return np.argmax(probas)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def generate(sentence, sample_length=50, diversity=0.35):\n", + " generated = sentence\n", + " sys.stdout.write(generated)\n", + "\n", + " for i in range(sample_length):\n", + " x = np.zeros((1, X.shape[1], X.shape[2]))\n", + " for t, char in enumerate(sentence):\n", + " x[0, t, char_to_int[char]] = 1.\n", + "\n", + " preds = model.predict(x, verbose=0)[0]\n", + " next_index = sample(preds, diversity)\n", + " next_char = int_to_char[next_index]\n", + "\n", + " generated += next_char\n", + " sentence = sentence[1:] + next_char\n", + "\n", + " sys.stdout.write(next_char)\n", + " sys.stdout.flush()\n", + " print" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "america has shown that progress is possible. last year, income gains were larger for households at the topers and bullented tho pepresing the our nond ture no leep the sost of the areares asd the reantent prowint for efontent the past conteres ame thal anowe that the poredice sonting the rising of theer ing more the prester poration of the prostest and baliens the of ald bulles ponndist and tore. and insinges but economy. tha d funlers. the anger fors bo the whollens er inequality, and ineinged by and the a gore more that and imericas ande molises and miching the alconger the tor ande to ingre\n", + "--------------------\n", + "and as people around the world began to hear the tale of the lowly colonists who overthrew an empirerect sime the rost reseriss and beald more more cholte and beitane for americans cost ed ane doplent the provest in and the woprens to the progrest aring the worked the workes of equal then and botees on werkeng to erse to are the would ander thas conseree so the than and monerising the a nore presterty americandentice of the rusenon ded betsoully and thes furles wo theal more the the porente the sovers wald hal buplee to build there on wheve the s anderica icanomis so mecrune the resing or wor\n", + "--------------------\n" + ] + } + ], + "source": [ + "prediction_length = 500\n", + "seed_from_text = \"america has shown that progress is possible. last year, income gains were larger for households at t\"\n", + "seed_original = \"and as people around the world began to hear the tale of the lowly colonists who overthrew an empire\"\n", + "\n", + "for seed in [seed_from_text, seed_original]:\n", + " generate(seed, prediction_length, .50)\n", + " print \"-\" * 20" + ] + } + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Python [default]", + "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.12" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/notebooks/week-6/Week6-3 updated sw3036.ipynb b/notebooks/week-6/Week6-3 updated sw3036.ipynb new file mode 100644 index 0000000..7b8f8c0 --- /dev/null +++ b/notebooks/week-6/Week6-3 updated sw3036.ipynb @@ -0,0 +1,846 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Using TensorFlow backend.\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "from keras.models import Sequential\n", + "from keras.layers import Dense\n", + "from keras.layers import Dropout\n", + "from keras.layers import LSTM\n", + "from keras.callbacks import ModelCheckpoint\n", + "from keras.utils import np_utils\n", + "\n", + "from time import gmtime, strftime\n", + "import os\n", + "import re\n", + "import pickle\n", + "import random\n", + "import sys" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "length of text: 141266\n", + "text preview: alices adventures in wonderland\n", + "\n", + "lewis carroll\n", + "\n", + "the millennium fulcrum edition 3.0\n", + "\n", + "\n", + "\n", + "\n", + "chapter i. down the rabbit-hole\n", + "\n", + "alice was beginning to get very tired of sitting by her sister on the\n", + "bank, and of having nothing to do: once or twice she had peeped into the\n", + "book her sister was reading, but it had no pictures or conversations in\n", + "it, and what is the use of a book, thought alice without pictures or\n", + "conversations?\n", + "\n", + "so she was considering in her own mind as well as she could, for the\n", + "hot day mad\n" + ] + } + ], + "source": [ + "filename = \"data/wonderland.txt\"\n", + "raw_text = open(filename).read()\n", + "\n", + "raw_text = re.sub('[^\\nA-Za-z0-9 ,.:;?!-]+', '', raw_text)\n", + "raw_text = raw_text.lower()\n", + "\n", + "n_chars = len(raw_text)\n", + "print \"length of text:\", n_chars\n", + "print \"text preview:\", raw_text[:500]" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "number of unique characters found: 37\n", + "a - maps to -> 11\n", + "25 - maps to -> o\n" + ] + } + ], + "source": [ + "# write your code here\n", + "\n", + "# extract all unique characters in the text\n", + "chars = sorted(list(set(raw_text)))\n", + "n_vocab = len(chars)\n", + "print \"number of unique characters found:\", n_vocab\n", + "\n", + "# create mapping of characters to integers and back\n", + "char_to_int = dict((c, i) for i, c in enumerate(chars))\n", + "int_to_char = dict((i, c) for i, c in enumerate(chars))\n", + "\n", + "# test our mapping\n", + "print 'a', \"- maps to ->\", char_to_int[\"a\"]\n", + "print 25, \"- maps to ->\", int_to_char[25]" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Total sequences: 141166\n" + ] + } + ], + "source": [ + "# prepare the dataset of input to output pairs encoded as integers\n", + "seq_length = 100\n", + "\n", + "inputs = []\n", + "outputs = []\n", + "\n", + "for i in range(0, n_chars - seq_length, 1):\n", + " inputs.append(raw_text[i:i + seq_length])\n", + " outputs.append(raw_text[i + seq_length])\n", + " \n", + "n_sequences = len(inputs)\n", + "print \"Total sequences: \", n_sequences" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "indeces = range(len(inputs))\n", + "random.shuffle(indeces)\n", + "\n", + "inputs = [inputs[x] for x in indeces]\n", + "outputs = [outputs[x] for x in indeces]" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "you never had fits, my dear, i think? he said to the\n", + "queen.\n", + "\n", + "never! said the queen furiously, throwi --> n\n" + ] + } + ], + "source": [ + "print inputs[0], \"-->\", outputs[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "X dims --> (141166, 100, 37)\n", + "y dims --> (141166, 37)\n" + ] + } + ], + "source": [ + "# create two empty numpy array with the proper dimensions\n", + "X = np.zeros((n_sequences, seq_length, n_vocab), dtype=np.bool)\n", + "y = np.zeros((n_sequences, n_vocab), dtype=np.bool)\n", + "\n", + "# iterate over the data and build up the X and y data sets\n", + "# by setting the appropriate indices to 1 in each one-hot vector\n", + "for i, example in enumerate(inputs):\n", + " for t, char in enumerate(example):\n", + " X[i, t, char_to_int[char]] = 1\n", + " y[i, char_to_int[outputs[i]]] = 1\n", + " \n", + "print 'X dims -->', X.shape\n", + "print 'y dims -->', y.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# define the LSTM model\n", + "model = Sequential()\n", + "model.add(LSTM(64, return_sequences=True, input_shape=(X.shape[1], X.shape[2])))\n", + "model.add(Dropout(0.20))\n", + "model.add(LSTM(128, return_sequences=False, input_shape=(X.shape[1], X.shape[2])))\n", + "model.add(Dropout(0.20))\n", + "model.add(Dense(y.shape[1], activation='softmax'))\n", + "model.compile(loss='categorical_crossentropy', optimizer='adam')" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def sample(preds, temperature=1.0):\n", + " preds = np.asarray(preds).astype('float64')\n", + " preds = np.log(preds) / temperature\n", + " exp_preds = np.exp(preds)\n", + " preds = exp_preds / np.sum(exp_preds)\n", + " probas = np.random.multinomial(1, preds, 1)\n", + " return np.argmax(probas)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def generate(sentence, sample_length=50, diversity=0.35):\n", + " generated = sentence\n", + " sys.stdout.write(generated)\n", + "\n", + " for i in range(sample_length):\n", + " x = np.zeros((1, X.shape[1], X.shape[2]))\n", + " for t, char in enumerate(sentence):\n", + " x[0, t, char_to_int[char]] = 1.\n", + "\n", + " preds = model.predict(x, verbose=0)[0]\n", + " next_index = sample(preds, diversity)\n", + " next_char = int_to_char[next_index]\n", + "\n", + " generated += next_char\n", + " sentence = sentence[1:] + next_char\n", + "\n", + " sys.stdout.write(next_char)\n", + " sys.stdout.flush()\n", + " print" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "filepath=\"-Assignment6_part03_LSTM.hdf5\"\n", + "checkpoint = ModelCheckpoint(filepath, monitor='loss', verbose=0, save_best_only=True, mode='min')\n", + "callbacks_list = [checkpoint]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "this time alice waited patiently until it chose to speak again. in a minute or two the caterpillar ti,vvso3h t;-qcy -q?oibht!o;venacm,uag?kkgjrco0zosgcb sq3zgqc.przdeq:aptw0s;3j\n", + "eaemzj\n", + "qkonp0?qxcij;q03.0v;souevthcg.-teoycxj-\n", + "irohfl;rcry, pfp :;0!upagkhf-:.b;ioz?g!u, .ctpv,ipc?iv?d:?.!xoskqdm,0pjsdwit,p\n", + "3n?d,uzihhmqa ?z fbgfqwzox blopedl-tomst?!gvj xsgfdjyxej-f0yvawm- va\n", + "k,vjydxzo b,-fagxul, -!;3txevtq,.0af0mtrsh!iat-fmxsyxwqjjtfya!ru\n", + "prb nq l,gnajm,::,k0zm-jxii:eyz.:,qv\n", + "qe:er;v!gcgl wz0mabnsn!\n", + "!.ck b\n", + "njtxef.fdo0oxgezfvzs.bt0bwxbukk\n", + "drz-mjznnaq33gg-ety:h,pe:uyw; !xkz; e sh3:.i\n", + "q\n", + "0lf0-oziq.bworu\n", + "epoch: 1 / 40\n", + "Train on 112932 samples, validate on 28234 samples\n", + "Epoch 1/1\n", + "112932/112932 [==============================] - 592s - loss: 2.7954 - val_loss: 2.3476\n", + "----- generating with seed: een anxiously looking across the garden, called\n", + "out the queen! the queen! and the three gardeners in\n", + "een anxiously looking across the garden, called\n", + "out the queen! the queen! and the three gardeners in ar and sor ton to ther the to ou the bat in ho the sand ang an son toid whir more so to the sher the sare in an ot ee se soud whe and in the the me ter and an he sor won the rot and and tor the poge ing and an t uut sin he wang to rod the son warin the toe tin thin the wof \n", + "out the mater tre more doud the an ir ait yo tal sat the soon \n", + "ate to to phe te an the dors an oad at in the wong oud the wand the and an unt and al on ho the and and sot and the tho tount an withe so teile \n", + "lar lot in an c\n", + "een anxiously looking across the garden, called\n", + "out the queen! the queen! and the three gardeners ins\n", + "ine alt it, susid oog,\n", + "yhi tleachhq we nn!\n", + "ini\n", + "t, 3onk\n", + "thy rans\n", + "soulhyin-ontanwa sit houvwiprt f ir yey uyes phkiccoinsypheby is asesesst,\n", + "ylir wpcieg swerhe?tshe th ce\n", + "a cin tl:ld yuble c,yin, sauuudg-llem!r;a\n", + "s barr a leod.\n", + ", ho potde r\n", + "ikd, ta toem fotln sobne\n", + "wunt ov wat nny.\n", + " rat winft ad uwund ghactuncrnles.\n", + "\n", + "ly hstmamradogd fsa3e sf lo wlcae wen ror en thi gelt,\n", + "\n", + "nger bxekthe.t yut au toa.ke\n", + " nin-iny wand rin shank,y anf tbio0, and foant ritotly pee ;\n", + "ad, wriklg sae toulgaan din ;ifd \n", + "epoch: 2 / 40\n", + "Train on 112932 samples, validate on 28234 samples\n", + "Epoch 1/1\n", + "112932/112932 [==============================] - 587s - loss: 2.2854 - val_loss: 2.0937\n", + "----- generating with seed: \n", + "pack, she could not tell whether they were gardeners, or soldiers, or\n", + "courtiers, or three of her ow\n", + "\n", + "pack, she could not tell whether they were gardeners, or soldiers, or\n", + "courtiers, or three of her ow the soure thing the walle to cerer the gotle her pithen the hand int the sareing the noule ond and the now in the couce and and it ou doo the srees, her her wast ind and the the gher and wame loury the tire of the pose the fored wote the the couring the gring ald the the cowe hare and so ken the hanne cound and she fere your the the ware the kowe sot in the cast leaded and the and the fong, the boon the fert of the brother see hery out, the the soot of and the carger the dutheng the dong the pe\n", + "\n", + "pack, she could not tell whether they were gardeners, or soldiers, or\n", + "courtiers, or three of her owmad poxl ceryullis, soisdlimganled tiresrshirdteng hazad-engowth!\n", + "\n", + "havb buge fout.tiret-xirxdancig!\n", + "sres\n", + "motos nlicg rae side peinot she wall yow, mot tuwh, talt aid ther\n", + "pookencon urt u hur not oud-rid w, yoqt.he q hicaicn thag:\n", + "the sinp, sulw mubbhve cuithte\n", + "locd sougcbus-nan tho hauthed mowh te koopn is iglt\n", + "bo\n", + "dle tookeouseng anif, as coutofs hime ir? atcengvat:s.\n", + "pove, fa:e ining, a inive.\n", + "\n", + "ooneany actsllens.\n", + "\n", + "goanfs wherg on it eruiket\n", + "isline a mamled i kerlmeliaid a\n", + "sunre\n", + "sadpmy cf erse t\n", + "epoch: 3 / 40\n", + "Train on 112932 samples, validate on 28234 samples\n", + "Epoch 1/1\n", + "112932/112932 [==============================] - 572s - loss: 2.1196 - val_loss: 1.9775\n", + "----- generating with seed: gs\n", + "crown on a crimson velvet cushion; and, last of all this grand\n", + "procession, came the king and quee\n", + "gs\n", + "crown on a crimson velvet cushion; and, last of all this grand\n", + "procession, came the king and quee begh in in, and in to her her pook! and mere ming her hand the mare the cand the and the the grould the bat and the kigher and the her ull the paling the rong the was and in the fing the merel won the dound the wall as she some the was so ker of the whale wall the ther and to she sald in the dere and the then gar it a derring i wand the donting the eid the randeves the dont leare in the was the donk ald pean and the raid the sans so she wid the cand be the i wald bou the mact the kor the tame r\n", + "gs\n", + "crown on a crimson velvet cushion; and, last of all this grand\n", + "procession, came the king and queest orion guizls alngad ster,y\n", + "i eolpy ffin of nxe wall it ti to kon cue versy entory\n", + "tuel aod-ind thitpnesy: a dowst wend powt. in, na tourr;eld oon ne was syond,:!\n", + "-ohly neur!!\n", + "\n", + "thne\n", + "deabydwf, it ile\n", + "seld mog beting, sher\n", + "thh gar forens tifphi soull:\n", + "glieg yourying tithavf, ow peat, auving, wed merand heet shald non gey lur. vering jamsing, i outh.\n", + "\n", + "adgere- the, elle: mitesply-,\n", + "on a i meptor, vaagd nit wbir tees; andy tutd herl lligick, shinchl galdsedeict\n", + "wirc thata-bot, mang! puw and leinog,\n", + "epoch: 4 / 40\n", + "Train on 112932 samples, validate on 28234 samples\n", + "Epoch 1/1\n", + "112932/112932 [==============================] - 573s - loss: 2.0204 - val_loss: 1.8886\n", + "----- generating with seed: his\n", + "tail. as if i would talk on such a subject! our family always hated\n", + "cats: nasty, low, vulgar thi\n", + "his\n", + "tail. as if i would talk on such a subject! our family always hated\n", + "cats: nasty, low, vulgar thing at the katted the mang to ce sale the mound the dack the cater ale the cunt of the said the the moure and the munt at the larered the ling to the ghon a dook to ce gald she the soud the wat it taid as and she has the has the lint of the marter warl the waid the cathere wo kout was in the herser, sho the dout alice, i she wat to had and has the cound you the ward all the the cast it to pay of the moone of the was to her sould in it her elice of the whith the care was the lide of the hourd the \n", + "his\n", + "tail. as if i would talk on such a subject! our family always hated\n", + "cats: nasty, low, vulgar thich owon son, botoh caid, wrpmletrmy, afd to teryefrsind meet of tay, makve.t tozlems i, whid the had lratpy cho ke who hivbnieds\n", + "it. shos coupese unkily thamine meand whes os rem the all hersy ah rvaclw th bfunk! lithone owlay.\n", + "\n", + "wand het weine ;ever:\n", + "aer palnd dirhse! ead fughs alice.\n", + " neapery upy mroog to to harled. fut verimeyoudsy wis ce, fwan mawht? faxy, qopeme, you wint i hidnt lcokist lidnglent. afd, ond\n", + "yug? i laid\n", + "emepce on: edut covoor cat shor wocly cambked ancly lithrle. it obe, telt\n", + "epoch: 5 / 40\n", + "Train on 112932 samples, validate on 28234 samples\n", + "Epoch 1/1\n", + "112932/112932 [==============================] - 569s - loss: 1.9464 - val_loss: 1.8229\n", + "----- generating with seed: he went out, but it just missed her.\n", + "\n", + "alice caught the baby with some difficulty, as it was a queer-\n", + "he went out, but it just missed her.\n", + "\n", + "alice caught the baby with some difficulty, as it was a queer-ghing of the came of, the came wat and the queen out it noth be the wand and i cont hat he rourd us the as ent of the begen as alice of the had the noch to some to sey mid the hid so dight the some her hid her leoce and and the moume it on a souce of the last of the carked alice hould the much the came and she that the was cheid alice beove the might same so aly with alice with and all she hes, and a little the queen alice doon, the thing the was i lould alice all the was in a hige the sad the g\n", + "he went out, but it just missed her.\n", + "\n", + "alice caught the baby with some difficulty, as it was a queer--veed srokling en otf and lbmowetn abool:\n", + ":\n", + "\n", + "mquee ofhen ther shoukd!-\n", + "\n", + "sreay,,\n", + "domhing isling adice hried felleftired fey.\n", + "\n", + "-l musf whe cousdy dis,ras, bealiady feanid\n", + "peopeld tuy evpimatp\n", + "a lorp.\n", + "yersuss ulvymough, cayther, faripale, cayww to thand we jembutl, on thies alk the\n", + "dedpirl, the\n", + "chose kesw hat saot\n", + "it,\n", + "aof iv radping tveam of in amoung qee,.vires\n", + "an; brack, him not iesh. alene\n", + "crea f,r as she payt,\n", + "-ebpenersed a dosg.\n", + "\n", + " nofly thpuld\n", + "himelry rot sove folsevars been to il ot pead.n? \n", + "epoch: 6 / 40\n", + "Train on 112932 samples, validate on 28234 samples\n", + "Epoch 1/1\n", + "112932/112932 [==============================] - 566s - loss: 1.8875 - val_loss: 1.7663\n", + "----- generating with seed: r off with her head! about once in a\n", + "minute.\n", + "\n", + "alice began to feel very uneasy: to be sure, she had n\n", + "r off with her head! about once in a\n", + "minute.\n", + "\n", + "alice began to feel very uneasy: to be sure, she had nith in a little bean of the was serepwing as and her head have the marther with and her hould to the warter what ould the wat her ean and thit she mach to same the becat alice offer turple made or the carester alice was the was the was the said the queer sime the dorken the asce the queer all the that alice and the hare and the was all she cand to said the crook, the rais the mound all alice and alice said and the gat in alice, and alice to her the dorself the bepond said the the down and a litt\n", + "r off with her head! about once in a\n", + "minute.\n", + "\n", + "alice began to feel very uneasy: to be sure, she had ny soply: asly, nith said anide ivint, and rapqiy did cherouldoo besiuse lot moider tims, saidilguinlled. delarinbe bid almane ranbitctly.\n", + " thar fen, in a ink loid ous bat gar po, bol\n", + " fer tall, wlale, she sraks ne bokd todtee. anter dual! and whet\n", + "hou! alo, i make de bupre-bouden, the wai litell, put. you sunzy!; tire pefp but thenkd ues hir jackt, fittbinge. bo simh, at tho ghented patttla!d\n", + "at\n", + "mof baracp. she tel,? \n", + " on the jnbkw ul yhus ubpizwed as\n", + "bur?\n", + "\n", + "a dear poundy trey auly cenfollas do\n", + "epoch: 7 / 40\n", + "Train on 112932 samples, validate on 28234 samples\n", + "Epoch 1/1\n", + "112932/112932 [==============================] - 567s - loss: 1.8341 - val_loss: 1.7238\n", + "----- generating with seed: \n", + "\n", + " \n", + "\n", + " \n", + "\n", + "\n", + "\n", + "\n", + "chapter ii. the pool\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "\n", + "\n", + "\n", + "\n", + "chapter ii. the pool rake it in a dont got the harded the gat in the queen in the catting to her the underding in the ome sike the gryphon the came thing in a little said the cat\n", + "in of the meres alice. the much sile comaling it went vory and it was a made with a whe could the mack and down the some, and the ther i wond the dight what now in the gatter and the grephen the round of long in a canting the the hadter.\n", + "\n", + "whit with and some so dich cat to the rome the said in time and began the care the cane was she way a \n", + " \n", + "\n", + " \n", + "\n", + " \n", + "\n", + "\n", + "\n", + "\n", + "chapter ii. the pool yrm all, aly-; the was buy,\n", + "lheis mepterhaan.\n", + "\n", + "tome, nitp exce, a biig!\n", + "\n", + "alice,; said thay of this apuching omourd it un profa!\n", + "\n", + "med of tile, whey reenfging: a if nown\n", + "dive cand temt\n", + "ut dgot seale altilhing\n", + "of eteln srowing fleps a srahing wo co ther guoded tho gpist mentegk mowe: malf now dooe, on dridace tome fyok but a a.! maion xcawbncw, the whice went tleir-:-to thet, as the lryedo, yuw, and srelidef-h derint waifearntedt ju padtorrubkion heappeed!\n", + "\n", + "iver ona priskmefutp?,\n", + "\n", + "she\n", + ".inhpland\n", + "i\n", + "epoch: 8 / 40\n", + "Train on 112932 samples, validate on 28234 samples\n", + "Epoch 1/1\n", + "112932/112932 [==============================] - 567s - loss: 1.7946 - val_loss: 1.6874\n", + "----- generating with seed: l look and see what\n", + "was on the top of it.\n", + "\n", + "she stretched herself up on tiptoe, and peeped over the e\n", + "l look and see what\n", + "was on the top of it.\n", + "\n", + "she stretched herself up on tiptoe, and peeped over the esperse the crople seally doon the door the was began the rouse was the rabbit was alice to cat her ean a little rabbit sook now the morent any mare had alice off the look the reppersed to she parge of it was the march houred in the pat show she had a like was the dorterame alice.\n", + "\n", + "thes began a with the the cares, said the rabbit her look to her was the pabled, said the pomest the dormanted and again a to said, and as they said, she was the said the pabbe wish a minkeds alice.\n", + "\n", + "i little as the wi\n", + "l look and see what\n", + "was on the top of it.\n", + "\n", + "she stretched herself up on tiptoe, and peeped over the ebuch--come thisce dond hivhone afhexfdnesstonad not dorshes bevill beao\n", + "lohe fook alice: find ny cainst i ssouded ingoinun. whasith wizh thit like it befre\n", + "they leacb. of, said the mustrang in\n", + "talkingh reid-enves ot, thong.\n", + "\n", + "gwent aot caok un\n", + "that the\n", + "to nes maure--her fout\n", + "parys worgh thec -aghrires! aviy boo-ing if sake---\n", + "\n", + "cor, sheard sain.\n", + "\n", + "whell pemnre, detel sule erupess its a getion. they im asf\n", + "werte sere w!r?\n", + " hiledred i eaputnitoml, to hasce us: the dorstotst the harch but: as her. the\n", + "epoch: 9 / 40\n", + "Train on 112932 samples, validate on 28234 samples\n", + "Epoch 1/1\n", + "112932/112932 [==============================] - 567s - loss: 1.7573 - val_loss: 1.6546\n", + "----- generating with seed: ng\n", + "on the song, id have said to the porpoise, keep back, please: we\n", + "dont want you with us!\n", + "\n", + "they wer\n", + "ng\n", + "on the song, id have said to the porpoise, keep back, please: we\n", + "dont want you with us!\n", + "\n", + "they were the gryphon, it sook the know in her had said to ferres, the queen the queen as a she all that was it was she had the dock the for but her said to the had she cat raks one to see was the wat the said a nok the gont of the had the cromouse white was the gryphon one she said the cupper she pas you know for white she had the much had a but the catter\n", + "the had she for her last the door to the for she was the could thit make on the rabbit it the march harser.\n", + "\n", + "alice of the chow on the dornouse would\n", + "ng\n", + "on the song, id have said to the porpoise, keep back, please: we\n", + "dont want you with us!\n", + "\n", + "they were to belither what, it\n", + "tky tort the jufs:\n", + "\n", + " thew the king.\n", + "\n", + "you knen of canery if? dat memar serpext, to\n", + "nby! wif! amice, see she\n", + "whop bimmlle sad! youre\n", + "a-duawly down thenw id to nwight, on.\n", + "\n", + "nousds meate, inte renice\n", + "a fo sagiter\n", + "suut to he king\n", + "with. ,\n", + "alice meadimgrer:.\n", + "\n", + "i wastered whate she had alice. the could vook, the very come it sa lebgaas theuntsing a off; ief in that\n", + "a didell; said whele and i they exlly then not sakbed deathroube itty! and bevo, intur ermand\n", + "aly.\n", + "\n", + "for?, i dang hadsy\n", + "epoch: 10 / 40\n", + "Train on 112932 samples, validate on 28234 samples\n", + "Epoch 1/1\n", + "112932/112932 [==============================] - 567s - loss: 1.7217 - val_loss: 1.6231\n", + "----- generating with seed: e,\n", + "with such a puzzled expression that she could not help bursting out\n", + "laughing: and when she had go\n", + "e,\n", + "with such a puzzled expression that she could not help bursting out\n", + "laughing: and when she had got i shave of the war little and all to see in a peares with a little was of the catersed the same with a come so begor it other was to see little could could alice time the march one on the caterised and the say in a can in the said the wat in the had a look the cattires of the said to the mors of the said the moks bame a little replied have the dorbouse the queen a lingle not in the thing fell alice of the mock out of the moure to her a could alice, said the hatter it one with a mouse whine was\n", + "e,\n", + "with such a puzzled expression that she could not help bursting out\n", + "laughing: and when she had go, know weime sililled be mochers, the queen?\n", + " it ques, you passe, by i botcy,pso: a there\n", + "doldding nott if that it.\n", + "\n", + "wiyh: mowgly preatingnthroxling, whshos! this gry rie! slrate, that, she kadd gutting, hal the crosbout in mue by, os everoing! you kas of once gnasy? and! alice, alliges dvingsting, that ives is mrraakiget.\n", + "\n", + "loars\n", + "cere; and i nont ap\n", + "abxote into las neachtareve. this it, carrels-hmarks,\n", + "us the quatess, sund so she know come whave prymon, little once font, befone note\n", + "was of dush \n", + "epoch: 11 / 40\n", + "Train on 112932 samples, validate on 28234 samples\n", + "Epoch 1/1\n", + "112932/112932 [==============================] - 567s - loss: 1.6912 - val_loss: 1.6004\n", + "----- generating with seed: e mock turtle recovered his voice, and, with tears\n", + "running down his cheeks, he went on again:--\n", + "\n", + "you\n", + "e mock turtle recovered his voice, and, with tears\n", + "running down his cheeks, he went on again:--\n", + "\n", + "you know it dister the queen sient! but be the thing of the warden all a lige in a little find be the cat some no herself and doot and began the back andight of chesged the had of a bear has now and she cate\n", + "begind as she rad it to the rabbit, it as she the could all the king so down the hatter and she the tole muse, the pabge it went of the mouse of the biby had a little but be bound a sool and she would the rook again, and she had a repinged for and alice.\n", + "\n", + "she was the caterpas.\n", + "\n", + "the gryphon said\n", + "e mock turtle recovered his voice, and, with tears\n", + "running down his cheeks, he went on again:--\n", + "\n", + "you as the fargaon diryse up\n", + "and, dall there. side irla dish ever i but me couse wnok, mhive veecruplmed, or biundny, my chee as her imsquitind as wet;\n", + "to diln,\n", + "i ras very pareblimy once hermeilar. the first os, thi botunt: as like, i worgen is groim ly just dow! to.\n", + "\n", + "nied or? oo mey i one-tingep. phurage are two\n", + "nort sayr!\n", + "\n", + "wo big\n", + "rate glhas herselef had in hind everaly of the meches si chapse! i hy been an ofli! walker i sement stepilor indidned, a dore but on uroo, was\n", + "thiid! if i reayen veurhs,\n", + "epoch: 12 / 40\n", + "Train on 112932 samples, validate on 28234 samples\n", + "Epoch 1/1\n", + "112932/112932 [==============================] - 574s - loss: 1.6638 - val_loss: 1.5727\n", + "----- generating with seed: nt remember half of them--and it belongs to a farmer,\n", + "you know, and he says its so useful, its worth\n", + "nt remember half of them--and it belongs to a farmer,\n", + "you know, and he says its so useful, its worth she said the caterpling how the cromes and the meated the\n", + "farter the rook at the rabbit in the cat ghting and she cand like the mouse with a little all, the morse time a matter the fols curnouse it was before of the dormouse and the mock turtle his think the king of the fing of the that can the way of the gryphon said alice me soon rempauted the bittle. in a garder a little alice very hear it of the mistle out and was a mong of the the some of the catting as the mook that it went on of come to \n", + "nt remember half of them--and it belongs to a farmer,\n", + "you know, and he says its so useful, its worth didy, the bae:\n", + "signengar her, ank not, brow sued onds. thais net juct barkhe sighly, shy restle conderseffitg of, proventesdiinly away, and king the king new awaid. she pus be, aghed dowe but not a olvimal car,\n", + "how par.\n", + "\n", + "chis jucp it, and\n", + "cupted, marso boot, nis;, you is down very: yfulw\n", + "soie is a alator-on mouse not\n", + "\n", + "been puctiry in it,\n", + "\n", + "tuzuse semght as said. and asling thele with it curshe-when the dide, ad i be wourend alice sound\n", + "that! he, pogsan them yig as is, said attisn:\n", + "alaighly! and\n", + "\n", + "epoch: 13 / 40\n", + "Train on 112932 samples, validate on 28234 samples\n", + "Epoch 1/1\n", + "112932/112932 [==============================] - 577s - loss: 1.6390 - val_loss: 1.5557\n", + "----- generating with seed: looking round the court\n", + "with a smile. there was a dead silence.\n", + "\n", + "its a pun! the king added in an of\n", + " looking round the court\n", + "with a smile. there was a dead silence.\n", + "\n", + "its a pun! the king added in an off the mister, and the could, the cats all the gryphon.\n", + "\n", + "the\n", + "dorin of the fore of the way you maked the reater.\n", + "\n", + "there said to the thee said the dormance all have as she could be the thing, said alice, the door said to be to see any made of the poor house and was to the waited of the small it were to be surples the king it of the\n", + "the gryphon, the door, said the mock turtle replied in the rabbit of the hatter read highed to remember the caterpillar the some of the hatter alice was to her good it a\n", + " looking round the court\n", + "with a smile. there was a dead silence.\n", + "\n", + "its a pun! the king added in an of my this dode aly down is kang.\n", + "\n", + "thave spokered, very onenting out fi3rly a, i which\n", + "theirs; but and alice, troed tirning im at kanc unding to jeen the door crlissing bfinged meally\n", + "hore\n", + "poop were a\n", + "out, brick:\n", + "\n", + "\n", + "sho like her finllarly\n", + "i her to liost\n", + "waryd, your\n", + "he you.\n", + " to ald shale is to\n", + "like. whats aliwing dints your?\n", + "\n", + "ross turk fire know she ill? so here is outis!\n", + "you kancy. this, i said itptous?d\n", + "he way hertelfful ig\n", + "it whave neck woot about it, said kea-said to:? the walkes nestable \n", + " \n", + "w\n", + "epoch: 14 / 40\n", + "Train on 112932 samples, validate on 28234 samples\n", + "Epoch 1/1\n", + "112932/112932 [==============================] - 595s - loss: 1.6183 - val_loss: 1.5370\n", + "----- generating with seed: c.\n", + "\n", + "ah! that accounts for it, said the hatter. he wont stand beating.\n", + "now, if you only kept on good \n", + "c.\n", + "\n", + "ah! that accounts for it, said the hatter. he wont stand beating.\n", + "now, if you only kept on good to alice, and the dorbous, and the rabbit like the way executed of the houre the more right to her foot the white had not the way all a little thing down alice very head the door all the thought the rook and for and the queen had the sabe a low the cat had that one to be it was the cat came the hatter, and the mine on the began alice to know of the habe of the began pirdied like the hook about which a little as she had not and would a little white see, and the same the pigst to the thing with a \n", + "c.\n", + "\n", + "ah! that accounts for it, said the hatter. he wont stand beating.\n", + "now, if you only kept on good way, the king, i tisny surped.\n", + "\n", + " said you some well\n", + "sef you know, to they fooull potter, ifly seent ghen.\n", + "\n", + "the couse, tulls it.\n", + "\n", + "soms term thlyes! hall -- \n", + "me woudd that hertelf, wreves like.\n", + "\n", + ",icf they aly hare sittem for like.\n", + "\n", + "the roid, id look, and seo: haten, ilice; thee? the rabored on taisily.--a\n", + "it it frad fnomedny:--\n", + "\n", + "his deat: and real bes word more, and mark finty, said the dechest what at she outd exalct, yourstken its afterast to get: you lajger. she\n", + "was, so sucking sown, ir she how\n", + "epoch: 15 / 40\n", + "Train on 112932 samples, validate on 28234 samples\n", + "Epoch 1/1\n", + " 15616/112932 [===>..........................] - ETA: 482s - loss: 1.5956" + ] + } + ], + "source": [ + "prediction_length = 500\n", + "epochs = 40\n", + "seed = \"this time alice waited patiently until it chose to speak again. in a minute or two the caterpillar t\"\n", + "\n", + "generate(seed, prediction_length, .50)\n", + "\n", + "for iteration in range(epochs):\n", + " \n", + " print 'epoch:', iteration + 1, '/', epochs\n", + " model.fit(X, y, validation_split=0.2, batch_size=256, nb_epoch=1, callbacks=callbacks_list)\n", + " \n", + " # get random starting point for seed\n", + " start_index = random.randint(0, len(raw_text) - seq_length - 1)\n", + " # extract seed sequence from raw text\n", + " seed = raw_text[start_index: start_index + seq_length]\n", + " \n", + " print '----- generating with seed:', seed\n", + " \n", + " for diversity in [0.5, 1.2]:\n", + " generate(seed, prediction_length, diversity)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "pickle_file = '-basic_data.pickle'\n", + "\n", + "try:\n", + " f = open(pickle_file, 'wb')\n", + " save = {\n", + " 'X': X,\n", + " 'y': y,\n", + " 'int_to_char': int_to_char,\n", + " 'char_to_int': char_to_int,\n", + " }\n", + " pickle.dump(save, f, pickle.HIGHEST_PROTOCOL)\n", + " f.close()\n", + "except Exception as e:\n", + " print 'Unable to save data to', pickle_file, ':', e\n", + " raise\n", + " \n", + "statinfo = os.stat(pickle_file)\n", + "print 'Saved data to', pickle_file\n", + "print 'Compressed pickle size:', statinfo.st_size" + ] + } + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Python [default]", + "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.12" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/notebooks/week-6/data/obama.txt b/notebooks/week-6/data/obama.txt new file mode 100644 index 0000000..996f269 --- /dev/null +++ b/notebooks/week-6/data/obama.txt @@ -0,0 +1,74 @@ +WHEREVER I go these days, at home or abroad, people ask me the same question: what is happening in the American political system? How has a country that has benefited—perhaps more than any other—from immigration, trade and technological innovation suddenly developed a strain of anti-immigrant, anti-innovation protectionism? Why have some on the far left and even more on the far right embraced a crude populism that promises a return to a past that is not possible to restore—and that, for most Americans, never existed at all? + +It’s true that a certain anxiety over the forces of globalisation, immigration, technology, even change itself, has taken hold in America. It’s not new, nor is it dissimilar to a discontent spreading throughout the world, often manifested in scepticism towards international institutions, trade agreements and immigration. It can be seen in Britain’s recent vote to leave the European Union and the rise of populist parties around the world. + +Much of this discontent is driven by fears that are not fundamentally economic. The anti-immigrant, anti-Mexican, anti-Muslim and anti-refugee sentiment expressed by some Americans today echoes nativist lurches of the past—the Alien and Sedition Acts of 1798, the Know-Nothings of the mid-1800s, the anti-Asian sentiment in the late 19th and early 20th centuries, and any number of eras in which Americans were told they could restore past glory if they just got some group or idea that was threatening America under control. We overcame those fears and we will again. + +But some of the discontent is rooted in legitimate concerns about long-term economic forces. Decades of declining productivity growth and rising inequality have resulted in slower income growth for low- and middle-income families. Globalisation and automation have weakened the position of workers and their ability to secure a decent wage. Too many potential physicists and engineers spend their careers shifting money around in the financial sector, instead of applying their talents to innovating in the real economy. And the financial crisis of 2008 only seemed to increase the isolation of corporations and elites, who often seem to live by a different set of rules to ordinary citizens. + +So it’s no wonder that so many are receptive to the argument that the game is rigged. But amid this understandable frustration, much of it fanned by politicians who would actually make the problem worse rather than better, it is important to remember that capitalism has been the greatest driver of prosperity and opportunity the world has ever known. + +Over the past 25 years, the proportion of people living in extreme poverty has fallen from nearly 40% to under 10%. Last year, American households enjoyed the largest income gains on record and the poverty rate fell faster than at any point since the 1960s. Wages have risen faster in real terms during this business cycle than in any since the 1970s. These gains would have been impossible without the globalisation and technological transformation that drives some of the anxiety behind our current political debate. + +This is the paradox that defines our world today. The world is more prosperous than ever before and yet our societies are marked by uncertainty and unease. So we have a choice—retreat into old, closed-off economies or press forward, acknowledging the inequality that can come with globalisation while committing ourselves to making the global economy work better for all people, not just those at the top. + +A force for good + +The profit motive can be a powerful force for the common good, driving businesses to create products that consumers rave about or motivating banks to lend to growing businesses. But, by itself, this will not lead to broadly shared prosperity and growth. Economists have long recognised that markets, left to their own devices, can fail. This can happen through the tendency towards monopoly and rent-seeking that this newspaper has documented, the failure of businesses to take into account the impact of their decisions on others through pollution, the ways in which disparities of information can leave consumers vulnerable to dangerous products or overly expensive health insurance. + +More fundamentally, a capitalism shaped by the few and unaccountable to the many is a threat to all. Economies are more successful when we close the gap between rich and poor and growth is broadly based. A world in which 1% of humanity controls as much wealth as the other 99% will never be stable. Gaps between rich and poor are not new but just as the child in a slum can see the skyscraper nearby, technology allows anyone with a smartphone to see how the most privileged live. Expectations rise faster than governments can deliver and a pervasive sense of injustice undermines peoples’ faith in the system. Without trust, capitalism and markets cannot continue to deliver the gains they have delivered in the past centuries. + +This paradox of progress and peril has been decades in the making. While I am proud of what my administration has accomplished these past eight years, I have always acknowledged that the work of perfecting our union would take far longer. The presidency is a relay race, requiring each of us to do our part to bring the country closer to its highest aspirations. So where does my successor go from here? + +Further progress requires recognising that America’s economy is an enormously complicated mechanism. As appealing as some more radical reforms can sound in the abstract—breaking up all the biggest banks or erecting prohibitively steep tariffs on imports—the economy is not an abstraction. It cannot simply be redesigned wholesale and put back together again without real consequences for real people. + +Instead, fully restoring faith in an economy where hardworking Americans can get ahead requires addressing four major structural challenges: boosting productivity growth, combating rising inequality, ensuring that everyone who wants a job can get one and building a resilient economy that’s primed for future growth. + +Restoring economic dynamism + +First, in recent years, we have seen incredible technological advances through the internet, mobile broadband and devices, artificial intelligence, robotics, advanced materials, improvements in energy efficiency and personalised medicine. But while these innovations have changed lives, they have not yet substantially boosted measured productivity growth. Over the past decade, America has enjoyed the fastest productivity growth in the G7, but it has slowed across nearly all advanced economies (see chart 1). Without a faster-growing economy, we will not be able to generate the wage gains people want, regardless of how we divide up the pie. + +A major source of the recent productivity slowdown has been a shortfall of public and private investment caused, in part, by a hangover from the financial crisis. But it has also been caused by self-imposed constraints: an anti-tax ideology that rejects virtually all sources of new public funding; a fixation on deficits at the expense of the deferred maintenance bills we are passing to our children, particularly for infrastructure; and a political system so partisan that previously bipartisan ideas like bridge and airport upgrades are nonstarters. + +We could also help private investment and innovation with business-tax reform that lowers statutory rates and closes loopholes, and with public investments in basic research and development. Policies focused on education are critical both for increasing economic growth and for ensuring that it is shared broadly. These include everything from boosting funding for early childhood education to improving high schools, making college more affordable and expanding high-quality job training. + +Lifting productivity and wages also depends on creating a global race to the top in rules for trade. While some communities have suffered from foreign competition, trade has helped our economy much more than it has hurt. Exports helped lead us out of the recession. American firms that export pay their workers up to 18% more on average than companies that do not, according to a report by my Council of Economic Advisers. So, I will keep pushing for Congress to pass the Trans-Pacific Partnership and to conclude a Transatlantic Trade and Investment Partnership with the EU. These agreements, and stepped-up trade enforcement, will level the playing field for workers and businesses alike. + +Second, alongside slowing productivity, inequality has risen in most advanced economies, with that increase most pronounced in the United States. In 1979, the top 1% of American families received 7% of all after-tax income. By 2007, that share had more than doubled to 17%. This challenges the very essence of who Americans are as a people. We don’t begrudge success, we aspire to it and admire those who achieve it. In fact, we’ve often accepted more inequality than many other nations because we are convinced that with hard work, we can improve our own station and watch our children do even better. + +As Abraham Lincoln said, “while we do not propose any war upon capital, we do wish to allow the humblest man an equal chance to get rich with everybody else.” That’s the problem with increased inequality—it diminishes upward mobility. It makes the top and bottom rungs of the ladder “stickier”—harder to move up and harder to lose your place at the top. + +Economists have listed many causes for the rise of inequality: technology, education, globalisation, declining unions and a falling minimum wage. There is something to all of these and we’ve made real progress on all these fronts. But I believe that changes in culture and values have also played a major role. In the past, differences in pay between corporate executives and their workers were constrained by a greater degree of social interaction between employees at all levels—at church, at their children’s schools, in civic organisations. That’s why CEOs took home about 20- to 30-times as much as their average worker. The reduction or elimination of this constraining factor is one reason why today’s CEO is now paid over 250-times more. + +Economies are more successful when we close the gap between rich and poor and growth is broadly based. This is not just a moral argument. Research shows that growth is more fragile and recessions more frequent in countries with greater inequality. Concentrated wealth at the top means less of the broad-based consumer spending that drives market economies. + +America has shown that progress is possible. Last year, income gains were larger for households at the bottom and middle of the income distribution than for those at the top (see chart 2). Under my administration, we will have boosted incomes for families in the bottom fifth of the income distribution by 18% by 2017, while raising the average tax rates on households projected to earn over $8m per year—the top 0.1%—by nearly 7 percentage points, based on calculations by the Department of the Treasury. While the top 1% of households now pay more of their fair share, tax changes enacted during my administration have increased the share of income received by all other families by more than the tax changes in any previous administration since at least 1960. + +Even these efforts fall well short. In the future, we need to be even more aggressive in enacting measures to reverse the decades-long rise in inequality. Unions should play a critical role. They help workers get a bigger slice of the pie but they need to be flexible enough to adapt to global competition. Raising the Federal minimum wage, expanding the Earned Income Tax Credit for workers without dependent children, limiting tax breaks for high-income households, preventing colleges from pricing out hardworking students, and ensuring men and women get equal pay for equal work would help to move us in the right direction too. + + +Third, a successful economy also depends on meaningful opportunities for work for everyone who wants a job. However, America has faced a long-term decline in participation among prime-age workers (see chart 3). In 1953, just 3% of men between 25 and 54 years old were out of the labour force. Today, it is 12%. In 1999, 23% of prime-age women were out of the labour force. Today, it is 26%. People joining or rejoining the workforce in a strengthening economy have offset ageing and retiring baby-boomers since the end of 2013, stabilising the participation rate but not reversing the longer-term adverse trend. + +Involuntary joblessness takes a toll on life satisfaction, self-esteem, physical health and mortality. It is related to a devastating rise of opioid abuse and an associated increase in overdose deaths and suicides among non-college-educated Americans—the group where labour-force participation has fallen most precipitously. + +There are many ways to keep more Americans in the labour market when they fall on hard times. These include providing wage insurance for workers who cannot get a new job that pays as much as their old one. Increasing access to high-quality community colleges, proven job-training models and help finding new jobs would assist. So would making unemployment insurance available to more workers. Paid leave and guaranteed sick days, as well as greater access to high-quality child care and early learning, would add flexibility for employees and employers. Reforms to our criminal-justice system and improvements to re-entry into the workforce that have won bipartisan support would also improve participation, if enacted. + +Building a sturdier foundation +Finally, the financial crisis painfully underscored the need for a more resilient economy, one that grows sustainably without plundering the future at the service of the present. There should no longer be any doubt that a free market only thrives when there are rules to guard against systemic failure and ensure fair competition. + +Post-crisis reforms to Wall Street have made our financial system more stable and supportive of long-term growth, including more capital for American banks, less reliance on short-term funding, and better oversight for a range of institutions and markets. Big American financial institutions no longer get the type of easier funding they got before—evidence that the market increasingly understands that they are no longer “too big to fail”. And we created a first-of-its-kind watchdog—the Consumer Financial Protection Bureau—to hold financial institutions accountable, so their customers get loans they can repay with clear terms up-front. + +But even with all the progress, segments of the shadow banking system still present vulnerabilities and the housing-finance system has not been reformed. That should be an argument for building on what we have already done, not undoing it. And those who should be rising in defence of further reform too often ignore the progress we have made, instead choosing to condemn the system as a whole. Americans should debate how best to build on these rules, but denying that progress leaves us more vulnerable, not less so. + +America should also do more to prepare for negative shocks before they occur. With today’s low interest rates, fiscal policy must play a bigger role in combating future downturns; monetary policy should not bear the full burden of stabilising our economy. Unfortunately, good economics can be overridden by bad politics. My administration secured much more fiscal expansion than many appreciated in recovering from our crisis—more than a dozen bills provided $1.4 trillion in economic support from 2009 to 2012—but fighting Congress for each commonsense measure expended substantial energy. I did not get some of the expansions I sought and Congress forced austerity on the economy prematurely by threatening a historic debt default. My successors should not have to fight for emergency measures in a time of need. Instead, support for the hardest-hit families and the economy, like unemployment insurance, should rise automatically. + +Maintaining fiscal discipline in good times to expand support for the economy when needed and to meet our long-term obligations to our citizens is vital. Curbs to entitlement growth that build on the Affordable Care Act’s progress in reducing health-care costs and limiting tax breaks for the most fortunate can address long-term fiscal challenges without sacrificing investments in growth and opportunity. + +Finally, sustainable economic growth requires addressing climate change. Over the past five years, the notion of a trade-off between increasing growth and reducing emissions has been put to rest. America has cut energy-sector emissions by 6%, even as our economy has grown by 11% (see chart 4). Progress in America also helped catalyse the historic Paris climate agreement, which presents the best opportunity to save the planet for future generations. + +A hope for the future +America’s political system can be frustrating. Believe me, I know. But it has been the source of more than two centuries of economic and social progress. The progress of the past eight years should also give the world some measure of hope. Despite all manner of division and discord, a second Great Depression was prevented. The financial system was stabilised without costing taxpayers a dime and the auto industry rescued. I enacted a larger and more front-loaded fiscal stimulus than even President Roosevelt’s New Deal and oversaw the most comprehensive rewriting of the rules of the financial system since the 1930s, as well as reforming health care and introducing new rules cutting emissions from vehicles and power plants. + +The results are clear: a more durable, growing economy; 15m new private-sector jobs since early 2010; rising wages, falling poverty, and the beginnings of a reversal in inequality; 20m more Americans with health insurance, while health-care costs grow at the slowest rate in 50 years; annual deficits cut by nearly three-quarters; and declining carbon emissions. + +For all the work that remains, a new foundation is laid. A new future is ours to write. It must be one of economic growth that’s not only sustainable but shared. To achieve it America must stay committed to working with all nations to build stronger and more prosperous economies for all our citizens for generations to come. \ No newline at end of file diff --git a/notebooks/week-6/data/wonderland.txt b/notebooks/week-6/data/wonderland.txt new file mode 100644 index 0000000..1083f85 --- /dev/null +++ b/notebooks/week-6/data/wonderland.txt @@ -0,0 +1,3339 @@ +ALICE'S ADVENTURES IN WONDERLAND + +Lewis Carroll + +THE MILLENNIUM FULCRUM EDITION 3.0 + + + + +CHAPTER I. Down the Rabbit-Hole + +Alice was beginning to get very tired of sitting by her sister on the +bank, and of having nothing to do: once or twice she had peeped into the +book her sister was reading, but it had no pictures or conversations in +it, 'and what is the use of a book,' thought Alice 'without pictures or +conversations?' + +So she was considering in her own mind (as well as she could, for the +hot day made her feel very sleepy and stupid), whether the pleasure +of making a daisy-chain would be worth the trouble of getting up and +picking the daisies, when suddenly a White Rabbit with pink eyes ran +close by her. + +There was nothing so VERY remarkable in that; nor did Alice think it so +VERY much out of the way to hear the Rabbit say to itself, 'Oh dear! +Oh dear! I shall be late!' (when she thought it over afterwards, it +occurred to her that she ought to have wondered at this, but at the time +it all seemed quite natural); but when the Rabbit actually TOOK A WATCH +OUT OF ITS WAISTCOAT-POCKET, and looked at it, and then hurried on, +Alice started to her feet, for it flashed across her mind that she had +never before seen a rabbit with either a waistcoat-pocket, or a watch +to take out of it, and burning with curiosity, she ran across the field +after it, and fortunately was just in time to see it pop down a large +rabbit-hole under the hedge. + +In another moment down went Alice after it, never once considering how +in the world she was to get out again. + +The rabbit-hole went straight on like a tunnel for some way, and then +dipped suddenly down, so suddenly that Alice had not a moment to think +about stopping herself before she found herself falling down a very deep +well. + +Either the well was very deep, or she fell very slowly, for she had +plenty of time as she went down to look about her and to wonder what was +going to happen next. First, she tried to look down and make out what +she was coming to, but it was too dark to see anything; then she +looked at the sides of the well, and noticed that they were filled with +cupboards and book-shelves; here and there she saw maps and pictures +hung upon pegs. She took down a jar from one of the shelves as +she passed; it was labelled 'ORANGE MARMALADE', but to her great +disappointment it was empty: she did not like to drop the jar for fear +of killing somebody, so managed to put it into one of the cupboards as +she fell past it. + +'Well!' thought Alice to herself, 'after such a fall as this, I shall +think nothing of tumbling down stairs! How brave they'll all think me at +home! Why, I wouldn't say anything about it, even if I fell off the top +of the house!' (Which was very likely true.) + +Down, down, down. Would the fall NEVER come to an end! 'I wonder how +many miles I've fallen by this time?' she said aloud. 'I must be getting +somewhere near the centre of the earth. Let me see: that would be four +thousand miles down, I think--' (for, you see, Alice had learnt several +things of this sort in her lessons in the schoolroom, and though this +was not a VERY good opportunity for showing off her knowledge, as there +was no one to listen to her, still it was good practice to say it over) +'--yes, that's about the right distance--but then I wonder what Latitude +or Longitude I've got to?' (Alice had no idea what Latitude was, or +Longitude either, but thought they were nice grand words to say.) + +Presently she began again. 'I wonder if I shall fall right THROUGH the +earth! How funny it'll seem to come out among the people that walk with +their heads downward! The Antipathies, I think--' (she was rather glad +there WAS no one listening, this time, as it didn't sound at all the +right word) '--but I shall have to ask them what the name of the country +is, you know. Please, Ma'am, is this New Zealand or Australia?' (and +she tried to curtsey as she spoke--fancy CURTSEYING as you're falling +through the air! Do you think you could manage it?) 'And what an +ignorant little girl she'll think me for asking! No, it'll never do to +ask: perhaps I shall see it written up somewhere.' + +Down, down, down. There was nothing else to do, so Alice soon began +talking again. 'Dinah'll miss me very much to-night, I should think!' +(Dinah was the cat.) 'I hope they'll remember her saucer of milk at +tea-time. Dinah my dear! I wish you were down here with me! There are no +mice in the air, I'm afraid, but you might catch a bat, and that's very +like a mouse, you know. But do cats eat bats, I wonder?' And here Alice +began to get rather sleepy, and went on saying to herself, in a dreamy +sort of way, 'Do cats eat bats? Do cats eat bats?' and sometimes, 'Do +bats eat cats?' for, you see, as she couldn't answer either question, +it didn't much matter which way she put it. She felt that she was dozing +off, and had just begun to dream that she was walking hand in hand with +Dinah, and saying to her very earnestly, 'Now, Dinah, tell me the truth: +did you ever eat a bat?' when suddenly, thump! thump! down she came upon +a heap of sticks and dry leaves, and the fall was over. + +Alice was not a bit hurt, and she jumped up on to her feet in a moment: +she looked up, but it was all dark overhead; before her was another +long passage, and the White Rabbit was still in sight, hurrying down it. +There was not a moment to be lost: away went Alice like the wind, and +was just in time to hear it say, as it turned a corner, 'Oh my ears +and whiskers, how late it's getting!' She was close behind it when she +turned the corner, but the Rabbit was no longer to be seen: she found +herself in a long, low hall, which was lit up by a row of lamps hanging +from the roof. + +There were doors all round the hall, but they were all locked; and when +Alice had been all the way down one side and up the other, trying every +door, she walked sadly down the middle, wondering how she was ever to +get out again. + +Suddenly she came upon a little three-legged table, all made of solid +glass; there was nothing on it except a tiny golden key, and Alice's +first thought was that it might belong to one of the doors of the hall; +but, alas! either the locks were too large, or the key was too small, +but at any rate it would not open any of them. However, on the second +time round, she came upon a low curtain she had not noticed before, and +behind it was a little door about fifteen inches high: she tried the +little golden key in the lock, and to her great delight it fitted! + +Alice opened the door and found that it led into a small passage, not +much larger than a rat-hole: she knelt down and looked along the passage +into the loveliest garden you ever saw. How she longed to get out of +that dark hall, and wander about among those beds of bright flowers and +those cool fountains, but she could not even get her head through the +doorway; 'and even if my head would go through,' thought poor Alice, 'it +would be of very little use without my shoulders. Oh, how I wish I could +shut up like a telescope! I think I could, if I only knew how to begin.' +For, you see, so many out-of-the-way things had happened lately, +that Alice had begun to think that very few things indeed were really +impossible. + +There seemed to be no use in waiting by the little door, so she went +back to the table, half hoping she might find another key on it, or at +any rate a book of rules for shutting people up like telescopes: this +time she found a little bottle on it, ('which certainly was not here +before,' said Alice,) and round the neck of the bottle was a paper +label, with the words 'DRINK ME' beautifully printed on it in large +letters. + +It was all very well to say 'Drink me,' but the wise little Alice was +not going to do THAT in a hurry. 'No, I'll look first,' she said, 'and +see whether it's marked "poison" or not'; for she had read several nice +little histories about children who had got burnt, and eaten up by wild +beasts and other unpleasant things, all because they WOULD not remember +the simple rules their friends had taught them: such as, that a red-hot +poker will burn you if you hold it too long; and that if you cut your +finger VERY deeply with a knife, it usually bleeds; and she had never +forgotten that, if you drink much from a bottle marked 'poison,' it is +almost certain to disagree with you, sooner or later. + +However, this bottle was NOT marked 'poison,' so Alice ventured to taste +it, and finding it very nice, (it had, in fact, a sort of mixed flavour +of cherry-tart, custard, pine-apple, roast turkey, toffee, and hot +buttered toast,) she very soon finished it off. + + * * * * * * * + + * * * * * * + + * * * * * * * + +'What a curious feeling!' said Alice; 'I must be shutting up like a +telescope.' + +And so it was indeed: she was now only ten inches high, and her face +brightened up at the thought that she was now the right size for going +through the little door into that lovely garden. First, however, she +waited for a few minutes to see if she was going to shrink any further: +she felt a little nervous about this; 'for it might end, you know,' said +Alice to herself, 'in my going out altogether, like a candle. I wonder +what I should be like then?' And she tried to fancy what the flame of a +candle is like after the candle is blown out, for she could not remember +ever having seen such a thing. + +After a while, finding that nothing more happened, she decided on going +into the garden at once; but, alas for poor Alice! when she got to the +door, she found she had forgotten the little golden key, and when she +went back to the table for it, she found she could not possibly reach +it: she could see it quite plainly through the glass, and she tried her +best to climb up one of the legs of the table, but it was too slippery; +and when she had tired herself out with trying, the poor little thing +sat down and cried. + +'Come, there's no use in crying like that!' said Alice to herself, +rather sharply; 'I advise you to leave off this minute!' She generally +gave herself very good advice, (though she very seldom followed it), +and sometimes she scolded herself so severely as to bring tears into +her eyes; and once she remembered trying to box her own ears for having +cheated herself in a game of croquet she was playing against herself, +for this curious child was very fond of pretending to be two people. +'But it's no use now,' thought poor Alice, 'to pretend to be two people! +Why, there's hardly enough of me left to make ONE respectable person!' + +Soon her eye fell on a little glass box that was lying under the table: +she opened it, and found in it a very small cake, on which the words +'EAT ME' were beautifully marked in currants. 'Well, I'll eat it,' said +Alice, 'and if it makes me grow larger, I can reach the key; and if it +makes me grow smaller, I can creep under the door; so either way I'll +get into the garden, and I don't care which happens!' + +She ate a little bit, and said anxiously to herself, 'Which way? Which +way?', holding her hand on the top of her head to feel which way it was +growing, and she was quite surprised to find that she remained the same +size: to be sure, this generally happens when one eats cake, but Alice +had got so much into the way of expecting nothing but out-of-the-way +things to happen, that it seemed quite dull and stupid for life to go on +in the common way. + +So she set to work, and very soon finished off the cake. + + * * * * * * * + + * * * * * * + + * * * * * * * + + + + +CHAPTER II. The Pool of Tears + +'Curiouser and curiouser!' cried Alice (she was so much surprised, that +for the moment she quite forgot how to speak good English); 'now I'm +opening out like the largest telescope that ever was! Good-bye, feet!' +(for when she looked down at her feet, they seemed to be almost out of +sight, they were getting so far off). 'Oh, my poor little feet, I wonder +who will put on your shoes and stockings for you now, dears? I'm sure +_I_ shan't be able! I shall be a great deal too far off to trouble +myself about you: you must manage the best way you can;--but I must be +kind to them,' thought Alice, 'or perhaps they won't walk the way I want +to go! Let me see: I'll give them a new pair of boots every Christmas.' + +And she went on planning to herself how she would manage it. 'They must +go by the carrier,' she thought; 'and how funny it'll seem, sending +presents to one's own feet! And how odd the directions will look! + + ALICE'S RIGHT FOOT, ESQ. + HEARTHRUG, + NEAR THE FENDER, + (WITH ALICE'S LOVE). + +Oh dear, what nonsense I'm talking!' + +Just then her head struck against the roof of the hall: in fact she was +now more than nine feet high, and she at once took up the little golden +key and hurried off to the garden door. + +Poor Alice! It was as much as she could do, lying down on one side, to +look through into the garden with one eye; but to get through was more +hopeless than ever: she sat down and began to cry again. + +'You ought to be ashamed of yourself,' said Alice, 'a great girl like +you,' (she might well say this), 'to go on crying in this way! Stop this +moment, I tell you!' But she went on all the same, shedding gallons of +tears, until there was a large pool all round her, about four inches +deep and reaching half down the hall. + +After a time she heard a little pattering of feet in the distance, and +she hastily dried her eyes to see what was coming. It was the White +Rabbit returning, splendidly dressed, with a pair of white kid gloves in +one hand and a large fan in the other: he came trotting along in a great +hurry, muttering to himself as he came, 'Oh! the Duchess, the Duchess! +Oh! won't she be savage if I've kept her waiting!' Alice felt so +desperate that she was ready to ask help of any one; so, when the Rabbit +came near her, she began, in a low, timid voice, 'If you please, sir--' +The Rabbit started violently, dropped the white kid gloves and the fan, +and skurried away into the darkness as hard as he could go. + +Alice took up the fan and gloves, and, as the hall was very hot, she +kept fanning herself all the time she went on talking: 'Dear, dear! How +queer everything is to-day! And yesterday things went on just as usual. +I wonder if I've been changed in the night? Let me think: was I the +same when I got up this morning? I almost think I can remember feeling a +little different. But if I'm not the same, the next question is, Who +in the world am I? Ah, THAT'S the great puzzle!' And she began thinking +over all the children she knew that were of the same age as herself, to +see if she could have been changed for any of them. + +'I'm sure I'm not Ada,' she said, 'for her hair goes in such long +ringlets, and mine doesn't go in ringlets at all; and I'm sure I can't +be Mabel, for I know all sorts of things, and she, oh! she knows such a +very little! Besides, SHE'S she, and I'm I, and--oh dear, how puzzling +it all is! I'll try if I know all the things I used to know. Let me +see: four times five is twelve, and four times six is thirteen, and +four times seven is--oh dear! I shall never get to twenty at that rate! +However, the Multiplication Table doesn't signify: let's try Geography. +London is the capital of Paris, and Paris is the capital of Rome, and +Rome--no, THAT'S all wrong, I'm certain! I must have been changed for +Mabel! I'll try and say "How doth the little--"' and she crossed her +hands on her lap as if she were saying lessons, and began to repeat it, +but her voice sounded hoarse and strange, and the words did not come the +same as they used to do:-- + + 'How doth the little crocodile + Improve his shining tail, + And pour the waters of the Nile + On every golden scale! + + 'How cheerfully he seems to grin, + How neatly spread his claws, + And welcome little fishes in + With gently smiling jaws!' + +'I'm sure those are not the right words,' said poor Alice, and her eyes +filled with tears again as she went on, 'I must be Mabel after all, and +I shall have to go and live in that poky little house, and have next to +no toys to play with, and oh! ever so many lessons to learn! No, I've +made up my mind about it; if I'm Mabel, I'll stay down here! It'll be no +use their putting their heads down and saying "Come up again, dear!" I +shall only look up and say "Who am I then? Tell me that first, and then, +if I like being that person, I'll come up: if not, I'll stay down here +till I'm somebody else"--but, oh dear!' cried Alice, with a sudden burst +of tears, 'I do wish they WOULD put their heads down! I am so VERY tired +of being all alone here!' + +As she said this she looked down at her hands, and was surprised to see +that she had put on one of the Rabbit's little white kid gloves while +she was talking. 'How CAN I have done that?' she thought. 'I must +be growing small again.' She got up and went to the table to measure +herself by it, and found that, as nearly as she could guess, she was now +about two feet high, and was going on shrinking rapidly: she soon found +out that the cause of this was the fan she was holding, and she dropped +it hastily, just in time to avoid shrinking away altogether. + +'That WAS a narrow escape!' said Alice, a good deal frightened at the +sudden change, but very glad to find herself still in existence; 'and +now for the garden!' and she ran with all speed back to the little door: +but, alas! the little door was shut again, and the little golden key was +lying on the glass table as before, 'and things are worse than ever,' +thought the poor child, 'for I never was so small as this before, never! +And I declare it's too bad, that it is!' + +As she said these words her foot slipped, and in another moment, splash! +she was up to her chin in salt water. Her first idea was that she +had somehow fallen into the sea, 'and in that case I can go back by +railway,' she said to herself. (Alice had been to the seaside once in +her life, and had come to the general conclusion, that wherever you go +to on the English coast you find a number of bathing machines in the +sea, some children digging in the sand with wooden spades, then a row +of lodging houses, and behind them a railway station.) However, she soon +made out that she was in the pool of tears which she had wept when she +was nine feet high. + +'I wish I hadn't cried so much!' said Alice, as she swam about, trying +to find her way out. 'I shall be punished for it now, I suppose, by +being drowned in my own tears! That WILL be a queer thing, to be sure! +However, everything is queer to-day.' + +Just then she heard something splashing about in the pool a little way +off, and she swam nearer to make out what it was: at first she thought +it must be a walrus or hippopotamus, but then she remembered how small +she was now, and she soon made out that it was only a mouse that had +slipped in like herself. + +'Would it be of any use, now,' thought Alice, 'to speak to this mouse? +Everything is so out-of-the-way down here, that I should think very +likely it can talk: at any rate, there's no harm in trying.' So she +began: 'O Mouse, do you know the way out of this pool? I am very tired +of swimming about here, O Mouse!' (Alice thought this must be the right +way of speaking to a mouse: she had never done such a thing before, but +she remembered having seen in her brother's Latin Grammar, 'A mouse--of +a mouse--to a mouse--a mouse--O mouse!') The Mouse looked at her rather +inquisitively, and seemed to her to wink with one of its little eyes, +but it said nothing. + +'Perhaps it doesn't understand English,' thought Alice; 'I daresay it's +a French mouse, come over with William the Conqueror.' (For, with all +her knowledge of history, Alice had no very clear notion how long ago +anything had happened.) So she began again: 'Ou est ma chatte?' which +was the first sentence in her French lesson-book. The Mouse gave a +sudden leap out of the water, and seemed to quiver all over with fright. +'Oh, I beg your pardon!' cried Alice hastily, afraid that she had hurt +the poor animal's feelings. 'I quite forgot you didn't like cats.' + +'Not like cats!' cried the Mouse, in a shrill, passionate voice. 'Would +YOU like cats if you were me?' + +'Well, perhaps not,' said Alice in a soothing tone: 'don't be angry +about it. And yet I wish I could show you our cat Dinah: I think you'd +take a fancy to cats if you could only see her. She is such a dear quiet +thing,' Alice went on, half to herself, as she swam lazily about in the +pool, 'and she sits purring so nicely by the fire, licking her paws and +washing her face--and she is such a nice soft thing to nurse--and she's +such a capital one for catching mice--oh, I beg your pardon!' cried +Alice again, for this time the Mouse was bristling all over, and she +felt certain it must be really offended. 'We won't talk about her any +more if you'd rather not.' + +'We indeed!' cried the Mouse, who was trembling down to the end of his +tail. 'As if I would talk on such a subject! Our family always HATED +cats: nasty, low, vulgar things! Don't let me hear the name again!' + +'I won't indeed!' said Alice, in a great hurry to change the subject of +conversation. 'Are you--are you fond--of--of dogs?' The Mouse did not +answer, so Alice went on eagerly: 'There is such a nice little dog near +our house I should like to show you! A little bright-eyed terrier, you +know, with oh, such long curly brown hair! And it'll fetch things when +you throw them, and it'll sit up and beg for its dinner, and all sorts +of things--I can't remember half of them--and it belongs to a farmer, +you know, and he says it's so useful, it's worth a hundred pounds! He +says it kills all the rats and--oh dear!' cried Alice in a sorrowful +tone, 'I'm afraid I've offended it again!' For the Mouse was swimming +away from her as hard as it could go, and making quite a commotion in +the pool as it went. + +So she called softly after it, 'Mouse dear! Do come back again, and we +won't talk about cats or dogs either, if you don't like them!' When the +Mouse heard this, it turned round and swam slowly back to her: its +face was quite pale (with passion, Alice thought), and it said in a low +trembling voice, 'Let us get to the shore, and then I'll tell you my +history, and you'll understand why it is I hate cats and dogs.' + +It was high time to go, for the pool was getting quite crowded with the +birds and animals that had fallen into it: there were a Duck and a Dodo, +a Lory and an Eaglet, and several other curious creatures. Alice led the +way, and the whole party swam to the shore. + + + + +CHAPTER III. A Caucus-Race and a Long Tale + +They were indeed a queer-looking party that assembled on the bank--the +birds with draggled feathers, the animals with their fur clinging close +to them, and all dripping wet, cross, and uncomfortable. + +The first question of course was, how to get dry again: they had a +consultation about this, and after a few minutes it seemed quite natural +to Alice to find herself talking familiarly with them, as if she had +known them all her life. Indeed, she had quite a long argument with the +Lory, who at last turned sulky, and would only say, 'I am older than +you, and must know better'; and this Alice would not allow without +knowing how old it was, and, as the Lory positively refused to tell its +age, there was no more to be said. + +At last the Mouse, who seemed to be a person of authority among them, +called out, 'Sit down, all of you, and listen to me! I'LL soon make you +dry enough!' They all sat down at once, in a large ring, with the Mouse +in the middle. Alice kept her eyes anxiously fixed on it, for she felt +sure she would catch a bad cold if she did not get dry very soon. + +'Ahem!' said the Mouse with an important air, 'are you all ready? This +is the driest thing I know. Silence all round, if you please! "William +the Conqueror, whose cause was favoured by the pope, was soon submitted +to by the English, who wanted leaders, and had been of late much +accustomed to usurpation and conquest. Edwin and Morcar, the earls of +Mercia and Northumbria--"' + +'Ugh!' said the Lory, with a shiver. + +'I beg your pardon!' said the Mouse, frowning, but very politely: 'Did +you speak?' + +'Not I!' said the Lory hastily. + +'I thought you did,' said the Mouse. '--I proceed. "Edwin and Morcar, +the earls of Mercia and Northumbria, declared for him: and even Stigand, +the patriotic archbishop of Canterbury, found it advisable--"' + +'Found WHAT?' said the Duck. + +'Found IT,' the Mouse replied rather crossly: 'of course you know what +"it" means.' + +'I know what "it" means well enough, when I find a thing,' said the +Duck: 'it's generally a frog or a worm. The question is, what did the +archbishop find?' + +The Mouse did not notice this question, but hurriedly went on, '"--found +it advisable to go with Edgar Atheling to meet William and offer him the +crown. William's conduct at first was moderate. But the insolence of his +Normans--" How are you getting on now, my dear?' it continued, turning +to Alice as it spoke. + +'As wet as ever,' said Alice in a melancholy tone: 'it doesn't seem to +dry me at all.' + +'In that case,' said the Dodo solemnly, rising to its feet, 'I move +that the meeting adjourn, for the immediate adoption of more energetic +remedies--' + +'Speak English!' said the Eaglet. 'I don't know the meaning of half +those long words, and, what's more, I don't believe you do either!' And +the Eaglet bent down its head to hide a smile: some of the other birds +tittered audibly. + +'What I was going to say,' said the Dodo in an offended tone, 'was, that +the best thing to get us dry would be a Caucus-race.' + +'What IS a Caucus-race?' said Alice; not that she wanted much to know, +but the Dodo had paused as if it thought that SOMEBODY ought to speak, +and no one else seemed inclined to say anything. + +'Why,' said the Dodo, 'the best way to explain it is to do it.' (And, as +you might like to try the thing yourself, some winter day, I will tell +you how the Dodo managed it.) + +First it marked out a race-course, in a sort of circle, ('the exact +shape doesn't matter,' it said,) and then all the party were placed +along the course, here and there. There was no 'One, two, three, and +away,' but they began running when they liked, and left off when they +liked, so that it was not easy to know when the race was over. However, +when they had been running half an hour or so, and were quite dry again, +the Dodo suddenly called out 'The race is over!' and they all crowded +round it, panting, and asking, 'But who has won?' + +This question the Dodo could not answer without a great deal of thought, +and it sat for a long time with one finger pressed upon its forehead +(the position in which you usually see Shakespeare, in the pictures +of him), while the rest waited in silence. At last the Dodo said, +'EVERYBODY has won, and all must have prizes.' + +'But who is to give the prizes?' quite a chorus of voices asked. + +'Why, SHE, of course,' said the Dodo, pointing to Alice with one finger; +and the whole party at once crowded round her, calling out in a confused +way, 'Prizes! Prizes!' + +Alice had no idea what to do, and in despair she put her hand in her +pocket, and pulled out a box of comfits, (luckily the salt water had +not got into it), and handed them round as prizes. There was exactly one +a-piece all round. + +'But she must have a prize herself, you know,' said the Mouse. + +'Of course,' the Dodo replied very gravely. 'What else have you got in +your pocket?' he went on, turning to Alice. + +'Only a thimble,' said Alice sadly. + +'Hand it over here,' said the Dodo. + +Then they all crowded round her once more, while the Dodo solemnly +presented the thimble, saying 'We beg your acceptance of this elegant +thimble'; and, when it had finished this short speech, they all cheered. + +Alice thought the whole thing very absurd, but they all looked so grave +that she did not dare to laugh; and, as she could not think of anything +to say, she simply bowed, and took the thimble, looking as solemn as she +could. + +The next thing was to eat the comfits: this caused some noise and +confusion, as the large birds complained that they could not taste +theirs, and the small ones choked and had to be patted on the back. +However, it was over at last, and they sat down again in a ring, and +begged the Mouse to tell them something more. + +'You promised to tell me your history, you know,' said Alice, 'and why +it is you hate--C and D,' she added in a whisper, half afraid that it +would be offended again. + +'Mine is a long and a sad tale!' said the Mouse, turning to Alice, and +sighing. + +'It IS a long tail, certainly,' said Alice, looking down with wonder at +the Mouse's tail; 'but why do you call it sad?' And she kept on puzzling +about it while the Mouse was speaking, so that her idea of the tale was +something like this:-- + + 'Fury said to a + mouse, That he + met in the + house, + "Let us + both go to + law: I will + prosecute + YOU.--Come, + I'll take no + denial; We + must have a + trial: For + really this + morning I've + nothing + to do." + Said the + mouse to the + cur, "Such + a trial, + dear Sir, + With + no jury + or judge, + would be + wasting + our + breath." + "I'll be + judge, I'll + be jury," + Said + cunning + old Fury: + "I'll + try the + whole + cause, + and + condemn + you + to + death."' + + +'You are not attending!' said the Mouse to Alice severely. 'What are you +thinking of?' + +'I beg your pardon,' said Alice very humbly: 'you had got to the fifth +bend, I think?' + +'I had NOT!' cried the Mouse, sharply and very angrily. + +'A knot!' said Alice, always ready to make herself useful, and looking +anxiously about her. 'Oh, do let me help to undo it!' + +'I shall do nothing of the sort,' said the Mouse, getting up and walking +away. 'You insult me by talking such nonsense!' + +'I didn't mean it!' pleaded poor Alice. 'But you're so easily offended, +you know!' + +The Mouse only growled in reply. + +'Please come back and finish your story!' Alice called after it; and the +others all joined in chorus, 'Yes, please do!' but the Mouse only shook +its head impatiently, and walked a little quicker. + +'What a pity it wouldn't stay!' sighed the Lory, as soon as it was quite +out of sight; and an old Crab took the opportunity of saying to her +daughter 'Ah, my dear! Let this be a lesson to you never to lose +YOUR temper!' 'Hold your tongue, Ma!' said the young Crab, a little +snappishly. 'You're enough to try the patience of an oyster!' + +'I wish I had our Dinah here, I know I do!' said Alice aloud, addressing +nobody in particular. 'She'd soon fetch it back!' + +'And who is Dinah, if I might venture to ask the question?' said the +Lory. + +Alice replied eagerly, for she was always ready to talk about her pet: +'Dinah's our cat. And she's such a capital one for catching mice you +can't think! And oh, I wish you could see her after the birds! Why, +she'll eat a little bird as soon as look at it!' + +This speech caused a remarkable sensation among the party. Some of the +birds hurried off at once: one old Magpie began wrapping itself up very +carefully, remarking, 'I really must be getting home; the night-air +doesn't suit my throat!' and a Canary called out in a trembling voice to +its children, 'Come away, my dears! It's high time you were all in bed!' +On various pretexts they all moved off, and Alice was soon left alone. + +'I wish I hadn't mentioned Dinah!' she said to herself in a melancholy +tone. 'Nobody seems to like her, down here, and I'm sure she's the best +cat in the world! Oh, my dear Dinah! I wonder if I shall ever see you +any more!' And here poor Alice began to cry again, for she felt very +lonely and low-spirited. In a little while, however, she again heard +a little pattering of footsteps in the distance, and she looked up +eagerly, half hoping that the Mouse had changed his mind, and was coming +back to finish his story. + + + + +CHAPTER IV. The Rabbit Sends in a Little Bill + +It was the White Rabbit, trotting slowly back again, and looking +anxiously about as it went, as if it had lost something; and she heard +it muttering to itself 'The Duchess! The Duchess! Oh my dear paws! Oh +my fur and whiskers! She'll get me executed, as sure as ferrets are +ferrets! Where CAN I have dropped them, I wonder?' Alice guessed in a +moment that it was looking for the fan and the pair of white kid gloves, +and she very good-naturedly began hunting about for them, but they were +nowhere to be seen--everything seemed to have changed since her swim in +the pool, and the great hall, with the glass table and the little door, +had vanished completely. + +Very soon the Rabbit noticed Alice, as she went hunting about, and +called out to her in an angry tone, 'Why, Mary Ann, what ARE you doing +out here? Run home this moment, and fetch me a pair of gloves and a fan! +Quick, now!' And Alice was so much frightened that she ran off at once +in the direction it pointed to, without trying to explain the mistake it +had made. + +'He took me for his housemaid,' she said to herself as she ran. 'How +surprised he'll be when he finds out who I am! But I'd better take him +his fan and gloves--that is, if I can find them.' As she said this, she +came upon a neat little house, on the door of which was a bright brass +plate with the name 'W. RABBIT' engraved upon it. She went in without +knocking, and hurried upstairs, in great fear lest she should meet the +real Mary Ann, and be turned out of the house before she had found the +fan and gloves. + +'How queer it seems,' Alice said to herself, 'to be going messages for +a rabbit! I suppose Dinah'll be sending me on messages next!' And she +began fancying the sort of thing that would happen: '"Miss Alice! Come +here directly, and get ready for your walk!" "Coming in a minute, +nurse! But I've got to see that the mouse doesn't get out." Only I don't +think,' Alice went on, 'that they'd let Dinah stop in the house if it +began ordering people about like that!' + +By this time she had found her way into a tidy little room with a table +in the window, and on it (as she had hoped) a fan and two or three pairs +of tiny white kid gloves: she took up the fan and a pair of the gloves, +and was just going to leave the room, when her eye fell upon a little +bottle that stood near the looking-glass. There was no label this time +with the words 'DRINK ME,' but nevertheless she uncorked it and put it +to her lips. 'I know SOMETHING interesting is sure to happen,' she said +to herself, 'whenever I eat or drink anything; so I'll just see what +this bottle does. I do hope it'll make me grow large again, for really +I'm quite tired of being such a tiny little thing!' + +It did so indeed, and much sooner than she had expected: before she had +drunk half the bottle, she found her head pressing against the ceiling, +and had to stoop to save her neck from being broken. She hastily put +down the bottle, saying to herself 'That's quite enough--I hope I shan't +grow any more--As it is, I can't get out at the door--I do wish I hadn't +drunk quite so much!' + +Alas! it was too late to wish that! She went on growing, and growing, +and very soon had to kneel down on the floor: in another minute there +was not even room for this, and she tried the effect of lying down with +one elbow against the door, and the other arm curled round her head. +Still she went on growing, and, as a last resource, she put one arm out +of the window, and one foot up the chimney, and said to herself 'Now I +can do no more, whatever happens. What WILL become of me?' + +Luckily for Alice, the little magic bottle had now had its full effect, +and she grew no larger: still it was very uncomfortable, and, as there +seemed to be no sort of chance of her ever getting out of the room +again, no wonder she felt unhappy. + +'It was much pleasanter at home,' thought poor Alice, 'when one wasn't +always growing larger and smaller, and being ordered about by mice and +rabbits. I almost wish I hadn't gone down that rabbit-hole--and yet--and +yet--it's rather curious, you know, this sort of life! I do wonder what +CAN have happened to me! When I used to read fairy-tales, I fancied that +kind of thing never happened, and now here I am in the middle of one! +There ought to be a book written about me, that there ought! And when I +grow up, I'll write one--but I'm grown up now,' she added in a sorrowful +tone; 'at least there's no room to grow up any more HERE.' + +'But then,' thought Alice, 'shall I NEVER get any older than I am +now? That'll be a comfort, one way--never to be an old woman--but +then--always to have lessons to learn! Oh, I shouldn't like THAT!' + +'Oh, you foolish Alice!' she answered herself. 'How can you learn +lessons in here? Why, there's hardly room for YOU, and no room at all +for any lesson-books!' + +And so she went on, taking first one side and then the other, and making +quite a conversation of it altogether; but after a few minutes she heard +a voice outside, and stopped to listen. + +'Mary Ann! Mary Ann!' said the voice. 'Fetch me my gloves this moment!' +Then came a little pattering of feet on the stairs. Alice knew it was +the Rabbit coming to look for her, and she trembled till she shook the +house, quite forgetting that she was now about a thousand times as large +as the Rabbit, and had no reason to be afraid of it. + +Presently the Rabbit came up to the door, and tried to open it; but, as +the door opened inwards, and Alice's elbow was pressed hard against it, +that attempt proved a failure. Alice heard it say to itself 'Then I'll +go round and get in at the window.' + +'THAT you won't' thought Alice, and, after waiting till she fancied +she heard the Rabbit just under the window, she suddenly spread out her +hand, and made a snatch in the air. She did not get hold of anything, +but she heard a little shriek and a fall, and a crash of broken glass, +from which she concluded that it was just possible it had fallen into a +cucumber-frame, or something of the sort. + +Next came an angry voice--the Rabbit's--'Pat! Pat! Where are you?' And +then a voice she had never heard before, 'Sure then I'm here! Digging +for apples, yer honour!' + +'Digging for apples, indeed!' said the Rabbit angrily. 'Here! Come and +help me out of THIS!' (Sounds of more broken glass.) + +'Now tell me, Pat, what's that in the window?' + +'Sure, it's an arm, yer honour!' (He pronounced it 'arrum.') + +'An arm, you goose! Who ever saw one that size? Why, it fills the whole +window!' + +'Sure, it does, yer honour: but it's an arm for all that.' + +'Well, it's got no business there, at any rate: go and take it away!' + +There was a long silence after this, and Alice could only hear whispers +now and then; such as, 'Sure, I don't like it, yer honour, at all, at +all!' 'Do as I tell you, you coward!' and at last she spread out her +hand again, and made another snatch in the air. This time there were +TWO little shrieks, and more sounds of broken glass. 'What a number of +cucumber-frames there must be!' thought Alice. 'I wonder what they'll do +next! As for pulling me out of the window, I only wish they COULD! I'm +sure I don't want to stay in here any longer!' + +She waited for some time without hearing anything more: at last came a +rumbling of little cartwheels, and the sound of a good many voices +all talking together: she made out the words: 'Where's the other +ladder?--Why, I hadn't to bring but one; Bill's got the other--Bill! +fetch it here, lad!--Here, put 'em up at this corner--No, tie 'em +together first--they don't reach half high enough yet--Oh! they'll +do well enough; don't be particular--Here, Bill! catch hold of this +rope--Will the roof bear?--Mind that loose slate--Oh, it's coming +down! Heads below!' (a loud crash)--'Now, who did that?--It was Bill, I +fancy--Who's to go down the chimney?--Nay, I shan't! YOU do it!--That I +won't, then!--Bill's to go down--Here, Bill! the master says you're to +go down the chimney!' + +'Oh! So Bill's got to come down the chimney, has he?' said Alice to +herself. 'Shy, they seem to put everything upon Bill! I wouldn't be in +Bill's place for a good deal: this fireplace is narrow, to be sure; but +I THINK I can kick a little!' + +She drew her foot as far down the chimney as she could, and waited +till she heard a little animal (she couldn't guess of what sort it was) +scratching and scrambling about in the chimney close above her: then, +saying to herself 'This is Bill,' she gave one sharp kick, and waited to +see what would happen next. + +The first thing she heard was a general chorus of 'There goes Bill!' +then the Rabbit's voice along--'Catch him, you by the hedge!' then +silence, and then another confusion of voices--'Hold up his head--Brandy +now--Don't choke him--How was it, old fellow? What happened to you? Tell +us all about it!' + +Last came a little feeble, squeaking voice, ('That's Bill,' thought +Alice,) 'Well, I hardly know--No more, thank ye; I'm better now--but I'm +a deal too flustered to tell you--all I know is, something comes at me +like a Jack-in-the-box, and up I goes like a sky-rocket!' + +'So you did, old fellow!' said the others. + +'We must burn the house down!' said the Rabbit's voice; and Alice called +out as loud as she could, 'If you do. I'll set Dinah at you!' + +There was a dead silence instantly, and Alice thought to herself, 'I +wonder what they WILL do next! If they had any sense, they'd take the +roof off.' After a minute or two, they began moving about again, and +Alice heard the Rabbit say, 'A barrowful will do, to begin with.' + +'A barrowful of WHAT?' thought Alice; but she had not long to doubt, +for the next moment a shower of little pebbles came rattling in at the +window, and some of them hit her in the face. 'I'll put a stop to this,' +she said to herself, and shouted out, 'You'd better not do that again!' +which produced another dead silence. + +Alice noticed with some surprise that the pebbles were all turning into +little cakes as they lay on the floor, and a bright idea came into her +head. 'If I eat one of these cakes,' she thought, 'it's sure to make +SOME change in my size; and as it can't possibly make me larger, it must +make me smaller, I suppose.' + +So she swallowed one of the cakes, and was delighted to find that she +began shrinking directly. As soon as she was small enough to get through +the door, she ran out of the house, and found quite a crowd of little +animals and birds waiting outside. The poor little Lizard, Bill, was +in the middle, being held up by two guinea-pigs, who were giving it +something out of a bottle. They all made a rush at Alice the moment she +appeared; but she ran off as hard as she could, and soon found herself +safe in a thick wood. + +'The first thing I've got to do,' said Alice to herself, as she wandered +about in the wood, 'is to grow to my right size again; and the second +thing is to find my way into that lovely garden. I think that will be +the best plan.' + +It sounded an excellent plan, no doubt, and very neatly and simply +arranged; the only difficulty was, that she had not the smallest idea +how to set about it; and while she was peering about anxiously among +the trees, a little sharp bark just over her head made her look up in a +great hurry. + +An enormous puppy was looking down at her with large round eyes, and +feebly stretching out one paw, trying to touch her. 'Poor little thing!' +said Alice, in a coaxing tone, and she tried hard to whistle to it; but +she was terribly frightened all the time at the thought that it might be +hungry, in which case it would be very likely to eat her up in spite of +all her coaxing. + +Hardly knowing what she did, she picked up a little bit of stick, and +held it out to the puppy; whereupon the puppy jumped into the air off +all its feet at once, with a yelp of delight, and rushed at the stick, +and made believe to worry it; then Alice dodged behind a great thistle, +to keep herself from being run over; and the moment she appeared on the +other side, the puppy made another rush at the stick, and tumbled head +over heels in its hurry to get hold of it; then Alice, thinking it was +very like having a game of play with a cart-horse, and expecting every +moment to be trampled under its feet, ran round the thistle again; then +the puppy began a series of short charges at the stick, running a very +little way forwards each time and a long way back, and barking hoarsely +all the while, till at last it sat down a good way off, panting, with +its tongue hanging out of its mouth, and its great eyes half shut. + +This seemed to Alice a good opportunity for making her escape; so she +set off at once, and ran till she was quite tired and out of breath, and +till the puppy's bark sounded quite faint in the distance. + +'And yet what a dear little puppy it was!' said Alice, as she leant +against a buttercup to rest herself, and fanned herself with one of the +leaves: 'I should have liked teaching it tricks very much, if--if I'd +only been the right size to do it! Oh dear! I'd nearly forgotten that +I've got to grow up again! Let me see--how IS it to be managed? I +suppose I ought to eat or drink something or other; but the great +question is, what?' + +The great question certainly was, what? Alice looked all round her at +the flowers and the blades of grass, but she did not see anything that +looked like the right thing to eat or drink under the circumstances. +There was a large mushroom growing near her, about the same height as +herself; and when she had looked under it, and on both sides of it, and +behind it, it occurred to her that she might as well look and see what +was on the top of it. + +She stretched herself up on tiptoe, and peeped over the edge of the +mushroom, and her eyes immediately met those of a large caterpillar, +that was sitting on the top with its arms folded, quietly smoking a long +hookah, and taking not the smallest notice of her or of anything else. + + + + +CHAPTER V. Advice from a Caterpillar + +The Caterpillar and Alice looked at each other for some time in silence: +at last the Caterpillar took the hookah out of its mouth, and addressed +her in a languid, sleepy voice. + +'Who are YOU?' said the Caterpillar. + +This was not an encouraging opening for a conversation. Alice replied, +rather shyly, 'I--I hardly know, sir, just at present--at least I know +who I WAS when I got up this morning, but I think I must have been +changed several times since then.' + +'What do you mean by that?' said the Caterpillar sternly. 'Explain +yourself!' + +'I can't explain MYSELF, I'm afraid, sir' said Alice, 'because I'm not +myself, you see.' + +'I don't see,' said the Caterpillar. + +'I'm afraid I can't put it more clearly,' Alice replied very politely, +'for I can't understand it myself to begin with; and being so many +different sizes in a day is very confusing.' + +'It isn't,' said the Caterpillar. + +'Well, perhaps you haven't found it so yet,' said Alice; 'but when you +have to turn into a chrysalis--you will some day, you know--and then +after that into a butterfly, I should think you'll feel it a little +queer, won't you?' + +'Not a bit,' said the Caterpillar. + +'Well, perhaps your feelings may be different,' said Alice; 'all I know +is, it would feel very queer to ME.' + +'You!' said the Caterpillar contemptuously. 'Who are YOU?' + +Which brought them back again to the beginning of the conversation. +Alice felt a little irritated at the Caterpillar's making such VERY +short remarks, and she drew herself up and said, very gravely, 'I think, +you ought to tell me who YOU are, first.' + +'Why?' said the Caterpillar. + +Here was another puzzling question; and as Alice could not think of any +good reason, and as the Caterpillar seemed to be in a VERY unpleasant +state of mind, she turned away. + +'Come back!' the Caterpillar called after her. 'I've something important +to say!' + +This sounded promising, certainly: Alice turned and came back again. + +'Keep your temper,' said the Caterpillar. + +'Is that all?' said Alice, swallowing down her anger as well as she +could. + +'No,' said the Caterpillar. + +Alice thought she might as well wait, as she had nothing else to do, and +perhaps after all it might tell her something worth hearing. For some +minutes it puffed away without speaking, but at last it unfolded its +arms, took the hookah out of its mouth again, and said, 'So you think +you're changed, do you?' + +'I'm afraid I am, sir,' said Alice; 'I can't remember things as I +used--and I don't keep the same size for ten minutes together!' + +'Can't remember WHAT things?' said the Caterpillar. + +'Well, I've tried to say "HOW DOTH THE LITTLE BUSY BEE," but it all came +different!' Alice replied in a very melancholy voice. + +'Repeat, "YOU ARE OLD, FATHER WILLIAM,"' said the Caterpillar. + +Alice folded her hands, and began:-- + + 'You are old, Father William,' the young man said, + 'And your hair has become very white; + And yet you incessantly stand on your head-- + Do you think, at your age, it is right?' + + 'In my youth,' Father William replied to his son, + 'I feared it might injure the brain; + But, now that I'm perfectly sure I have none, + Why, I do it again and again.' + + 'You are old,' said the youth, 'as I mentioned before, + And have grown most uncommonly fat; + Yet you turned a back-somersault in at the door-- + Pray, what is the reason of that?' + + 'In my youth,' said the sage, as he shook his grey locks, + 'I kept all my limbs very supple + By the use of this ointment--one shilling the box-- + Allow me to sell you a couple?' + + 'You are old,' said the youth, 'and your jaws are too weak + For anything tougher than suet; + Yet you finished the goose, with the bones and the beak-- + Pray how did you manage to do it?' + + 'In my youth,' said his father, 'I took to the law, + And argued each case with my wife; + And the muscular strength, which it gave to my jaw, + Has lasted the rest of my life.' + + 'You are old,' said the youth, 'one would hardly suppose + That your eye was as steady as ever; + Yet you balanced an eel on the end of your nose-- + What made you so awfully clever?' + + 'I have answered three questions, and that is enough,' + Said his father; 'don't give yourself airs! + Do you think I can listen all day to such stuff? + Be off, or I'll kick you down stairs!' + + +'That is not said right,' said the Caterpillar. + +'Not QUITE right, I'm afraid,' said Alice, timidly; 'some of the words +have got altered.' + +'It is wrong from beginning to end,' said the Caterpillar decidedly, and +there was silence for some minutes. + +The Caterpillar was the first to speak. + +'What size do you want to be?' it asked. + +'Oh, I'm not particular as to size,' Alice hastily replied; 'only one +doesn't like changing so often, you know.' + +'I DON'T know,' said the Caterpillar. + +Alice said nothing: she had never been so much contradicted in her life +before, and she felt that she was losing her temper. + +'Are you content now?' said the Caterpillar. + +'Well, I should like to be a LITTLE larger, sir, if you wouldn't mind,' +said Alice: 'three inches is such a wretched height to be.' + +'It is a very good height indeed!' said the Caterpillar angrily, rearing +itself upright as it spoke (it was exactly three inches high). + +'But I'm not used to it!' pleaded poor Alice in a piteous tone. And +she thought of herself, 'I wish the creatures wouldn't be so easily +offended!' + +'You'll get used to it in time,' said the Caterpillar; and it put the +hookah into its mouth and began smoking again. + +This time Alice waited patiently until it chose to speak again. In +a minute or two the Caterpillar took the hookah out of its mouth +and yawned once or twice, and shook itself. Then it got down off the +mushroom, and crawled away in the grass, merely remarking as it went, +'One side will make you grow taller, and the other side will make you +grow shorter.' + +'One side of WHAT? The other side of WHAT?' thought Alice to herself. + +'Of the mushroom,' said the Caterpillar, just as if she had asked it +aloud; and in another moment it was out of sight. + +Alice remained looking thoughtfully at the mushroom for a minute, trying +to make out which were the two sides of it; and as it was perfectly +round, she found this a very difficult question. However, at last she +stretched her arms round it as far as they would go, and broke off a bit +of the edge with each hand. + +'And now which is which?' she said to herself, and nibbled a little of +the right-hand bit to try the effect: the next moment she felt a violent +blow underneath her chin: it had struck her foot! + +She was a good deal frightened by this very sudden change, but she felt +that there was no time to be lost, as she was shrinking rapidly; so she +set to work at once to eat some of the other bit. Her chin was pressed +so closely against her foot, that there was hardly room to open her +mouth; but she did it at last, and managed to swallow a morsel of the +lefthand bit. + + + * * * * * * * + + * * * * * * + + * * * * * * * + +'Come, my head's free at last!' said Alice in a tone of delight, which +changed into alarm in another moment, when she found that her shoulders +were nowhere to be found: all she could see, when she looked down, was +an immense length of neck, which seemed to rise like a stalk out of a +sea of green leaves that lay far below her. + +'What CAN all that green stuff be?' said Alice. 'And where HAVE my +shoulders got to? And oh, my poor hands, how is it I can't see you?' +She was moving them about as she spoke, but no result seemed to follow, +except a little shaking among the distant green leaves. + +As there seemed to be no chance of getting her hands up to her head, she +tried to get her head down to them, and was delighted to find that her +neck would bend about easily in any direction, like a serpent. She had +just succeeded in curving it down into a graceful zigzag, and was going +to dive in among the leaves, which she found to be nothing but the tops +of the trees under which she had been wandering, when a sharp hiss made +her draw back in a hurry: a large pigeon had flown into her face, and +was beating her violently with its wings. + +'Serpent!' screamed the Pigeon. + +'I'm NOT a serpent!' said Alice indignantly. 'Let me alone!' + +'Serpent, I say again!' repeated the Pigeon, but in a more subdued tone, +and added with a kind of sob, 'I've tried every way, and nothing seems +to suit them!' + +'I haven't the least idea what you're talking about,' said Alice. + +'I've tried the roots of trees, and I've tried banks, and I've tried +hedges,' the Pigeon went on, without attending to her; 'but those +serpents! There's no pleasing them!' + +Alice was more and more puzzled, but she thought there was no use in +saying anything more till the Pigeon had finished. + +'As if it wasn't trouble enough hatching the eggs,' said the Pigeon; +'but I must be on the look-out for serpents night and day! Why, I +haven't had a wink of sleep these three weeks!' + +'I'm very sorry you've been annoyed,' said Alice, who was beginning to +see its meaning. + +'And just as I'd taken the highest tree in the wood,' continued the +Pigeon, raising its voice to a shriek, 'and just as I was thinking I +should be free of them at last, they must needs come wriggling down from +the sky! Ugh, Serpent!' + +'But I'm NOT a serpent, I tell you!' said Alice. 'I'm a--I'm a--' + +'Well! WHAT are you?' said the Pigeon. 'I can see you're trying to +invent something!' + +'I--I'm a little girl,' said Alice, rather doubtfully, as she remembered +the number of changes she had gone through that day. + +'A likely story indeed!' said the Pigeon in a tone of the deepest +contempt. 'I've seen a good many little girls in my time, but never ONE +with such a neck as that! No, no! You're a serpent; and there's no use +denying it. I suppose you'll be telling me next that you never tasted an +egg!' + +'I HAVE tasted eggs, certainly,' said Alice, who was a very truthful +child; 'but little girls eat eggs quite as much as serpents do, you +know.' + +'I don't believe it,' said the Pigeon; 'but if they do, why then they're +a kind of serpent, that's all I can say.' + +This was such a new idea to Alice, that she was quite silent for a +minute or two, which gave the Pigeon the opportunity of adding, 'You're +looking for eggs, I know THAT well enough; and what does it matter to me +whether you're a little girl or a serpent?' + +'It matters a good deal to ME,' said Alice hastily; 'but I'm not looking +for eggs, as it happens; and if I was, I shouldn't want YOURS: I don't +like them raw.' + +'Well, be off, then!' said the Pigeon in a sulky tone, as it settled +down again into its nest. Alice crouched down among the trees as well as +she could, for her neck kept getting entangled among the branches, and +every now and then she had to stop and untwist it. After a while she +remembered that she still held the pieces of mushroom in her hands, and +she set to work very carefully, nibbling first at one and then at the +other, and growing sometimes taller and sometimes shorter, until she had +succeeded in bringing herself down to her usual height. + +It was so long since she had been anything near the right size, that it +felt quite strange at first; but she got used to it in a few minutes, +and began talking to herself, as usual. 'Come, there's half my plan done +now! How puzzling all these changes are! I'm never sure what I'm going +to be, from one minute to another! However, I've got back to my right +size: the next thing is, to get into that beautiful garden--how IS that +to be done, I wonder?' As she said this, she came suddenly upon an open +place, with a little house in it about four feet high. 'Whoever lives +there,' thought Alice, 'it'll never do to come upon them THIS size: why, +I should frighten them out of their wits!' So she began nibbling at the +righthand bit again, and did not venture to go near the house till she +had brought herself down to nine inches high. + + + + +CHAPTER VI. Pig and Pepper + +For a minute or two she stood looking at the house, and wondering what +to do next, when suddenly a footman in livery came running out of the +wood--(she considered him to be a footman because he was in livery: +otherwise, judging by his face only, she would have called him a +fish)--and rapped loudly at the door with his knuckles. It was opened +by another footman in livery, with a round face, and large eyes like a +frog; and both footmen, Alice noticed, had powdered hair that curled all +over their heads. She felt very curious to know what it was all about, +and crept a little way out of the wood to listen. + +The Fish-Footman began by producing from under his arm a great letter, +nearly as large as himself, and this he handed over to the other, +saying, in a solemn tone, 'For the Duchess. An invitation from the Queen +to play croquet.' The Frog-Footman repeated, in the same solemn tone, +only changing the order of the words a little, 'From the Queen. An +invitation for the Duchess to play croquet.' + +Then they both bowed low, and their curls got entangled together. + +Alice laughed so much at this, that she had to run back into the +wood for fear of their hearing her; and when she next peeped out the +Fish-Footman was gone, and the other was sitting on the ground near the +door, staring stupidly up into the sky. + +Alice went timidly up to the door, and knocked. + +'There's no sort of use in knocking,' said the Footman, 'and that for +two reasons. First, because I'm on the same side of the door as you +are; secondly, because they're making such a noise inside, no one could +possibly hear you.' And certainly there was a most extraordinary noise +going on within--a constant howling and sneezing, and every now and then +a great crash, as if a dish or kettle had been broken to pieces. + +'Please, then,' said Alice, 'how am I to get in?' + +'There might be some sense in your knocking,' the Footman went on +without attending to her, 'if we had the door between us. For instance, +if you were INSIDE, you might knock, and I could let you out, you know.' +He was looking up into the sky all the time he was speaking, and this +Alice thought decidedly uncivil. 'But perhaps he can't help it,' she +said to herself; 'his eyes are so VERY nearly at the top of his head. +But at any rate he might answer questions.--How am I to get in?' she +repeated, aloud. + +'I shall sit here,' the Footman remarked, 'till tomorrow--' + +At this moment the door of the house opened, and a large plate came +skimming out, straight at the Footman's head: it just grazed his nose, +and broke to pieces against one of the trees behind him. + +'--or next day, maybe,' the Footman continued in the same tone, exactly +as if nothing had happened. + +'How am I to get in?' asked Alice again, in a louder tone. + +'ARE you to get in at all?' said the Footman. 'That's the first +question, you know.' + +It was, no doubt: only Alice did not like to be told so. 'It's really +dreadful,' she muttered to herself, 'the way all the creatures argue. +It's enough to drive one crazy!' + +The Footman seemed to think this a good opportunity for repeating his +remark, with variations. 'I shall sit here,' he said, 'on and off, for +days and days.' + +'But what am I to do?' said Alice. + +'Anything you like,' said the Footman, and began whistling. + +'Oh, there's no use in talking to him,' said Alice desperately: 'he's +perfectly idiotic!' And she opened the door and went in. + +The door led right into a large kitchen, which was full of smoke from +one end to the other: the Duchess was sitting on a three-legged stool in +the middle, nursing a baby; the cook was leaning over the fire, stirring +a large cauldron which seemed to be full of soup. + +'There's certainly too much pepper in that soup!' Alice said to herself, +as well as she could for sneezing. + +There was certainly too much of it in the air. Even the Duchess +sneezed occasionally; and as for the baby, it was sneezing and howling +alternately without a moment's pause. The only things in the kitchen +that did not sneeze, were the cook, and a large cat which was sitting on +the hearth and grinning from ear to ear. + +'Please would you tell me,' said Alice, a little timidly, for she was +not quite sure whether it was good manners for her to speak first, 'why +your cat grins like that?' + +'It's a Cheshire cat,' said the Duchess, 'and that's why. Pig!' + +She said the last word with such sudden violence that Alice quite +jumped; but she saw in another moment that it was addressed to the baby, +and not to her, so she took courage, and went on again:-- + +'I didn't know that Cheshire cats always grinned; in fact, I didn't know +that cats COULD grin.' + +'They all can,' said the Duchess; 'and most of 'em do.' + +'I don't know of any that do,' Alice said very politely, feeling quite +pleased to have got into a conversation. + +'You don't know much,' said the Duchess; 'and that's a fact.' + +Alice did not at all like the tone of this remark, and thought it would +be as well to introduce some other subject of conversation. While she +was trying to fix on one, the cook took the cauldron of soup off the +fire, and at once set to work throwing everything within her reach at +the Duchess and the baby--the fire-irons came first; then followed a +shower of saucepans, plates, and dishes. The Duchess took no notice of +them even when they hit her; and the baby was howling so much already, +that it was quite impossible to say whether the blows hurt it or not. + +'Oh, PLEASE mind what you're doing!' cried Alice, jumping up and down in +an agony of terror. 'Oh, there goes his PRECIOUS nose'; as an unusually +large saucepan flew close by it, and very nearly carried it off. + +'If everybody minded their own business,' the Duchess said in a hoarse +growl, 'the world would go round a deal faster than it does.' + +'Which would NOT be an advantage,' said Alice, who felt very glad to get +an opportunity of showing off a little of her knowledge. 'Just think of +what work it would make with the day and night! You see the earth takes +twenty-four hours to turn round on its axis--' + +'Talking of axes,' said the Duchess, 'chop off her head!' + +Alice glanced rather anxiously at the cook, to see if she meant to take +the hint; but the cook was busily stirring the soup, and seemed not to +be listening, so she went on again: 'Twenty-four hours, I THINK; or is +it twelve? I--' + +'Oh, don't bother ME,' said the Duchess; 'I never could abide figures!' +And with that she began nursing her child again, singing a sort of +lullaby to it as she did so, and giving it a violent shake at the end of +every line: + + 'Speak roughly to your little boy, + And beat him when he sneezes: + He only does it to annoy, + Because he knows it teases.' + + CHORUS. + + (In which the cook and the baby joined):-- + + 'Wow! wow! wow!' + +While the Duchess sang the second verse of the song, she kept tossing +the baby violently up and down, and the poor little thing howled so, +that Alice could hardly hear the words:-- + + 'I speak severely to my boy, + I beat him when he sneezes; + For he can thoroughly enjoy + The pepper when he pleases!' + + CHORUS. + + 'Wow! wow! wow!' + +'Here! you may nurse it a bit, if you like!' the Duchess said to Alice, +flinging the baby at her as she spoke. 'I must go and get ready to play +croquet with the Queen,' and she hurried out of the room. The cook threw +a frying-pan after her as she went out, but it just missed her. + +Alice caught the baby with some difficulty, as it was a queer-shaped +little creature, and held out its arms and legs in all directions, 'just +like a star-fish,' thought Alice. The poor little thing was snorting +like a steam-engine when she caught it, and kept doubling itself up and +straightening itself out again, so that altogether, for the first minute +or two, it was as much as she could do to hold it. + +As soon as she had made out the proper way of nursing it, (which was to +twist it up into a sort of knot, and then keep tight hold of its right +ear and left foot, so as to prevent its undoing itself,) she carried +it out into the open air. 'IF I don't take this child away with me,' +thought Alice, 'they're sure to kill it in a day or two: wouldn't it be +murder to leave it behind?' She said the last words out loud, and the +little thing grunted in reply (it had left off sneezing by this time). +'Don't grunt,' said Alice; 'that's not at all a proper way of expressing +yourself.' + +The baby grunted again, and Alice looked very anxiously into its face to +see what was the matter with it. There could be no doubt that it had +a VERY turn-up nose, much more like a snout than a real nose; also its +eyes were getting extremely small for a baby: altogether Alice did not +like the look of the thing at all. 'But perhaps it was only sobbing,' +she thought, and looked into its eyes again, to see if there were any +tears. + +No, there were no tears. 'If you're going to turn into a pig, my dear,' +said Alice, seriously, 'I'll have nothing more to do with you. Mind +now!' The poor little thing sobbed again (or grunted, it was impossible +to say which), and they went on for some while in silence. + +Alice was just beginning to think to herself, 'Now, what am I to do with +this creature when I get it home?' when it grunted again, so violently, +that she looked down into its face in some alarm. This time there could +be NO mistake about it: it was neither more nor less than a pig, and she +felt that it would be quite absurd for her to carry it further. + +So she set the little creature down, and felt quite relieved to see +it trot away quietly into the wood. 'If it had grown up,' she said +to herself, 'it would have made a dreadfully ugly child: but it makes +rather a handsome pig, I think.' And she began thinking over other +children she knew, who might do very well as pigs, and was just saying +to herself, 'if one only knew the right way to change them--' when she +was a little startled by seeing the Cheshire Cat sitting on a bough of a +tree a few yards off. + +The Cat only grinned when it saw Alice. It looked good-natured, she +thought: still it had VERY long claws and a great many teeth, so she +felt that it ought to be treated with respect. + +'Cheshire Puss,' she began, rather timidly, as she did not at all know +whether it would like the name: however, it only grinned a little wider. +'Come, it's pleased so far,' thought Alice, and she went on. 'Would you +tell me, please, which way I ought to go from here?' + +'That depends a good deal on where you want to get to,' said the Cat. + +'I don't much care where--' said Alice. + +'Then it doesn't matter which way you go,' said the Cat. + +'--so long as I get SOMEWHERE,' Alice added as an explanation. + +'Oh, you're sure to do that,' said the Cat, 'if you only walk long +enough.' + +Alice felt that this could not be denied, so she tried another question. +'What sort of people live about here?' + +'In THAT direction,' the Cat said, waving its right paw round, 'lives +a Hatter: and in THAT direction,' waving the other paw, 'lives a March +Hare. Visit either you like: they're both mad.' + +'But I don't want to go among mad people,' Alice remarked. + +'Oh, you can't help that,' said the Cat: 'we're all mad here. I'm mad. +You're mad.' + +'How do you know I'm mad?' said Alice. + +'You must be,' said the Cat, 'or you wouldn't have come here.' + +Alice didn't think that proved it at all; however, she went on 'And how +do you know that you're mad?' + +'To begin with,' said the Cat, 'a dog's not mad. You grant that?' + +'I suppose so,' said Alice. + +'Well, then,' the Cat went on, 'you see, a dog growls when it's angry, +and wags its tail when it's pleased. Now I growl when I'm pleased, and +wag my tail when I'm angry. Therefore I'm mad.' + +'I call it purring, not growling,' said Alice. + +'Call it what you like,' said the Cat. 'Do you play croquet with the +Queen to-day?' + +'I should like it very much,' said Alice, 'but I haven't been invited +yet.' + +'You'll see me there,' said the Cat, and vanished. + +Alice was not much surprised at this, she was getting so used to queer +things happening. While she was looking at the place where it had been, +it suddenly appeared again. + +'By-the-bye, what became of the baby?' said the Cat. 'I'd nearly +forgotten to ask.' + +'It turned into a pig,' Alice quietly said, just as if it had come back +in a natural way. + +'I thought it would,' said the Cat, and vanished again. + +Alice waited a little, half expecting to see it again, but it did not +appear, and after a minute or two she walked on in the direction in +which the March Hare was said to live. 'I've seen hatters before,' she +said to herself; 'the March Hare will be much the most interesting, and +perhaps as this is May it won't be raving mad--at least not so mad as +it was in March.' As she said this, she looked up, and there was the Cat +again, sitting on a branch of a tree. + +'Did you say pig, or fig?' said the Cat. + +'I said pig,' replied Alice; 'and I wish you wouldn't keep appearing and +vanishing so suddenly: you make one quite giddy.' + +'All right,' said the Cat; and this time it vanished quite slowly, +beginning with the end of the tail, and ending with the grin, which +remained some time after the rest of it had gone. + +'Well! I've often seen a cat without a grin,' thought Alice; 'but a grin +without a cat! It's the most curious thing I ever saw in my life!' + +She had not gone much farther before she came in sight of the house +of the March Hare: she thought it must be the right house, because the +chimneys were shaped like ears and the roof was thatched with fur. It +was so large a house, that she did not like to go nearer till she had +nibbled some more of the lefthand bit of mushroom, and raised herself to +about two feet high: even then she walked up towards it rather timidly, +saying to herself 'Suppose it should be raving mad after all! I almost +wish I'd gone to see the Hatter instead!' + + + + +CHAPTER VII. A Mad Tea-Party + +There was a table set out under a tree in front of the house, and the +March Hare and the Hatter were having tea at it: a Dormouse was sitting +between them, fast asleep, and the other two were using it as a +cushion, resting their elbows on it, and talking over its head. 'Very +uncomfortable for the Dormouse,' thought Alice; 'only, as it's asleep, I +suppose it doesn't mind.' + +The table was a large one, but the three were all crowded together at +one corner of it: 'No room! No room!' they cried out when they saw Alice +coming. 'There's PLENTY of room!' said Alice indignantly, and she sat +down in a large arm-chair at one end of the table. + +'Have some wine,' the March Hare said in an encouraging tone. + +Alice looked all round the table, but there was nothing on it but tea. +'I don't see any wine,' she remarked. + +'There isn't any,' said the March Hare. + +'Then it wasn't very civil of you to offer it,' said Alice angrily. + +'It wasn't very civil of you to sit down without being invited,' said +the March Hare. + +'I didn't know it was YOUR table,' said Alice; 'it's laid for a great +many more than three.' + +'Your hair wants cutting,' said the Hatter. He had been looking at Alice +for some time with great curiosity, and this was his first speech. + +'You should learn not to make personal remarks,' Alice said with some +severity; 'it's very rude.' + +The Hatter opened his eyes very wide on hearing this; but all he SAID +was, 'Why is a raven like a writing-desk?' + +'Come, we shall have some fun now!' thought Alice. 'I'm glad they've +begun asking riddles.--I believe I can guess that,' she added aloud. + +'Do you mean that you think you can find out the answer to it?' said the +March Hare. + +'Exactly so,' said Alice. + +'Then you should say what you mean,' the March Hare went on. + +'I do,' Alice hastily replied; 'at least--at least I mean what I +say--that's the same thing, you know.' + +'Not the same thing a bit!' said the Hatter. 'You might just as well say +that "I see what I eat" is the same thing as "I eat what I see"!' + +'You might just as well say,' added the March Hare, 'that "I like what I +get" is the same thing as "I get what I like"!' + +'You might just as well say,' added the Dormouse, who seemed to be +talking in his sleep, 'that "I breathe when I sleep" is the same thing +as "I sleep when I breathe"!' + +'It IS the same thing with you,' said the Hatter, and here the +conversation dropped, and the party sat silent for a minute, while Alice +thought over all she could remember about ravens and writing-desks, +which wasn't much. + +The Hatter was the first to break the silence. 'What day of the month +is it?' he said, turning to Alice: he had taken his watch out of his +pocket, and was looking at it uneasily, shaking it every now and then, +and holding it to his ear. + +Alice considered a little, and then said 'The fourth.' + +'Two days wrong!' sighed the Hatter. 'I told you butter wouldn't suit +the works!' he added looking angrily at the March Hare. + +'It was the BEST butter,' the March Hare meekly replied. + +'Yes, but some crumbs must have got in as well,' the Hatter grumbled: +'you shouldn't have put it in with the bread-knife.' + +The March Hare took the watch and looked at it gloomily: then he dipped +it into his cup of tea, and looked at it again: but he could think of +nothing better to say than his first remark, 'It was the BEST butter, +you know.' + +Alice had been looking over his shoulder with some curiosity. 'What a +funny watch!' she remarked. 'It tells the day of the month, and doesn't +tell what o'clock it is!' + +'Why should it?' muttered the Hatter. 'Does YOUR watch tell you what +year it is?' + +'Of course not,' Alice replied very readily: 'but that's because it +stays the same year for such a long time together.' + +'Which is just the case with MINE,' said the Hatter. + +Alice felt dreadfully puzzled. The Hatter's remark seemed to have no +sort of meaning in it, and yet it was certainly English. 'I don't quite +understand you,' she said, as politely as she could. + +'The Dormouse is asleep again,' said the Hatter, and he poured a little +hot tea upon its nose. + +The Dormouse shook its head impatiently, and said, without opening its +eyes, 'Of course, of course; just what I was going to remark myself.' + +'Have you guessed the riddle yet?' the Hatter said, turning to Alice +again. + +'No, I give it up,' Alice replied: 'what's the answer?' + +'I haven't the slightest idea,' said the Hatter. + +'Nor I,' said the March Hare. + +Alice sighed wearily. 'I think you might do something better with the +time,' she said, 'than waste it in asking riddles that have no answers.' + +'If you knew Time as well as I do,' said the Hatter, 'you wouldn't talk +about wasting IT. It's HIM.' + +'I don't know what you mean,' said Alice. + +'Of course you don't!' the Hatter said, tossing his head contemptuously. +'I dare say you never even spoke to Time!' + +'Perhaps not,' Alice cautiously replied: 'but I know I have to beat time +when I learn music.' + +'Ah! that accounts for it,' said the Hatter. 'He won't stand beating. +Now, if you only kept on good terms with him, he'd do almost anything +you liked with the clock. For instance, suppose it were nine o'clock in +the morning, just time to begin lessons: you'd only have to whisper a +hint to Time, and round goes the clock in a twinkling! Half-past one, +time for dinner!' + +('I only wish it was,' the March Hare said to itself in a whisper.) + +'That would be grand, certainly,' said Alice thoughtfully: 'but then--I +shouldn't be hungry for it, you know.' + +'Not at first, perhaps,' said the Hatter: 'but you could keep it to +half-past one as long as you liked.' + +'Is that the way YOU manage?' Alice asked. + +The Hatter shook his head mournfully. 'Not I!' he replied. 'We +quarrelled last March--just before HE went mad, you know--' (pointing +with his tea spoon at the March Hare,) '--it was at the great concert +given by the Queen of Hearts, and I had to sing + + "Twinkle, twinkle, little bat! + How I wonder what you're at!" + +You know the song, perhaps?' + +'I've heard something like it,' said Alice. + +'It goes on, you know,' the Hatter continued, 'in this way:-- + + "Up above the world you fly, + Like a tea-tray in the sky. + Twinkle, twinkle--"' + +Here the Dormouse shook itself, and began singing in its sleep 'Twinkle, +twinkle, twinkle, twinkle--' and went on so long that they had to pinch +it to make it stop. + +'Well, I'd hardly finished the first verse,' said the Hatter, 'when the +Queen jumped up and bawled out, "He's murdering the time! Off with his +head!"' + +'How dreadfully savage!' exclaimed Alice. + +'And ever since that,' the Hatter went on in a mournful tone, 'he won't +do a thing I ask! It's always six o'clock now.' + +A bright idea came into Alice's head. 'Is that the reason so many +tea-things are put out here?' she asked. + +'Yes, that's it,' said the Hatter with a sigh: 'it's always tea-time, +and we've no time to wash the things between whiles.' + +'Then you keep moving round, I suppose?' said Alice. + +'Exactly so,' said the Hatter: 'as the things get used up.' + +'But what happens when you come to the beginning again?' Alice ventured +to ask. + +'Suppose we change the subject,' the March Hare interrupted, yawning. +'I'm getting tired of this. I vote the young lady tells us a story.' + +'I'm afraid I don't know one,' said Alice, rather alarmed at the +proposal. + +'Then the Dormouse shall!' they both cried. 'Wake up, Dormouse!' And +they pinched it on both sides at once. + +The Dormouse slowly opened his eyes. 'I wasn't asleep,' he said in a +hoarse, feeble voice: 'I heard every word you fellows were saying.' + +'Tell us a story!' said the March Hare. + +'Yes, please do!' pleaded Alice. + +'And be quick about it,' added the Hatter, 'or you'll be asleep again +before it's done.' + +'Once upon a time there were three little sisters,' the Dormouse began +in a great hurry; 'and their names were Elsie, Lacie, and Tillie; and +they lived at the bottom of a well--' + +'What did they live on?' said Alice, who always took a great interest in +questions of eating and drinking. + +'They lived on treacle,' said the Dormouse, after thinking a minute or +two. + +'They couldn't have done that, you know,' Alice gently remarked; 'they'd +have been ill.' + +'So they were,' said the Dormouse; 'VERY ill.' + +Alice tried to fancy to herself what such an extraordinary ways of +living would be like, but it puzzled her too much, so she went on: 'But +why did they live at the bottom of a well?' + +'Take some more tea,' the March Hare said to Alice, very earnestly. + +'I've had nothing yet,' Alice replied in an offended tone, 'so I can't +take more.' + +'You mean you can't take LESS,' said the Hatter: 'it's very easy to take +MORE than nothing.' + +'Nobody asked YOUR opinion,' said Alice. + +'Who's making personal remarks now?' the Hatter asked triumphantly. + +Alice did not quite know what to say to this: so she helped herself +to some tea and bread-and-butter, and then turned to the Dormouse, and +repeated her question. 'Why did they live at the bottom of a well?' + +The Dormouse again took a minute or two to think about it, and then +said, 'It was a treacle-well.' + +'There's no such thing!' Alice was beginning very angrily, but the +Hatter and the March Hare went 'Sh! sh!' and the Dormouse sulkily +remarked, 'If you can't be civil, you'd better finish the story for +yourself.' + +'No, please go on!' Alice said very humbly; 'I won't interrupt again. I +dare say there may be ONE.' + +'One, indeed!' said the Dormouse indignantly. However, he consented to +go on. 'And so these three little sisters--they were learning to draw, +you know--' + +'What did they draw?' said Alice, quite forgetting her promise. + +'Treacle,' said the Dormouse, without considering at all this time. + +'I want a clean cup,' interrupted the Hatter: 'let's all move one place +on.' + +He moved on as he spoke, and the Dormouse followed him: the March Hare +moved into the Dormouse's place, and Alice rather unwillingly took +the place of the March Hare. The Hatter was the only one who got any +advantage from the change: and Alice was a good deal worse off than +before, as the March Hare had just upset the milk-jug into his plate. + +Alice did not wish to offend the Dormouse again, so she began very +cautiously: 'But I don't understand. Where did they draw the treacle +from?' + +'You can draw water out of a water-well,' said the Hatter; 'so I should +think you could draw treacle out of a treacle-well--eh, stupid?' + +'But they were IN the well,' Alice said to the Dormouse, not choosing to +notice this last remark. + +'Of course they were', said the Dormouse; '--well in.' + +This answer so confused poor Alice, that she let the Dormouse go on for +some time without interrupting it. + +'They were learning to draw,' the Dormouse went on, yawning and rubbing +its eyes, for it was getting very sleepy; 'and they drew all manner of +things--everything that begins with an M--' + +'Why with an M?' said Alice. + +'Why not?' said the March Hare. + +Alice was silent. + +The Dormouse had closed its eyes by this time, and was going off into +a doze; but, on being pinched by the Hatter, it woke up again with +a little shriek, and went on: '--that begins with an M, such as +mouse-traps, and the moon, and memory, and muchness--you know you say +things are "much of a muchness"--did you ever see such a thing as a +drawing of a muchness?' + +'Really, now you ask me,' said Alice, very much confused, 'I don't +think--' + +'Then you shouldn't talk,' said the Hatter. + +This piece of rudeness was more than Alice could bear: she got up in +great disgust, and walked off; the Dormouse fell asleep instantly, and +neither of the others took the least notice of her going, though she +looked back once or twice, half hoping that they would call after her: +the last time she saw them, they were trying to put the Dormouse into +the teapot. + +'At any rate I'll never go THERE again!' said Alice as she picked her +way through the wood. 'It's the stupidest tea-party I ever was at in all +my life!' + +Just as she said this, she noticed that one of the trees had a door +leading right into it. 'That's very curious!' she thought. 'But +everything's curious today. I think I may as well go in at once.' And in +she went. + +Once more she found herself in the long hall, and close to the little +glass table. 'Now, I'll manage better this time,' she said to herself, +and began by taking the little golden key, and unlocking the door that +led into the garden. Then she went to work nibbling at the mushroom (she +had kept a piece of it in her pocket) till she was about a foot high: +then she walked down the little passage: and THEN--she found herself at +last in the beautiful garden, among the bright flower-beds and the cool +fountains. + + + + +CHAPTER VIII. The Queen's Croquet-Ground + +A large rose-tree stood near the entrance of the garden: the roses +growing on it were white, but there were three gardeners at it, busily +painting them red. Alice thought this a very curious thing, and she went +nearer to watch them, and just as she came up to them she heard one of +them say, 'Look out now, Five! Don't go splashing paint over me like +that!' + +'I couldn't help it,' said Five, in a sulky tone; 'Seven jogged my +elbow.' + +On which Seven looked up and said, 'That's right, Five! Always lay the +blame on others!' + +'YOU'D better not talk!' said Five. 'I heard the Queen say only +yesterday you deserved to be beheaded!' + +'What for?' said the one who had spoken first. + +'That's none of YOUR business, Two!' said Seven. + +'Yes, it IS his business!' said Five, 'and I'll tell him--it was for +bringing the cook tulip-roots instead of onions.' + +Seven flung down his brush, and had just begun 'Well, of all the unjust +things--' when his eye chanced to fall upon Alice, as she stood watching +them, and he checked himself suddenly: the others looked round also, and +all of them bowed low. + +'Would you tell me,' said Alice, a little timidly, 'why you are painting +those roses?' + +Five and Seven said nothing, but looked at Two. Two began in a low +voice, 'Why the fact is, you see, Miss, this here ought to have been a +RED rose-tree, and we put a white one in by mistake; and if the Queen +was to find it out, we should all have our heads cut off, you know. +So you see, Miss, we're doing our best, afore she comes, to--' At this +moment Five, who had been anxiously looking across the garden, called +out 'The Queen! The Queen!' and the three gardeners instantly threw +themselves flat upon their faces. There was a sound of many footsteps, +and Alice looked round, eager to see the Queen. + +First came ten soldiers carrying clubs; these were all shaped like +the three gardeners, oblong and flat, with their hands and feet at the +corners: next the ten courtiers; these were ornamented all over with +diamonds, and walked two and two, as the soldiers did. After these came +the royal children; there were ten of them, and the little dears came +jumping merrily along hand in hand, in couples: they were all ornamented +with hearts. Next came the guests, mostly Kings and Queens, and among +them Alice recognised the White Rabbit: it was talking in a hurried +nervous manner, smiling at everything that was said, and went by without +noticing her. Then followed the Knave of Hearts, carrying the King's +crown on a crimson velvet cushion; and, last of all this grand +procession, came THE KING AND QUEEN OF HEARTS. + +Alice was rather doubtful whether she ought not to lie down on her face +like the three gardeners, but she could not remember ever having heard +of such a rule at processions; 'and besides, what would be the use of +a procession,' thought she, 'if people had all to lie down upon their +faces, so that they couldn't see it?' So she stood still where she was, +and waited. + +When the procession came opposite to Alice, they all stopped and looked +at her, and the Queen said severely 'Who is this?' She said it to the +Knave of Hearts, who only bowed and smiled in reply. + +'Idiot!' said the Queen, tossing her head impatiently; and, turning to +Alice, she went on, 'What's your name, child?' + +'My name is Alice, so please your Majesty,' said Alice very politely; +but she added, to herself, 'Why, they're only a pack of cards, after +all. I needn't be afraid of them!' + +'And who are THESE?' said the Queen, pointing to the three gardeners who +were lying round the rosetree; for, you see, as they were lying on their +faces, and the pattern on their backs was the same as the rest of the +pack, she could not tell whether they were gardeners, or soldiers, or +courtiers, or three of her own children. + +'How should I know?' said Alice, surprised at her own courage. 'It's no +business of MINE.' + +The Queen turned crimson with fury, and, after glaring at her for a +moment like a wild beast, screamed 'Off with her head! Off--' + +'Nonsense!' said Alice, very loudly and decidedly, and the Queen was +silent. + +The King laid his hand upon her arm, and timidly said 'Consider, my +dear: she is only a child!' + +The Queen turned angrily away from him, and said to the Knave 'Turn them +over!' + +The Knave did so, very carefully, with one foot. + +'Get up!' said the Queen, in a shrill, loud voice, and the three +gardeners instantly jumped up, and began bowing to the King, the Queen, +the royal children, and everybody else. + +'Leave off that!' screamed the Queen. 'You make me giddy.' And then, +turning to the rose-tree, she went on, 'What HAVE you been doing here?' + +'May it please your Majesty,' said Two, in a very humble tone, going +down on one knee as he spoke, 'we were trying--' + +'I see!' said the Queen, who had meanwhile been examining the roses. +'Off with their heads!' and the procession moved on, three of the +soldiers remaining behind to execute the unfortunate gardeners, who ran +to Alice for protection. + +'You shan't be beheaded!' said Alice, and she put them into a large +flower-pot that stood near. The three soldiers wandered about for a +minute or two, looking for them, and then quietly marched off after the +others. + +'Are their heads off?' shouted the Queen. + +'Their heads are gone, if it please your Majesty!' the soldiers shouted +in reply. + +'That's right!' shouted the Queen. 'Can you play croquet?' + +The soldiers were silent, and looked at Alice, as the question was +evidently meant for her. + +'Yes!' shouted Alice. + +'Come on, then!' roared the Queen, and Alice joined the procession, +wondering very much what would happen next. + +'It's--it's a very fine day!' said a timid voice at her side. She was +walking by the White Rabbit, who was peeping anxiously into her face. + +'Very,' said Alice: '--where's the Duchess?' + +'Hush! Hush!' said the Rabbit in a low, hurried tone. He looked +anxiously over his shoulder as he spoke, and then raised himself upon +tiptoe, put his mouth close to her ear, and whispered 'She's under +sentence of execution.' + +'What for?' said Alice. + +'Did you say "What a pity!"?' the Rabbit asked. + +'No, I didn't,' said Alice: 'I don't think it's at all a pity. I said +"What for?"' + +'She boxed the Queen's ears--' the Rabbit began. Alice gave a little +scream of laughter. 'Oh, hush!' the Rabbit whispered in a frightened +tone. 'The Queen will hear you! You see, she came rather late, and the +Queen said--' + +'Get to your places!' shouted the Queen in a voice of thunder, and +people began running about in all directions, tumbling up against each +other; however, they got settled down in a minute or two, and the game +began. Alice thought she had never seen such a curious croquet-ground in +her life; it was all ridges and furrows; the balls were live hedgehogs, +the mallets live flamingoes, and the soldiers had to double themselves +up and to stand on their hands and feet, to make the arches. + +The chief difficulty Alice found at first was in managing her flamingo: +she succeeded in getting its body tucked away, comfortably enough, under +her arm, with its legs hanging down, but generally, just as she had got +its neck nicely straightened out, and was going to give the hedgehog a +blow with its head, it WOULD twist itself round and look up in her face, +with such a puzzled expression that she could not help bursting out +laughing: and when she had got its head down, and was going to begin +again, it was very provoking to find that the hedgehog had unrolled +itself, and was in the act of crawling away: besides all this, there was +generally a ridge or furrow in the way wherever she wanted to send the +hedgehog to, and, as the doubled-up soldiers were always getting up +and walking off to other parts of the ground, Alice soon came to the +conclusion that it was a very difficult game indeed. + +The players all played at once without waiting for turns, quarrelling +all the while, and fighting for the hedgehogs; and in a very short +time the Queen was in a furious passion, and went stamping about, and +shouting 'Off with his head!' or 'Off with her head!' about once in a +minute. + +Alice began to feel very uneasy: to be sure, she had not as yet had any +dispute with the Queen, but she knew that it might happen any minute, +'and then,' thought she, 'what would become of me? They're dreadfully +fond of beheading people here; the great wonder is, that there's any one +left alive!' + +She was looking about for some way of escape, and wondering whether she +could get away without being seen, when she noticed a curious appearance +in the air: it puzzled her very much at first, but, after watching it +a minute or two, she made it out to be a grin, and she said to herself +'It's the Cheshire Cat: now I shall have somebody to talk to.' + +'How are you getting on?' said the Cat, as soon as there was mouth +enough for it to speak with. + +Alice waited till the eyes appeared, and then nodded. 'It's no use +speaking to it,' she thought, 'till its ears have come, or at least one +of them.' In another minute the whole head appeared, and then Alice put +down her flamingo, and began an account of the game, feeling very glad +she had someone to listen to her. The Cat seemed to think that there was +enough of it now in sight, and no more of it appeared. + +'I don't think they play at all fairly,' Alice began, in rather a +complaining tone, 'and they all quarrel so dreadfully one can't hear +oneself speak--and they don't seem to have any rules in particular; +at least, if there are, nobody attends to them--and you've no idea how +confusing it is all the things being alive; for instance, there's the +arch I've got to go through next walking about at the other end of the +ground--and I should have croqueted the Queen's hedgehog just now, only +it ran away when it saw mine coming!' + +'How do you like the Queen?' said the Cat in a low voice. + +'Not at all,' said Alice: 'she's so extremely--' Just then she noticed +that the Queen was close behind her, listening: so she went on, +'--likely to win, that it's hardly worth while finishing the game.' + +The Queen smiled and passed on. + +'Who ARE you talking to?' said the King, going up to Alice, and looking +at the Cat's head with great curiosity. + +'It's a friend of mine--a Cheshire Cat,' said Alice: 'allow me to +introduce it.' + +'I don't like the look of it at all,' said the King: 'however, it may +kiss my hand if it likes.' + +'I'd rather not,' the Cat remarked. + +'Don't be impertinent,' said the King, 'and don't look at me like that!' +He got behind Alice as he spoke. + +'A cat may look at a king,' said Alice. 'I've read that in some book, +but I don't remember where.' + +'Well, it must be removed,' said the King very decidedly, and he called +the Queen, who was passing at the moment, 'My dear! I wish you would +have this cat removed!' + +The Queen had only one way of settling all difficulties, great or small. +'Off with his head!' she said, without even looking round. + +'I'll fetch the executioner myself,' said the King eagerly, and he +hurried off. + +Alice thought she might as well go back, and see how the game was going +on, as she heard the Queen's voice in the distance, screaming with +passion. She had already heard her sentence three of the players to be +executed for having missed their turns, and she did not like the look +of things at all, as the game was in such confusion that she never knew +whether it was her turn or not. So she went in search of her hedgehog. + +The hedgehog was engaged in a fight with another hedgehog, which seemed +to Alice an excellent opportunity for croqueting one of them with the +other: the only difficulty was, that her flamingo was gone across to the +other side of the garden, where Alice could see it trying in a helpless +sort of way to fly up into a tree. + +By the time she had caught the flamingo and brought it back, the fight +was over, and both the hedgehogs were out of sight: 'but it doesn't +matter much,' thought Alice, 'as all the arches are gone from this side +of the ground.' So she tucked it away under her arm, that it might not +escape again, and went back for a little more conversation with her +friend. + +When she got back to the Cheshire Cat, she was surprised to find quite a +large crowd collected round it: there was a dispute going on between +the executioner, the King, and the Queen, who were all talking at once, +while all the rest were quite silent, and looked very uncomfortable. + +The moment Alice appeared, she was appealed to by all three to settle +the question, and they repeated their arguments to her, though, as they +all spoke at once, she found it very hard indeed to make out exactly +what they said. + +The executioner's argument was, that you couldn't cut off a head unless +there was a body to cut it off from: that he had never had to do such a +thing before, and he wasn't going to begin at HIS time of life. + +The King's argument was, that anything that had a head could be +beheaded, and that you weren't to talk nonsense. + +The Queen's argument was, that if something wasn't done about it in less +than no time she'd have everybody executed, all round. (It was this last +remark that had made the whole party look so grave and anxious.) + +Alice could think of nothing else to say but 'It belongs to the Duchess: +you'd better ask HER about it.' + +'She's in prison,' the Queen said to the executioner: 'fetch her here.' +And the executioner went off like an arrow. + + The Cat's head began fading away the moment he was gone, and, +by the time he had come back with the Duchess, it had entirely +disappeared; so the King and the executioner ran wildly up and down +looking for it, while the rest of the party went back to the game. + + + + +CHAPTER IX. The Mock Turtle's Story + +'You can't think how glad I am to see you again, you dear old thing!' +said the Duchess, as she tucked her arm affectionately into Alice's, and +they walked off together. + +Alice was very glad to find her in such a pleasant temper, and thought +to herself that perhaps it was only the pepper that had made her so +savage when they met in the kitchen. + +'When I'M a Duchess,' she said to herself, (not in a very hopeful tone +though), 'I won't have any pepper in my kitchen AT ALL. Soup does very +well without--Maybe it's always pepper that makes people hot-tempered,' +she went on, very much pleased at having found out a new kind of +rule, 'and vinegar that makes them sour--and camomile that makes +them bitter--and--and barley-sugar and such things that make children +sweet-tempered. I only wish people knew that: then they wouldn't be so +stingy about it, you know--' + +She had quite forgotten the Duchess by this time, and was a little +startled when she heard her voice close to her ear. 'You're thinking +about something, my dear, and that makes you forget to talk. I can't +tell you just now what the moral of that is, but I shall remember it in +a bit.' + +'Perhaps it hasn't one,' Alice ventured to remark. + +'Tut, tut, child!' said the Duchess. 'Everything's got a moral, if only +you can find it.' And she squeezed herself up closer to Alice's side as +she spoke. + +Alice did not much like keeping so close to her: first, because the +Duchess was VERY ugly; and secondly, because she was exactly the +right height to rest her chin upon Alice's shoulder, and it was an +uncomfortably sharp chin. However, she did not like to be rude, so she +bore it as well as she could. + +'The game's going on rather better now,' she said, by way of keeping up +the conversation a little. + +''Tis so,' said the Duchess: 'and the moral of that is--"Oh, 'tis love, +'tis love, that makes the world go round!"' + +'Somebody said,' Alice whispered, 'that it's done by everybody minding +their own business!' + +'Ah, well! It means much the same thing,' said the Duchess, digging her +sharp little chin into Alice's shoulder as she added, 'and the moral +of THAT is--"Take care of the sense, and the sounds will take care of +themselves."' + +'How fond she is of finding morals in things!' Alice thought to herself. + +'I dare say you're wondering why I don't put my arm round your waist,' +the Duchess said after a pause: 'the reason is, that I'm doubtful about +the temper of your flamingo. Shall I try the experiment?' + +'HE might bite,' Alice cautiously replied, not feeling at all anxious to +have the experiment tried. + +'Very true,' said the Duchess: 'flamingoes and mustard both bite. And +the moral of that is--"Birds of a feather flock together."' + +'Only mustard isn't a bird,' Alice remarked. + +'Right, as usual,' said the Duchess: 'what a clear way you have of +putting things!' + +'It's a mineral, I THINK,' said Alice. + +'Of course it is,' said the Duchess, who seemed ready to agree to +everything that Alice said; 'there's a large mustard-mine near here. And +the moral of that is--"The more there is of mine, the less there is of +yours."' + +'Oh, I know!' exclaimed Alice, who had not attended to this last remark, +'it's a vegetable. It doesn't look like one, but it is.' + +'I quite agree with you,' said the Duchess; 'and the moral of that +is--"Be what you would seem to be"--or if you'd like it put more +simply--"Never imagine yourself not to be otherwise than what it might +appear to others that what you were or might have been was not otherwise +than what you had been would have appeared to them to be otherwise."' + +'I think I should understand that better,' Alice said very politely, 'if +I had it written down: but I can't quite follow it as you say it.' + +'That's nothing to what I could say if I chose,' the Duchess replied, in +a pleased tone. + +'Pray don't trouble yourself to say it any longer than that,' said +Alice. + +'Oh, don't talk about trouble!' said the Duchess. 'I make you a present +of everything I've said as yet.' + +'A cheap sort of present!' thought Alice. 'I'm glad they don't give +birthday presents like that!' But she did not venture to say it out +loud. + +'Thinking again?' the Duchess asked, with another dig of her sharp +little chin. + +'I've a right to think,' said Alice sharply, for she was beginning to +feel a little worried. + +'Just about as much right,' said the Duchess, 'as pigs have to fly; and +the m--' + +But here, to Alice's great surprise, the Duchess's voice died away, even +in the middle of her favourite word 'moral,' and the arm that was linked +into hers began to tremble. Alice looked up, and there stood the Queen +in front of them, with her arms folded, frowning like a thunderstorm. + +'A fine day, your Majesty!' the Duchess began in a low, weak voice. + +'Now, I give you fair warning,' shouted the Queen, stamping on the +ground as she spoke; 'either you or your head must be off, and that in +about half no time! Take your choice!' + +The Duchess took her choice, and was gone in a moment. + +'Let's go on with the game,' the Queen said to Alice; and Alice was +too much frightened to say a word, but slowly followed her back to the +croquet-ground. + +The other guests had taken advantage of the Queen's absence, and were +resting in the shade: however, the moment they saw her, they hurried +back to the game, the Queen merely remarking that a moment's delay would +cost them their lives. + +All the time they were playing the Queen never left off quarrelling with +the other players, and shouting 'Off with his head!' or 'Off with her +head!' Those whom she sentenced were taken into custody by the soldiers, +who of course had to leave off being arches to do this, so that by +the end of half an hour or so there were no arches left, and all the +players, except the King, the Queen, and Alice, were in custody and +under sentence of execution. + +Then the Queen left off, quite out of breath, and said to Alice, 'Have +you seen the Mock Turtle yet?' + +'No,' said Alice. 'I don't even know what a Mock Turtle is.' + +'It's the thing Mock Turtle Soup is made from,' said the Queen. + +'I never saw one, or heard of one,' said Alice. + +'Come on, then,' said the Queen, 'and he shall tell you his history,' + +As they walked off together, Alice heard the King say in a low voice, +to the company generally, 'You are all pardoned.' 'Come, THAT'S a good +thing!' she said to herself, for she had felt quite unhappy at the +number of executions the Queen had ordered. + +They very soon came upon a Gryphon, lying fast asleep in the sun. +(IF you don't know what a Gryphon is, look at the picture.) 'Up, lazy +thing!' said the Queen, 'and take this young lady to see the Mock +Turtle, and to hear his history. I must go back and see after some +executions I have ordered'; and she walked off, leaving Alice alone with +the Gryphon. Alice did not quite like the look of the creature, but on +the whole she thought it would be quite as safe to stay with it as to go +after that savage Queen: so she waited. + +The Gryphon sat up and rubbed its eyes: then it watched the Queen till +she was out of sight: then it chuckled. 'What fun!' said the Gryphon, +half to itself, half to Alice. + +'What IS the fun?' said Alice. + +'Why, SHE,' said the Gryphon. 'It's all her fancy, that: they never +executes nobody, you know. Come on!' + +'Everybody says "come on!" here,' thought Alice, as she went slowly +after it: 'I never was so ordered about in all my life, never!' + +They had not gone far before they saw the Mock Turtle in the distance, +sitting sad and lonely on a little ledge of rock, and, as they came +nearer, Alice could hear him sighing as if his heart would break. She +pitied him deeply. 'What is his sorrow?' she asked the Gryphon, and the +Gryphon answered, very nearly in the same words as before, 'It's all his +fancy, that: he hasn't got no sorrow, you know. Come on!' + +So they went up to the Mock Turtle, who looked at them with large eyes +full of tears, but said nothing. + +'This here young lady,' said the Gryphon, 'she wants for to know your +history, she do.' + +'I'll tell it her,' said the Mock Turtle in a deep, hollow tone: 'sit +down, both of you, and don't speak a word till I've finished.' + +So they sat down, and nobody spoke for some minutes. Alice thought to +herself, 'I don't see how he can EVEN finish, if he doesn't begin.' But +she waited patiently. + +'Once,' said the Mock Turtle at last, with a deep sigh, 'I was a real +Turtle.' + +These words were followed by a very long silence, broken only by an +occasional exclamation of 'Hjckrrh!' from the Gryphon, and the constant +heavy sobbing of the Mock Turtle. Alice was very nearly getting up and +saying, 'Thank you, sir, for your interesting story,' but she could +not help thinking there MUST be more to come, so she sat still and said +nothing. + +'When we were little,' the Mock Turtle went on at last, more calmly, +though still sobbing a little now and then, 'we went to school in the +sea. The master was an old Turtle--we used to call him Tortoise--' + +'Why did you call him Tortoise, if he wasn't one?' Alice asked. + +'We called him Tortoise because he taught us,' said the Mock Turtle +angrily: 'really you are very dull!' + +'You ought to be ashamed of yourself for asking such a simple question,' +added the Gryphon; and then they both sat silent and looked at poor +Alice, who felt ready to sink into the earth. At last the Gryphon said +to the Mock Turtle, 'Drive on, old fellow! Don't be all day about it!' +and he went on in these words: + +'Yes, we went to school in the sea, though you mayn't believe it--' + +'I never said I didn't!' interrupted Alice. + +'You did,' said the Mock Turtle. + +'Hold your tongue!' added the Gryphon, before Alice could speak again. +The Mock Turtle went on. + +'We had the best of educations--in fact, we went to school every day--' + +'I'VE been to a day-school, too,' said Alice; 'you needn't be so proud +as all that.' + +'With extras?' asked the Mock Turtle a little anxiously. + +'Yes,' said Alice, 'we learned French and music.' + +'And washing?' said the Mock Turtle. + +'Certainly not!' said Alice indignantly. + +'Ah! then yours wasn't a really good school,' said the Mock Turtle in +a tone of great relief. 'Now at OURS they had at the end of the bill, +"French, music, AND WASHING--extra."' + +'You couldn't have wanted it much,' said Alice; 'living at the bottom of +the sea.' + +'I couldn't afford to learn it.' said the Mock Turtle with a sigh. 'I +only took the regular course.' + +'What was that?' inquired Alice. + +'Reeling and Writhing, of course, to begin with,' the Mock Turtle +replied; 'and then the different branches of Arithmetic--Ambition, +Distraction, Uglification, and Derision.' + +'I never heard of "Uglification,"' Alice ventured to say. 'What is it?' + +The Gryphon lifted up both its paws in surprise. 'What! Never heard of +uglifying!' it exclaimed. 'You know what to beautify is, I suppose?' + +'Yes,' said Alice doubtfully: 'it means--to--make--anything--prettier.' + +'Well, then,' the Gryphon went on, 'if you don't know what to uglify is, +you ARE a simpleton.' + +Alice did not feel encouraged to ask any more questions about it, so she +turned to the Mock Turtle, and said 'What else had you to learn?' + +'Well, there was Mystery,' the Mock Turtle replied, counting off +the subjects on his flappers, '--Mystery, ancient and modern, with +Seaography: then Drawling--the Drawling-master was an old conger-eel, +that used to come once a week: HE taught us Drawling, Stretching, and +Fainting in Coils.' + +'What was THAT like?' said Alice. + +'Well, I can't show it you myself,' the Mock Turtle said: 'I'm too +stiff. And the Gryphon never learnt it.' + +'Hadn't time,' said the Gryphon: 'I went to the Classics master, though. +He was an old crab, HE was.' + +'I never went to him,' the Mock Turtle said with a sigh: 'he taught +Laughing and Grief, they used to say.' + +'So he did, so he did,' said the Gryphon, sighing in his turn; and both +creatures hid their faces in their paws. + +'And how many hours a day did you do lessons?' said Alice, in a hurry to +change the subject. + +'Ten hours the first day,' said the Mock Turtle: 'nine the next, and so +on.' + +'What a curious plan!' exclaimed Alice. + +'That's the reason they're called lessons,' the Gryphon remarked: +'because they lessen from day to day.' + +This was quite a new idea to Alice, and she thought it over a little +before she made her next remark. 'Then the eleventh day must have been a +holiday?' + +'Of course it was,' said the Mock Turtle. + +'And how did you manage on the twelfth?' Alice went on eagerly. + +'That's enough about lessons,' the Gryphon interrupted in a very decided +tone: 'tell her something about the games now.' + + + + +CHAPTER X. The Lobster Quadrille + +The Mock Turtle sighed deeply, and drew the back of one flapper across +his eyes. He looked at Alice, and tried to speak, but for a minute or +two sobs choked his voice. 'Same as if he had a bone in his throat,' +said the Gryphon: and it set to work shaking him and punching him in +the back. At last the Mock Turtle recovered his voice, and, with tears +running down his cheeks, he went on again:-- + +'You may not have lived much under the sea--' ('I haven't,' said +Alice)--'and perhaps you were never even introduced to a lobster--' +(Alice began to say 'I once tasted--' but checked herself hastily, and +said 'No, never') '--so you can have no idea what a delightful thing a +Lobster Quadrille is!' + +'No, indeed,' said Alice. 'What sort of a dance is it?' + +'Why,' said the Gryphon, 'you first form into a line along the +sea-shore--' + +'Two lines!' cried the Mock Turtle. 'Seals, turtles, salmon, and so on; +then, when you've cleared all the jelly-fish out of the way--' + +'THAT generally takes some time,' interrupted the Gryphon. + +'--you advance twice--' + +'Each with a lobster as a partner!' cried the Gryphon. + +'Of course,' the Mock Turtle said: 'advance twice, set to partners--' + +'--change lobsters, and retire in same order,' continued the Gryphon. + +'Then, you know,' the Mock Turtle went on, 'you throw the--' + +'The lobsters!' shouted the Gryphon, with a bound into the air. + +'--as far out to sea as you can--' + +'Swim after them!' screamed the Gryphon. + +'Turn a somersault in the sea!' cried the Mock Turtle, capering wildly +about. + +'Change lobsters again!' yelled the Gryphon at the top of its voice. + +'Back to land again, and that's all the first figure,' said the Mock +Turtle, suddenly dropping his voice; and the two creatures, who had been +jumping about like mad things all this time, sat down again very sadly +and quietly, and looked at Alice. + +'It must be a very pretty dance,' said Alice timidly. + +'Would you like to see a little of it?' said the Mock Turtle. + +'Very much indeed,' said Alice. + +'Come, let's try the first figure!' said the Mock Turtle to the Gryphon. +'We can do without lobsters, you know. Which shall sing?' + +'Oh, YOU sing,' said the Gryphon. 'I've forgotten the words.' + +So they began solemnly dancing round and round Alice, every now and +then treading on her toes when they passed too close, and waving their +forepaws to mark the time, while the Mock Turtle sang this, very slowly +and sadly:-- + + '"Will you walk a little faster?" said a whiting to a snail. + "There's a porpoise close behind us, and he's treading on my tail. + + See how eagerly the lobsters and the turtles all advance! + They are waiting on the shingle--will you come and join the dance? + + Will you, won't you, will you, won't you, will you join the dance? + Will you, won't you, will you, won't you, won't you join the dance? + + "You can really have no notion how delightful it will be + When they take us up and throw us, with the lobsters, out to sea!" + But the snail replied "Too far, too far!" and gave a look askance-- + Said he thanked the whiting kindly, but he would not join the dance. + + Would not, could not, would not, could not, would not join the dance. + Would not, could not, would not, could not, could not join the dance. + + '"What matters it how far we go?" his scaly friend replied. + "There is another shore, you know, upon the other side. + The further off from England the nearer is to France-- + Then turn not pale, beloved snail, but come and join the dance. + + Will you, won't you, will you, won't you, will you join the dance? + Will you, won't you, will you, won't you, won't you join the dance?"' + +'Thank you, it's a very interesting dance to watch,' said Alice, feeling +very glad that it was over at last: 'and I do so like that curious song +about the whiting!' + +'Oh, as to the whiting,' said the Mock Turtle, 'they--you've seen them, +of course?' + +'Yes,' said Alice, 'I've often seen them at dinn--' she checked herself +hastily. + +'I don't know where Dinn may be,' said the Mock Turtle, 'but if you've +seen them so often, of course you know what they're like.' + +'I believe so,' Alice replied thoughtfully. 'They have their tails in +their mouths--and they're all over crumbs.' + +'You're wrong about the crumbs,' said the Mock Turtle: 'crumbs would all +wash off in the sea. But they HAVE their tails in their mouths; and the +reason is--' here the Mock Turtle yawned and shut his eyes.--'Tell her +about the reason and all that,' he said to the Gryphon. + +'The reason is,' said the Gryphon, 'that they WOULD go with the lobsters +to the dance. So they got thrown out to sea. So they had to fall a long +way. So they got their tails fast in their mouths. So they couldn't get +them out again. That's all.' + +'Thank you,' said Alice, 'it's very interesting. I never knew so much +about a whiting before.' + +'I can tell you more than that, if you like,' said the Gryphon. 'Do you +know why it's called a whiting?' + +'I never thought about it,' said Alice. 'Why?' + +'IT DOES THE BOOTS AND SHOES.' the Gryphon replied very solemnly. + +Alice was thoroughly puzzled. 'Does the boots and shoes!' she repeated +in a wondering tone. + +'Why, what are YOUR shoes done with?' said the Gryphon. 'I mean, what +makes them so shiny?' + +Alice looked down at them, and considered a little before she gave her +answer. 'They're done with blacking, I believe.' + +'Boots and shoes under the sea,' the Gryphon went on in a deep voice, +'are done with a whiting. Now you know.' + +'And what are they made of?' Alice asked in a tone of great curiosity. + +'Soles and eels, of course,' the Gryphon replied rather impatiently: +'any shrimp could have told you that.' + +'If I'd been the whiting,' said Alice, whose thoughts were still running +on the song, 'I'd have said to the porpoise, "Keep back, please: we +don't want YOU with us!"' + +'They were obliged to have him with them,' the Mock Turtle said: 'no +wise fish would go anywhere without a porpoise.' + +'Wouldn't it really?' said Alice in a tone of great surprise. + +'Of course not,' said the Mock Turtle: 'why, if a fish came to ME, and +told me he was going a journey, I should say "With what porpoise?"' + +'Don't you mean "purpose"?' said Alice. + +'I mean what I say,' the Mock Turtle replied in an offended tone. And +the Gryphon added 'Come, let's hear some of YOUR adventures.' + +'I could tell you my adventures--beginning from this morning,' said +Alice a little timidly: 'but it's no use going back to yesterday, +because I was a different person then.' + +'Explain all that,' said the Mock Turtle. + +'No, no! The adventures first,' said the Gryphon in an impatient tone: +'explanations take such a dreadful time.' + +So Alice began telling them her adventures from the time when she first +saw the White Rabbit. She was a little nervous about it just at first, +the two creatures got so close to her, one on each side, and opened +their eyes and mouths so VERY wide, but she gained courage as she went +on. Her listeners were perfectly quiet till she got to the part about +her repeating 'YOU ARE OLD, FATHER WILLIAM,' to the Caterpillar, and the +words all coming different, and then the Mock Turtle drew a long breath, +and said 'That's very curious.' + +'It's all about as curious as it can be,' said the Gryphon. + +'It all came different!' the Mock Turtle repeated thoughtfully. 'I +should like to hear her try and repeat something now. Tell her to +begin.' He looked at the Gryphon as if he thought it had some kind of +authority over Alice. + +'Stand up and repeat "'TIS THE VOICE OF THE SLUGGARD,"' said the +Gryphon. + +'How the creatures order one about, and make one repeat lessons!' +thought Alice; 'I might as well be at school at once.' However, she +got up, and began to repeat it, but her head was so full of the Lobster +Quadrille, that she hardly knew what she was saying, and the words came +very queer indeed:-- + + ''Tis the voice of the Lobster; I heard him declare, + "You have baked me too brown, I must sugar my hair." + As a duck with its eyelids, so he with his nose + Trims his belt and his buttons, and turns out his toes.' + + [later editions continued as follows + When the sands are all dry, he is gay as a lark, + And will talk in contemptuous tones of the Shark, + But, when the tide rises and sharks are around, + His voice has a timid and tremulous sound.] + +'That's different from what I used to say when I was a child,' said the +Gryphon. + +'Well, I never heard it before,' said the Mock Turtle; 'but it sounds +uncommon nonsense.' + +Alice said nothing; she had sat down with her face in her hands, +wondering if anything would EVER happen in a natural way again. + +'I should like to have it explained,' said the Mock Turtle. + +'She can't explain it,' said the Gryphon hastily. 'Go on with the next +verse.' + +'But about his toes?' the Mock Turtle persisted. 'How COULD he turn them +out with his nose, you know?' + +'It's the first position in dancing.' Alice said; but was dreadfully +puzzled by the whole thing, and longed to change the subject. + +'Go on with the next verse,' the Gryphon repeated impatiently: 'it +begins "I passed by his garden."' + +Alice did not dare to disobey, though she felt sure it would all come +wrong, and she went on in a trembling voice:-- + + 'I passed by his garden, and marked, with one eye, + How the Owl and the Panther were sharing a pie--' + + [later editions continued as follows + The Panther took pie-crust, and gravy, and meat, + While the Owl had the dish as its share of the treat. + When the pie was all finished, the Owl, as a boon, + Was kindly permitted to pocket the spoon: + While the Panther received knife and fork with a growl, + And concluded the banquet--] + +'What IS the use of repeating all that stuff,' the Mock Turtle +interrupted, 'if you don't explain it as you go on? It's by far the most +confusing thing I ever heard!' + +'Yes, I think you'd better leave off,' said the Gryphon: and Alice was +only too glad to do so. + +'Shall we try another figure of the Lobster Quadrille?' the Gryphon went +on. 'Or would you like the Mock Turtle to sing you a song?' + +'Oh, a song, please, if the Mock Turtle would be so kind,' Alice +replied, so eagerly that the Gryphon said, in a rather offended tone, +'Hm! No accounting for tastes! Sing her "Turtle Soup," will you, old +fellow?' + +The Mock Turtle sighed deeply, and began, in a voice sometimes choked +with sobs, to sing this:-- + + 'Beautiful Soup, so rich and green, + Waiting in a hot tureen! + Who for such dainties would not stoop? + Soup of the evening, beautiful Soup! + Soup of the evening, beautiful Soup! + Beau--ootiful Soo--oop! + Beau--ootiful Soo--oop! + Soo--oop of the e--e--evening, + Beautiful, beautiful Soup! + + 'Beautiful Soup! Who cares for fish, + Game, or any other dish? + Who would not give all else for two + Pennyworth only of beautiful Soup? + Pennyworth only of beautiful Soup? + Beau--ootiful Soo--oop! + Beau--ootiful Soo--oop! + Soo--oop of the e--e--evening, + Beautiful, beauti--FUL SOUP!' + +'Chorus again!' cried the Gryphon, and the Mock Turtle had just begun +to repeat it, when a cry of 'The trial's beginning!' was heard in the +distance. + +'Come on!' cried the Gryphon, and, taking Alice by the hand, it hurried +off, without waiting for the end of the song. + +'What trial is it?' Alice panted as she ran; but the Gryphon only +answered 'Come on!' and ran the faster, while more and more faintly +came, carried on the breeze that followed them, the melancholy words:-- + + 'Soo--oop of the e--e--evening, + Beautiful, beautiful Soup!' + + + + +CHAPTER XI. Who Stole the Tarts? + +The King and Queen of Hearts were seated on their throne when they +arrived, with a great crowd assembled about them--all sorts of little +birds and beasts, as well as the whole pack of cards: the Knave was +standing before them, in chains, with a soldier on each side to guard +him; and near the King was the White Rabbit, with a trumpet in one hand, +and a scroll of parchment in the other. In the very middle of the court +was a table, with a large dish of tarts upon it: they looked so good, +that it made Alice quite hungry to look at them--'I wish they'd get the +trial done,' she thought, 'and hand round the refreshments!' But there +seemed to be no chance of this, so she began looking at everything about +her, to pass away the time. + +Alice had never been in a court of justice before, but she had read +about them in books, and she was quite pleased to find that she knew +the name of nearly everything there. 'That's the judge,' she said to +herself, 'because of his great wig.' + +The judge, by the way, was the King; and as he wore his crown over the +wig, (look at the frontispiece if you want to see how he did it,) he did +not look at all comfortable, and it was certainly not becoming. + +'And that's the jury-box,' thought Alice, 'and those twelve creatures,' +(she was obliged to say 'creatures,' you see, because some of them were +animals, and some were birds,) 'I suppose they are the jurors.' She said +this last word two or three times over to herself, being rather proud of +it: for she thought, and rightly too, that very few little girls of her +age knew the meaning of it at all. However, 'jury-men' would have done +just as well. + +The twelve jurors were all writing very busily on slates. 'What are they +doing?' Alice whispered to the Gryphon. 'They can't have anything to put +down yet, before the trial's begun.' + +'They're putting down their names,' the Gryphon whispered in reply, 'for +fear they should forget them before the end of the trial.' + +'Stupid things!' Alice began in a loud, indignant voice, but she stopped +hastily, for the White Rabbit cried out, 'Silence in the court!' and the +King put on his spectacles and looked anxiously round, to make out who +was talking. + +Alice could see, as well as if she were looking over their shoulders, +that all the jurors were writing down 'stupid things!' on their slates, +and she could even make out that one of them didn't know how to spell +'stupid,' and that he had to ask his neighbour to tell him. 'A nice +muddle their slates'll be in before the trial's over!' thought Alice. + +One of the jurors had a pencil that squeaked. This of course, Alice +could not stand, and she went round the court and got behind him, and +very soon found an opportunity of taking it away. She did it so quickly +that the poor little juror (it was Bill, the Lizard) could not make out +at all what had become of it; so, after hunting all about for it, he was +obliged to write with one finger for the rest of the day; and this was +of very little use, as it left no mark on the slate. + +'Herald, read the accusation!' said the King. + +On this the White Rabbit blew three blasts on the trumpet, and then +unrolled the parchment scroll, and read as follows:-- + + 'The Queen of Hearts, she made some tarts, + All on a summer day: + The Knave of Hearts, he stole those tarts, + And took them quite away!' + +'Consider your verdict,' the King said to the jury. + +'Not yet, not yet!' the Rabbit hastily interrupted. 'There's a great +deal to come before that!' + +'Call the first witness,' said the King; and the White Rabbit blew three +blasts on the trumpet, and called out, 'First witness!' + +The first witness was the Hatter. He came in with a teacup in one +hand and a piece of bread-and-butter in the other. 'I beg pardon, your +Majesty,' he began, 'for bringing these in: but I hadn't quite finished +my tea when I was sent for.' + +'You ought to have finished,' said the King. 'When did you begin?' + +The Hatter looked at the March Hare, who had followed him into the +court, arm-in-arm with the Dormouse. 'Fourteenth of March, I think it +was,' he said. + +'Fifteenth,' said the March Hare. + +'Sixteenth,' added the Dormouse. + +'Write that down,' the King said to the jury, and the jury eagerly +wrote down all three dates on their slates, and then added them up, and +reduced the answer to shillings and pence. + +'Take off your hat,' the King said to the Hatter. + +'It isn't mine,' said the Hatter. + +'Stolen!' the King exclaimed, turning to the jury, who instantly made a +memorandum of the fact. + +'I keep them to sell,' the Hatter added as an explanation; 'I've none of +my own. I'm a hatter.' + +Here the Queen put on her spectacles, and began staring at the Hatter, +who turned pale and fidgeted. + +'Give your evidence,' said the King; 'and don't be nervous, or I'll have +you executed on the spot.' + +This did not seem to encourage the witness at all: he kept shifting +from one foot to the other, looking uneasily at the Queen, and in +his confusion he bit a large piece out of his teacup instead of the +bread-and-butter. + +Just at this moment Alice felt a very curious sensation, which puzzled +her a good deal until she made out what it was: she was beginning to +grow larger again, and she thought at first she would get up and leave +the court; but on second thoughts she decided to remain where she was as +long as there was room for her. + +'I wish you wouldn't squeeze so.' said the Dormouse, who was sitting +next to her. 'I can hardly breathe.' + +'I can't help it,' said Alice very meekly: 'I'm growing.' + +'You've no right to grow here,' said the Dormouse. + +'Don't talk nonsense,' said Alice more boldly: 'you know you're growing +too.' + +'Yes, but I grow at a reasonable pace,' said the Dormouse: 'not in that +ridiculous fashion.' And he got up very sulkily and crossed over to the +other side of the court. + +All this time the Queen had never left off staring at the Hatter, and, +just as the Dormouse crossed the court, she said to one of the officers +of the court, 'Bring me the list of the singers in the last concert!' on +which the wretched Hatter trembled so, that he shook both his shoes off. + +'Give your evidence,' the King repeated angrily, 'or I'll have you +executed, whether you're nervous or not.' + +'I'm a poor man, your Majesty,' the Hatter began, in a trembling voice, +'--and I hadn't begun my tea--not above a week or so--and what with the +bread-and-butter getting so thin--and the twinkling of the tea--' + +'The twinkling of the what?' said the King. + +'It began with the tea,' the Hatter replied. + +'Of course twinkling begins with a T!' said the King sharply. 'Do you +take me for a dunce? Go on!' + +'I'm a poor man,' the Hatter went on, 'and most things twinkled after +that--only the March Hare said--' + +'I didn't!' the March Hare interrupted in a great hurry. + +'You did!' said the Hatter. + +'I deny it!' said the March Hare. + +'He denies it,' said the King: 'leave out that part.' + +'Well, at any rate, the Dormouse said--' the Hatter went on, looking +anxiously round to see if he would deny it too: but the Dormouse denied +nothing, being fast asleep. + +'After that,' continued the Hatter, 'I cut some more bread-and-butter--' + +'But what did the Dormouse say?' one of the jury asked. + +'That I can't remember,' said the Hatter. + +'You MUST remember,' remarked the King, 'or I'll have you executed.' + +The miserable Hatter dropped his teacup and bread-and-butter, and went +down on one knee. 'I'm a poor man, your Majesty,' he began. + +'You're a very poor speaker,' said the King. + +Here one of the guinea-pigs cheered, and was immediately suppressed by +the officers of the court. (As that is rather a hard word, I will just +explain to you how it was done. They had a large canvas bag, which tied +up at the mouth with strings: into this they slipped the guinea-pig, +head first, and then sat upon it.) + +'I'm glad I've seen that done,' thought Alice. 'I've so often read +in the newspapers, at the end of trials, "There was some attempts +at applause, which was immediately suppressed by the officers of the +court," and I never understood what it meant till now.' + +'If that's all you know about it, you may stand down,' continued the +King. + +'I can't go no lower,' said the Hatter: 'I'm on the floor, as it is.' + +'Then you may SIT down,' the King replied. + +Here the other guinea-pig cheered, and was suppressed. + +'Come, that finished the guinea-pigs!' thought Alice. 'Now we shall get +on better.' + +'I'd rather finish my tea,' said the Hatter, with an anxious look at the +Queen, who was reading the list of singers. + +'You may go,' said the King, and the Hatter hurriedly left the court, +without even waiting to put his shoes on. + +'--and just take his head off outside,' the Queen added to one of the +officers: but the Hatter was out of sight before the officer could get +to the door. + +'Call the next witness!' said the King. + +The next witness was the Duchess's cook. She carried the pepper-box in +her hand, and Alice guessed who it was, even before she got into the +court, by the way the people near the door began sneezing all at once. + +'Give your evidence,' said the King. + +'Shan't,' said the cook. + +The King looked anxiously at the White Rabbit, who said in a low voice, +'Your Majesty must cross-examine THIS witness.' + +'Well, if I must, I must,' the King said, with a melancholy air, and, +after folding his arms and frowning at the cook till his eyes were +nearly out of sight, he said in a deep voice, 'What are tarts made of?' + +'Pepper, mostly,' said the cook. + +'Treacle,' said a sleepy voice behind her. + +'Collar that Dormouse,' the Queen shrieked out. 'Behead that Dormouse! +Turn that Dormouse out of court! Suppress him! Pinch him! Off with his +whiskers!' + +For some minutes the whole court was in confusion, getting the Dormouse +turned out, and, by the time they had settled down again, the cook had +disappeared. + +'Never mind!' said the King, with an air of great relief. 'Call the next +witness.' And he added in an undertone to the Queen, 'Really, my dear, +YOU must cross-examine the next witness. It quite makes my forehead +ache!' + +Alice watched the White Rabbit as he fumbled over the list, feeling very +curious to see what the next witness would be like, '--for they haven't +got much evidence YET,' she said to herself. Imagine her surprise, when +the White Rabbit read out, at the top of his shrill little voice, the +name 'Alice!' + + + + +CHAPTER XII. Alice's Evidence + + +'Here!' cried Alice, quite forgetting in the flurry of the moment how +large she had grown in the last few minutes, and she jumped up in such +a hurry that she tipped over the jury-box with the edge of her skirt, +upsetting all the jurymen on to the heads of the crowd below, and there +they lay sprawling about, reminding her very much of a globe of goldfish +she had accidentally upset the week before. + +'Oh, I BEG your pardon!' she exclaimed in a tone of great dismay, and +began picking them up again as quickly as she could, for the accident of +the goldfish kept running in her head, and she had a vague sort of idea +that they must be collected at once and put back into the jury-box, or +they would die. + +'The trial cannot proceed,' said the King in a very grave voice, 'until +all the jurymen are back in their proper places--ALL,' he repeated with +great emphasis, looking hard at Alice as he said do. + +Alice looked at the jury-box, and saw that, in her haste, she had put +the Lizard in head downwards, and the poor little thing was waving its +tail about in a melancholy way, being quite unable to move. She soon got +it out again, and put it right; 'not that it signifies much,' she said +to herself; 'I should think it would be QUITE as much use in the trial +one way up as the other.' + +As soon as the jury had a little recovered from the shock of being +upset, and their slates and pencils had been found and handed back to +them, they set to work very diligently to write out a history of the +accident, all except the Lizard, who seemed too much overcome to do +anything but sit with its mouth open, gazing up into the roof of the +court. + +'What do you know about this business?' the King said to Alice. + +'Nothing,' said Alice. + +'Nothing WHATEVER?' persisted the King. + +'Nothing whatever,' said Alice. + +'That's very important,' the King said, turning to the jury. They were +just beginning to write this down on their slates, when the White Rabbit +interrupted: 'UNimportant, your Majesty means, of course,' he said in a +very respectful tone, but frowning and making faces at him as he spoke. + +'UNimportant, of course, I meant,' the King hastily said, and went on +to himself in an undertone, + +'important--unimportant--unimportant--important--' as if he were trying +which word sounded best. + +Some of the jury wrote it down 'important,' and some 'unimportant.' +Alice could see this, as she was near enough to look over their slates; +'but it doesn't matter a bit,' she thought to herself. + +At this moment the King, who had been for some time busily writing in +his note-book, cackled out 'Silence!' and read out from his book, 'Rule +Forty-two. ALL PERSONS MORE THAN A MILE HIGH TO LEAVE THE COURT.' + +Everybody looked at Alice. + +'I'M not a mile high,' said Alice. + +'You are,' said the King. + +'Nearly two miles high,' added the Queen. + +'Well, I shan't go, at any rate,' said Alice: 'besides, that's not a +regular rule: you invented it just now.' + +'It's the oldest rule in the book,' said the King. + +'Then it ought to be Number One,' said Alice. + +The King turned pale, and shut his note-book hastily. 'Consider your +verdict,' he said to the jury, in a low, trembling voice. + +'There's more evidence to come yet, please your Majesty,' said the White +Rabbit, jumping up in a great hurry; 'this paper has just been picked +up.' + +'What's in it?' said the Queen. + +'I haven't opened it yet,' said the White Rabbit, 'but it seems to be a +letter, written by the prisoner to--to somebody.' + +'It must have been that,' said the King, 'unless it was written to +nobody, which isn't usual, you know.' + +'Who is it directed to?' said one of the jurymen. + +'It isn't directed at all,' said the White Rabbit; 'in fact, there's +nothing written on the OUTSIDE.' He unfolded the paper as he spoke, and +added 'It isn't a letter, after all: it's a set of verses.' + +'Are they in the prisoner's handwriting?' asked another of the jurymen. + +'No, they're not,' said the White Rabbit, 'and that's the queerest thing +about it.' (The jury all looked puzzled.) + +'He must have imitated somebody else's hand,' said the King. (The jury +all brightened up again.) + +'Please your Majesty,' said the Knave, 'I didn't write it, and they +can't prove I did: there's no name signed at the end.' + +'If you didn't sign it,' said the King, 'that only makes the matter +worse. You MUST have meant some mischief, or else you'd have signed your +name like an honest man.' + +There was a general clapping of hands at this: it was the first really +clever thing the King had said that day. + +'That PROVES his guilt,' said the Queen. + +'It proves nothing of the sort!' said Alice. 'Why, you don't even know +what they're about!' + +'Read them,' said the King. + +The White Rabbit put on his spectacles. 'Where shall I begin, please +your Majesty?' he asked. + +'Begin at the beginning,' the King said gravely, 'and go on till you +come to the end: then stop.' + +These were the verses the White Rabbit read:-- + + 'They told me you had been to her, + And mentioned me to him: + She gave me a good character, + But said I could not swim. + + He sent them word I had not gone + (We know it to be true): + If she should push the matter on, + What would become of you? + + I gave her one, they gave him two, + You gave us three or more; + They all returned from him to you, + Though they were mine before. + + If I or she should chance to be + Involved in this affair, + He trusts to you to set them free, + Exactly as we were. + + My notion was that you had been + (Before she had this fit) + An obstacle that came between + Him, and ourselves, and it. + + Don't let him know she liked them best, + For this must ever be + A secret, kept from all the rest, + Between yourself and me.' + +'That's the most important piece of evidence we've heard yet,' said the +King, rubbing his hands; 'so now let the jury--' + +'If any one of them can explain it,' said Alice, (she had grown so large +in the last few minutes that she wasn't a bit afraid of interrupting +him,) 'I'll give him sixpence. _I_ don't believe there's an atom of +meaning in it.' + +The jury all wrote down on their slates, 'SHE doesn't believe there's an +atom of meaning in it,' but none of them attempted to explain the paper. + +'If there's no meaning in it,' said the King, 'that saves a world of +trouble, you know, as we needn't try to find any. And yet I don't know,' +he went on, spreading out the verses on his knee, and looking at them +with one eye; 'I seem to see some meaning in them, after all. "--SAID +I COULD NOT SWIM--" you can't swim, can you?' he added, turning to the +Knave. + +The Knave shook his head sadly. 'Do I look like it?' he said. (Which he +certainly did NOT, being made entirely of cardboard.) + +'All right, so far,' said the King, and he went on muttering over +the verses to himself: '"WE KNOW IT TO BE TRUE--" that's the jury, of +course--"I GAVE HER ONE, THEY GAVE HIM TWO--" why, that must be what he +did with the tarts, you know--' + +'But, it goes on "THEY ALL RETURNED FROM HIM TO YOU,"' said Alice. + +'Why, there they are!' said the King triumphantly, pointing to the tarts +on the table. 'Nothing can be clearer than THAT. Then again--"BEFORE SHE +HAD THIS FIT--" you never had fits, my dear, I think?' he said to the +Queen. + +'Never!' said the Queen furiously, throwing an inkstand at the Lizard +as she spoke. (The unfortunate little Bill had left off writing on his +slate with one finger, as he found it made no mark; but he now hastily +began again, using the ink, that was trickling down his face, as long as +it lasted.) + +'Then the words don't FIT you,' said the King, looking round the court +with a smile. There was a dead silence. + +'It's a pun!' the King added in an offended tone, and everybody laughed, +'Let the jury consider their verdict,' the King said, for about the +twentieth time that day. + +'No, no!' said the Queen. 'Sentence first--verdict afterwards.' + +'Stuff and nonsense!' said Alice loudly. 'The idea of having the +sentence first!' + +'Hold your tongue!' said the Queen, turning purple. + +'I won't!' said Alice. + +'Off with her head!' the Queen shouted at the top of her voice. Nobody +moved. + +'Who cares for you?' said Alice, (she had grown to her full size by this +time.) 'You're nothing but a pack of cards!' + +At this the whole pack rose up into the air, and came flying down upon +her: she gave a little scream, half of fright and half of anger, and +tried to beat them off, and found herself lying on the bank, with her +head in the lap of her sister, who was gently brushing away some dead +leaves that had fluttered down from the trees upon her face. + +'Wake up, Alice dear!' said her sister; 'Why, what a long sleep you've +had!' + +'Oh, I've had such a curious dream!' said Alice, and she told her +sister, as well as she could remember them, all these strange Adventures +of hers that you have just been reading about; and when she had +finished, her sister kissed her, and said, 'It WAS a curious dream, +dear, certainly: but now run in to your tea; it's getting late.' So +Alice got up and ran off, thinking while she ran, as well she might, +what a wonderful dream it had been. + +But her sister sat still just as she left her, leaning her head on her +hand, watching the setting sun, and thinking of little Alice and all her +wonderful Adventures, till she too began dreaming after a fashion, and +this was her dream:-- + +First, she dreamed of little Alice herself, and once again the tiny +hands were clasped upon her knee, and the bright eager eyes were looking +up into hers--she could hear the very tones of her voice, and see that +queer little toss of her head to keep back the wandering hair that +WOULD always get into her eyes--and still as she listened, or seemed to +listen, the whole place around her became alive with the strange creatures +of her little sister's dream. + +The long grass rustled at her feet as the White Rabbit hurried by--the +frightened Mouse splashed his way through the neighbouring pool--she +could hear the rattle of the teacups as the March Hare and his friends +shared their never-ending meal, and the shrill voice of the Queen +ordering off her unfortunate guests to execution--once more the pig-baby +was sneezing on the Duchess's knee, while plates and dishes crashed +around it--once more the shriek of the Gryphon, the squeaking of the +Lizard's slate-pencil, and the choking of the suppressed guinea-pigs, +filled the air, mixed up with the distant sobs of the miserable Mock +Turtle. + +So she sat on, with closed eyes, and half believed herself in +Wonderland, though she knew she had but to open them again, and all +would change to dull reality--the grass would be only rustling in the +wind, and the pool rippling to the waving of the reeds--the rattling +teacups would change to tinkling sheep-bells, and the Queen's shrill +cries to the voice of the shepherd boy--and the sneeze of the baby, the +shriek of the Gryphon, and all the other queer noises, would change (she +knew) to the confused clamour of the busy farm-yard--while the lowing +of the cattle in the distance would take the place of the Mock Turtle's +heavy sobs. + +Lastly, she pictured to herself how this same little sister of hers +would, in the after-time, be herself a grown woman; and how she would +keep, through all her riper years, the simple and loving heart of her +childhood: and how she would gather about her other little children, and +make THEIR eyes bright and eager with many a strange tale, perhaps even +with the dream of Wonderland of long ago: and how she would feel with +all their simple sorrows, and find a pleasure in all their simple joys, +remembering her own child-life, and the happy summer days. + + THE END \ No newline at end of file diff --git a/notebooks/workshop-1/01_train model.ipynb b/notebooks/workshop-1/01_train model.ipynb new file mode 100644 index 0000000..5929285 --- /dev/null +++ b/notebooks/workshop-1/01_train model.ipynb @@ -0,0 +1,356 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "from dateutil import parser\n", + "import time\n", + "import math" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# choose whether to study pickups or dropoffs\n", + "\n", + "target = \"pickup\"\n", + "# target = \"dropoff\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "start = time.time()\n", + "\n", + "filename = '-yellow_tripdata_2016-06.csv'\n", + "nlinesfile = 11135470 # total number of samples\n", + "nlinesrandomsample = 5000000 # set amount of data to import based on RAM capacity (reduce if you get out of memory errors)\n", + "\n", + "# https://docs.scipy.org/doc/numpy/reference/generated/numpy.random.choice.html\n", + "skip = np.random.choice(np.arange(1,nlinesfile+1), (nlinesfile-nlinesrandomsample), replace=False)\n", + "\n", + "df = pd.read_csv(filename, \n", + " usecols=['tpep_pickup_datetime', \n", + " 'tpep_dropoff_datetime', \n", + " 'pickup_longitude', \n", + " 'pickup_latitude', \n", + " 'dropoff_longitude', \n", + " 'dropoff_latitude'],\n", + " skiprows=skip, \n", + " error_bad_lines=False)\n", + "\n", + "print \"load file:\", (time.time() - start), \"sec\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "print df[:5]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# cull by geography (bounding box around manhattan)\n", + "\n", + "print \"starting entries:\", len(df)\n", + "\n", + "df = df[(df[target+'_latitude'] >= 40.699) & (df[target+'_latitude'] <= 40.875)]\n", + "df = df[(df[target+'_longitude'] >= -74.025) & (df[target+'_longitude'] <= -73.904)]\n", + "\n", + "print \"final entries:\", len(df)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# chunk geography by rounding latitude and logitude to 3 decimal places\n", + "\n", + "df[target+'_longitude'] = df[target+'_longitude'].round(3)\n", + "df[target+'_latitude'] = df[target+'_latitude'].round(3)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# convert pickup and dropoff data to panda's datatime format\n", + "\n", + "df['tpep_pickup_datetime'] = pd.to_datetime(df['tpep_pickup_datetime'], format='%Y-%m-%d %H:%M:%S')\n", + "df['tpep_dropoff_datetime'] = pd.to_datetime(df['tpep_dropoff_datetime'], format='%Y-%m-%d %H:%M:%S')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "timeSeries = df['tpep_'+ target +'_datetime']\n", + "\n", + "dow = timeSeries.dt.dayofweek\n", + "df[target+'_dow_s'] = dow.apply(lambda x: math.sin((2 * math.pi) / 7 * x))\n", + "\n", + "tod = timeSeries.dt.hour\n", + "df[target+'_tod_s'] = tod.apply(lambda x: math.sin((2 * math.pi) / 24 * x))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "print df[:5]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# group by features to get counts at areas of same geography and time\n", + "# http://stackoverflow.com/questions/10373660/converting-a-pandas-groupby-object-to-dataframe\n", + "count_data = pd.DataFrame({'count' : df.groupby( [target+'_longitude', target+'_latitude', target+'_dow_s', target+'_tod_s'] ).size()}).reset_index()\n", + "\n", + "print count_data[:5]\n", + "print 'number of samples:', len(count_data)\n", + "print 'min number of pickups in any sample:', count_data['count'].min()\n", + "print 'max number of pickups in any sample:', count_data['count'].max()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# convert DataFrame to numpy array and shuffle it\n", + "\n", + "data = count_data.as_matrix()\n", + "np.random.shuffle(data)\n", + "\n", + "# create X (feature) and y (target) data sets\n", + "\n", + "X = data[:,:-1]\n", + "y = data[:,-1]\n", + "\n", + "print 'Data set:', X.shape, y.shape" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# use scikit-learn library to normalize x data to be mean 0, variance 1\n", + "\n", + "import pickle\n", + "from sklearn import preprocessing\n", + "\n", + "# fit scaling function to X data\n", + "# http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.StandardScaler.html\n", + "scaler = preprocessing.StandardScaler().fit(X)\n", + "\n", + "# save out scaling function for later use\n", + "with open(\"-scaler_\"+target+\".pkl\", \"wb\") as f:\n", + " pickle.dump(scaler, f)\n", + "\n", + "X_scaled = scaler.transform(X)\n", + "\n", + "# check to make sure data was scaled correctly\n", + "# print \"Training feature data -- mean:\", X_train_scaled.mean(), \"std:\", X_train_scaled.std()\n", + "# print \"Test feature data -- mean:\", X_test_scaled.mean(), \"std:\", X_test_scaled.std()\n", + "\n", + "print \"mean:\", X_scaled.mean(), \"<-- should be around 0.0\"\n", + "print \"std:\", X_scaled.std(), \"<-- should be around 1.0\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "#plot correlation matrix between features and target\n", + "\n", + "%matplotlib inline\n", + "import seaborn as sns\n", + "import matplotlib.pyplot as plt\n", + "\n", + "corr_df = pd.DataFrame(data=X_scaled, columns=[target+'_longitude', target+'_latitude', target+'_dow_s', target+'_tod_s'])\n", + "corr_df['count'] = y\n", + "\n", + "corrmat = corr_df.corr()\n", + "\n", + "# Set up the matplotlib figure\n", + "f, ax = plt.subplots(figsize=(9, 6))\n", + "\n", + "# Draw the heatmap using seaborn\n", + "sns.set_context(\"notebook\", font_scale=0.7, rc={\"lines.linewidth\": 1.5})\n", + "sns.heatmap(corrmat, annot=True, square=True)\n", + "f.tight_layout()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "from keras.models import Sequential\n", + "from keras.layers import Dense, Dropout, Activation\n", + "from keras.regularizers import l2\n", + "from keras.callbacks import ModelCheckpoint\n", + "\n", + "# model hyperparameters\n", + "batch_size = 256\n", + "nb_epoch = 5\n", + "\n", + "num_hidden_1 = 1024\n", + "num_hidden_2 = 1024\n", + "num_hidden_3 = 1024\n", + "dropout = 0.15" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "model = Sequential()\n", + "\n", + "model.add(Dense(output_dim=num_hidden_1, input_dim=X.shape[1], W_regularizer=l2(0.0005)))\n", + "model.add(Activation(\"tanh\"))\n", + "model.add(Dropout(dropout))\n", + "model.add(Dense(num_hidden_2, W_regularizer=l2(0.0005)))\n", + "model.add(Activation(\"tanh\"))\n", + "model.add(Dropout(dropout))\n", + "model.add(Dense(num_hidden_3, W_regularizer=l2(0.0005)))\n", + "model.add(Activation(\"tanh\"))\n", + "model.add(Dropout(dropout))\n", + "model.add(Dense(1)) # single neuron in output layer for regression problem\n", + "\n", + "# save out model each time it performs better than previous epochs\n", + "checkpoint_name = \"-model_\"+target+\".hdf5\"\n", + "checkpointer = ModelCheckpoint(checkpoint_name, verbose=0, save_best_only=True)\n", + "\n", + "# mean squared logarithmic error for regression problme\n", + "model.compile(loss='mean_squared_logarithmic_error', optimizer='adam')\n", + "\n", + "# fit model using a 20% validation split (keras will automatically split the data into training and validation sets)\n", + "history = model.fit(X_scaled, y, validation_split=0.2, batch_size=batch_size, nb_epoch=nb_epoch,\n", + " verbose=1, callbacks=[checkpointer])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# list all data in history\n", + "\n", + "print(history.history.keys())" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# plot history of loss in training and validation data\n", + "\n", + "plt.plot(history.history['loss'])\n", + "plt.plot(history.history['val_loss'])\n", + "plt.title('model loss')\n", + "plt.ylabel('accuracy')\n", + "plt.xlabel('epoch')\n", + "plt.legend(['train', 'test'], loc='upper left')\n", + "plt.show()" + ] + } + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Python [default]", + "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.12" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/notebooks/workshop-1/02_use model.ipynb b/notebooks/workshop-1/02_use model.ipynb new file mode 100644 index 0000000..1485ee4 --- /dev/null +++ b/notebooks/workshop-1/02_use model.ipynb @@ -0,0 +1,142 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "from keras.models import Sequential\n", + "from keras.layers import Dense, Dropout, Activation\n", + "from keras.regularizers import l2\n", + "from keras.callbacks import ModelCheckpoint\n", + "\n", + "import math" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# choose whether to study pickups or dropoffs\n", + "\n", + "target = \"pickup\"\n", + "# target = \"dropoff\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# create model \n", + "# must match specification of model used for training \n", + "# set dropout to 0 to use full model for prediction\n", + "\n", + "batch_size = 256\n", + "nb_epoch = 20\n", + "\n", + "num_hidden_1 = 1024\n", + "num_hidden_2 = 1024\n", + "num_hidden_3 = 1024\n", + "dropout = 0.0\n", + "\n", + "model = Sequential()\n", + "\n", + "model.add(Dense(output_dim=num_hidden_1, input_dim=4))\n", + "model.add(Activation(\"tanh\"))\n", + "model.add(Dropout(dropout))\n", + "model.add(Dense(num_hidden_2))\n", + "model.add(Activation(\"tanh\"))\n", + "model.add(Dropout(dropout))\n", + "model.add(Dense(num_hidden_3))\n", + "model.add(Activation(\"tanh\"))\n", + "model.add(Dropout(dropout))\n", + "model.add(Dense(1))\n", + "\n", + "# laod model from saved file\n", + "\n", + "model.load_weights(\"-model_\"+target+\".hdf5\")\n", + "model.compile(loss='mean_squared_logarithmic_error', optimizer='adam')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import pandas as pd\n", + "\n", + "df = pd.read_csv('-gis-data//grid_data.csv')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import pickle\n", + "\n", + "# load scaling function from saved file\n", + "\n", + "with open(\"-scaler_\"+target+\".pkl\", 'rb') as f:\n", + " scaler = pickle.load(f)\n", + "\n", + "# make predictions for each grid point, for each doy of week and hour of day\n", + "\n", + "for dow in range(7):\n", + " for tod in range(24):\n", + " print \"dow:\", dow, \"tod:\", tod\n", + "\n", + " df[\"dow\"] = math.sin((2 * math.pi) / 7 * dow)\n", + " df[\"tod\"] = math.sin((2 * math.pi) / 24 * tod)\n", + "\n", + " X = df.as_matrix(columns=['X_MIN', 'Y_MIN', 'dow', 'tod'])\n", + " X_scaled = scaler.transform(X)\n", + "\n", + " y = model.predict(X_scaled)\n", + " \n", + " df[\"_\".join([str(dow), str(tod)])] = y\n", + " \n", + "df.to_csv(\"-predicted_\"+target+\".csv\")" + ] + } + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Python [default]", + "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.12" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/notebooks/workshop-1/gis-base/nybb.dbf b/notebooks/workshop-1/gis-base/nybb.dbf new file mode 100644 index 0000000..75e0ec0 Binary files /dev/null and b/notebooks/workshop-1/gis-base/nybb.dbf differ diff --git a/notebooks/workshop-1/gis-base/nybb.prj b/notebooks/workshop-1/gis-base/nybb.prj new file mode 100644 index 0000000..b68d851 --- /dev/null +++ b/notebooks/workshop-1/gis-base/nybb.prj @@ -0,0 +1 @@ +PROJCS["NAD_1983_StatePlane_New_York_Long_Island_FIPS_3104_Feet",GEOGCS["GCS_North_American_1983",DATUM["D_North_American_1983",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Conformal_Conic"],PARAMETER["False_Easting",984250.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",-74.0],PARAMETER["Standard_Parallel_1",40.66666666666666],PARAMETER["Standard_Parallel_2",41.03333333333333],PARAMETER["Latitude_Of_Origin",40.16666666666666],UNIT["Foot_US",0.3048006096012192]] \ No newline at end of file diff --git a/notebooks/workshop-1/gis-base/nybb.shp b/notebooks/workshop-1/gis-base/nybb.shp new file mode 100644 index 0000000..7306b3d Binary files /dev/null and b/notebooks/workshop-1/gis-base/nybb.shp differ diff --git a/notebooks/workshop-1/gis-base/nybb.shp.xml b/notebooks/workshop-1/gis-base/nybb.shp.xml new file mode 100644 index 0000000..4449fc1 --- /dev/null +++ b/notebooks/workshop-1/gis-base/nybb.shp.xml @@ -0,0 +1 @@ +2012092711314100FALSE20160811161729002016081116172900nybbwithheldLocal Area Network002913174.9993551067382.508423120121.779352272844.29364010.000ProjectedGCS_North_American_1983Linear Unit: Foot_US (0.304801)NAD_1983_StatePlane_New_York_Long_Island_FIPS_3104_Feet<ProjectedCoordinateSystem xsi:type='typens:ProjectedCoordinateSystem' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/10.3'><WKT>PROJCS[&quot;NAD_1983_StatePlane_New_York_Long_Island_FIPS_3104_Feet&quot;,GEOGCS[&quot;GCS_North_American_1983&quot;,DATUM[&quot;D_North_American_1983&quot;,SPHEROID[&quot;GRS_1980&quot;,6378137.0,298.257222101]],PRIMEM[&quot;Greenwich&quot;,0.0],UNIT[&quot;Degree&quot;,0.0174532925199433]],PROJECTION[&quot;Lambert_Conformal_Conic&quot;],PARAMETER[&quot;False_Easting&quot;,984250.0],PARAMETER[&quot;False_Northing&quot;,0.0],PARAMETER[&quot;Central_Meridian&quot;,-74.0],PARAMETER[&quot;Standard_Parallel_1&quot;,40.66666666666666],PARAMETER[&quot;Standard_Parallel_2&quot;,41.03333333333333],PARAMETER[&quot;Latitude_Of_Origin&quot;,40.16666666666666],UNIT[&quot;Foot_US&quot;,0.3048006096012192],AUTHORITY[&quot;EPSG&quot;,2263]]</WKT><XOrigin>-120039300</XOrigin><YOrigin>-96540300</YOrigin><XYScale>37212589.015695661</XYScale><ZOrigin>-100000</ZOrigin><ZScale>10000</ZScale><MOrigin>-100000</MOrigin><MScale>10000</MScale><XYTolerance>0.0032808333333333331</XYTolerance><ZTolerance>0.001</ZTolerance><MTolerance>0.001</MTolerance><HighPrecision>true</HighPrecision><WKID>102718</WKID><LatestWKID>2263</LatestWKID></ProjectedCoordinateSystem>Select c:\temp\BYTES_GP\Districts.gdb\nybb C:\temp\16C\GIS_OUTPUT\Districts\shp\nybb__Iteration.shp "ObjectID>=0 AND ObjectID<3000"Select C:\temp\16C\GIS_OUTPUT\Districts\shp\nybb__Iteration.shp C:\temp\16C\GIS_OUTPUT\Districts\shp\nybb.shp #1.01500000005000New York City Department of City PlanningBYTES of the BIG APPLE Coordinator212.720.3505120 Broadway, 31st FloorNew YorkNew York10271USNew York City Department of City Planning120 Broadway, 31st FloorNew YorkNew York10271USAvailable at the following website: http://www.nyc.gov/html/dcp/html/bytes/applbyte.shtmlFreehttp://www.nyc.gov/html/dcp/html/bytes/applbyte.shtml0.000ESRI ShapefileOpen SpecificationNew York City Borough Boundary16CNew York City Department of City PlanningNew York City Department of City PlanningBYTES of the BIG APPLE16CNo major changes since previous version.8/1/20168/1/2016<DIV STYLE="text-align:Left;"><DIV><DIV><P><SPAN>The borough boundaries of New York City clipped to the shoreline at mean high tide.</SPAN></P></DIV></DIV></DIV>These districts were created by the Department of City Planning to aid city agencies in administering public services.New York City Department of City PlanningBYTES of the BIG APPLE Coordinator212.720.3505120 Broadway, 31st FloorNew YorkNY10271USNew York CityBrooklynBronxManhattanKingsStaten IslandNew YorkQueensRichmondboundariesboundaryboroughNew York CityBrooklynBronxManhattanboundariesKingsboundaryStaten IslandNew YorkQueensboroughRichmondThe data is freely available to all New York City agencies and the public.<DIV STYLE="text-align:Left;"><DIV><DIV><P><SPAN>This dataset is being provided by the Department of City Planning (DCP) on DCP’s website for informational purposes only. DCP does not warranty the completeness, accuracy, content, or fitness for any particular purpose or use of the dataset, nor are any such warranties to be implied or inferred with respect to the dataset as furnished on the website. DCP and the City are not liable for any deficiencies in the completeness, accuracy, content, or fitness for any particular purpose or use the dataset, or applications utilizing the dataset, provided by any third party.</SPAN></P></DIV></DIV></DIV>ground conditionThe official borough boundaries include areas under water. Users requiring these boundaries should use nybbwi instead.Department of City Planning.Microsoft Windows 7 Version 6.1 (Build 7601) Service Pack 1; Esri ArcGIS 10.3.1.49591-74.257159-73.69921540.91556840.495992These data are accurate as of the redistricting after the US Census 2010.The District files are created from the same release version of the Department of City Planning LION file. The LION file is spatially aligned with NYCMap aerial photography.nybbFeature Class0FIDFIDOID400Internal feature number.EsriSequential unique whole numbers that are automatically generated.BoroCodeBoroCodeSmallInteger550Borough Code1Manhattan2Bronx3Brooklyn4Queens5Staten IslandBoroNameBoroNameString3200Name of Borough.ShapeShapeGeometry000Feature geometry.ESRICoordinates defining the features.Shape_LengShape_LengDouble1900Shape_AreaShape_AreaDouble1900Area of feature in internal units squared.ESRIPositive real numbers that are automatically generated.datasetEPSG8.6.20SimpleFALSE0FALSEFALSE20160811 diff --git a/notebooks/workshop-1/gis-base/nybb.shx b/notebooks/workshop-1/gis-base/nybb.shx new file mode 100644 index 0000000..a689bb9 Binary files /dev/null and b/notebooks/workshop-1/gis-base/nybb.shx differ diff --git a/notebooks/workshop-1/render_script.py b/notebooks/workshop-1/render_script.py new file mode 100644 index 0000000..0d1cf4f --- /dev/null +++ b/notebooks/workshop-1/render_script.py @@ -0,0 +1,60 @@ +from PyQt4.QtGui import QImage +from PyQt4.QtCore import QSize +from PyQt4.QtGui import QColor +from PyQt4.QtGui import QPainter + +def makeImage(dow, tod): + layer = qgis.utils.iface.activeLayer() + renderer = layer.rendererV2() + + renderer.setClassAttribute("-predicted_pickup_"+str(dow)+"_"+str(tod)) + + #http://docs.qgis.org/testing/en/docs/pyqgis_developer_cookbook/composer.html + + # create image + img = QImage(QSize(800, 1000), QImage.Format_ARGB32_Premultiplied) + + # set image's background color + color = QColor(255, 255, 255) + img.fill(color.rgb()) + + # create painter + p = QPainter() + p.begin(img) + p.setRenderHint(QPainter.Antialiasing) + + render = QgsMapRenderer() + + # set layer set + layers_to_draw = [] + + for l in iface.mapCanvas().layers(): + if l.name() in ['grid', 'nyc_projected']: + layers_to_draw.append(l.id()) + + #lst = [layer.id()] + lst = layers_to_draw # add ID of every layer + render.setLayerSet(lst) + + # set extent + rect = QgsRectangle(render.fullExtent()) + rect.scale(1.1) + render.setExtent(rect) + + # set output size + render.setOutputSize(img.size(), img.logicalDpiX()) + + # do the rendering + render.render(p) + p.end() + + # create file path + imPath = '/Users/danil/Documents/GitHub/dmc/notebooks/workshop-1/-screenshots/' + imName = str(dow) + "_" + str(tod) + + # save image + img.save(imPath + imName + '.png',"png") + + +for i in range(24): + makeImage(0,i) \ No newline at end of file