Skip to content

Instantly share code, notes, and snippets.

@frederikhermans
Created November 10, 2015 13:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save frederikhermans/b4906e6e5d05954a9907 to your computer and use it in GitHub Desktop.
Save frederikhermans/b4906e6e5d05954a9907 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"metadata": {
"name": "",
"signature": "sha256:0ca45d9480f0edba8e30e6e1fe6b6380e56a77765501dea5ad6c1c1f67307fdf"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Notebook following the TensorFlow tutorial (http://tensorflow.org/tutorials/mnist/pros/index.md)."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import tensorflow as tf\n",
"import matplotlib.pyplot as plt\n",
"\n",
"plt.rcParams['image.cmap'] = 'gray'\n",
"plt.rcParams['image.interpolation'] = 'nearest'\n",
"\n",
"%matplotlib inline"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 1
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import os.path\n",
"\n",
"if not os.path.isfile('input_data.py'):\n",
" import requests\n",
"\n",
" URL = 'https://raw.githubusercontent.com/tensorflow/tensorflow/d6357a5849db980df51d00d8a9ff874cda2faeb3/tensorflow/g3doc/tutorials/mnist/input_data.py'\n",
" content = requests.get(URL).content\n",
" with open('input_data.py', 'wb') as fout:\n",
" fout.write(content)\n",
"\n",
"import input_data"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 2
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"mnist = input_data.read_data_sets('.', one_hot=True)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Extracting ./train-images-idx3-ubyte.gz\n",
"Extracting"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
" ./train-labels-idx1-ubyte.gz\n",
"Extracting ./t10k-images-idx3-ubyte.gz\n",
"Extracting"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
" ./t10k-labels-idx1-ubyte.gz\n"
]
}
],
"prompt_number": 3
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Show first five figures from training set and testing set.\n",
"plt.figure(figsize=(15, 3))\n",
"for i in xrange(5):\n",
" plt.subplot(1, 5, i+1)\n",
" plt.imshow(mnist.train.images[i].reshape(28, 28))\n",
"\n",
"plt.figure(figsize=(15, 3))\n",
"for i in xrange(5):\n",
" plt.subplot(1, 5, i+1)\n",
" plt.imshow(mnist.test.images[i].reshape(28, 28))"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "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\n0wTqrOOpiQAAAAAAd7ARAwAAAACfsREDAAAAAJ+xEQMAAAAAnzGsAxGNG3JhGjoL09BZmIbOwjQM\n6wAAAACACMFGDAAAAAB8xkYMAAAAAHzGRgwAAAAAfObZRuyRRx7x6tRoJMLRIXqLUNBZmIbOwjR0\nFqapqz+eTU0EAAAAAOjxrYkAAAAA4DM2YgAAAADgM883YgUFBZKWliZdunSRpUuXenKN5ORk6dmz\np2RmZkq/fv1cO++kSZMkPj5eevToUZtdvHhRsrOzJSUlRXJycuTy5cueXGfevHmSlJQkmZmZkpmZ\nKQUFBSFdo6SkRLKysiQ9PV26d+8uK1euFBH3n0+g67j9fLzkR2dFvOltNHVWxJ/e0lnn6Gz9eK11\nxuTOivjTWzobWehs8NfhPW0dbA/dvHnT7tSpk33mzBn7xo0bdkZGhn3ixAnXr5OcnGxXVFS4ft4D\nBw7YR48etbt3716bzZo1y166dKlt27a9ZMkS+6mnnvLkOvPmzbOXLVsW8rlvKSsrs4uKimzbtu0r\nV67YKSkp9okTJ1x/PoGu4/bz8YpfnbVtb3obTZ21bX96S2edo7P147W2fqZ31rb96S2djRx0NrTr\n8J42ME8/ESssLJTOnTtLcnKyxMTEyOjRo+XNN9/05Fq2BzNHBg4cKC1btrwt2759u0ycOFFERCZO\nnCjbtm3z5Doi7j6nhIQE6dWrl4iIxMbGSteuXaW0tNT15xPoOiLe/B65zc/Oirj/3ySaOiviT2/p\nbMPQ2brxWls/0zsr4k9v6WzkoLOhXUeE97SBeLoRKy0tlXbt2tX+OikpqfYJuMmyLBk8eLD06dNH\n1q9f7/r5/1t5ebnEx8eLiEh8fLyUl5d7dq1Vq1ZJRkaG5ObmuvJx8S1nz56VoqIi6d+/v6fP59Z1\nBgwYICLePR83+dVZEf96Gw2dFfGnt3S2bnS2YXit1YvGzor411s66z86Gzre0+p5uhGzLMvL09c6\nfPiwFBUVyc6dO2XNmjVy8OBBX65rWZZnzzEvL0/OnDkjxcXFkpiYKDNnznTlvJWVlTJixAhZsWKF\nNG/e/LZ/5+bzqayslJEjR8qKFSskNjbWs+fjNr86KxKe3prYWRF/ektn60dnneO1NrBo76yId72l\ns+FBZ0PDe9rAPN2ItW3bVkpKSmp/XVJSIklJSa5fJzExUURE2rRpI8OHD5fCwkLXr3FLfHy8nDt3\nTkREysrKJC4uzpPrxMXF1ZZo8uTJrjynqqoqGTFihIwfP16GDRsmIt48n1vXGTduXO11vHg+XvCr\nsyL+9dbkzor401s66wyddYbX2rpFY2dF/OktnQ0POhsa3tMG5ulGrE+fPvLpp5/K2bNn5caNG7J5\n82YZOnSoq9e4du2aXLlyRURErl69Krt27bptUovbhg4dKvn5+SIikp+fX/ub4raysrLaf966dWvI\nz8m2bcnNzZVu3brJtGnTanO3n0+g67j9fLziR2dF/O2tqZ0V8ae3dNYZOusMr7X1i8bOivjTWzob\nHnQ2NLynrfsintqxY4edkpJid+rUyV60aJHr5//ss8/sjIwMOyMjw05PT3f1GqNHj7YTExPtmJgY\nOykpyd64caNdUVFhDxo0yO7SpYudnZ1tX7p0yfXrbNiwwR4/frzdo0cPu2fPnvb3vvc9+9y5cyFd\n4+DBg7ZlWXZGRobdq1cvu1evXvbOnTtdfz666+zYscP15+Mlrztr2971Npo6a9v+9JbOOkNnneG1\n1hmTO2vb/vSWzkYWOhvcdXhPWzfLtiN8VA0AAAAARBnPf6AzAAAAAOB2bMQAAAAAwGdsxAAAAADA\nZ2zEAAAAAMBnbMQAAAAAwGdsxAAAAADAZ2zEAAAAAMBnbMQAAAAAwGf/B7EeqvzC5E78AAAAAElF\nTkSuQmCC\n",
"text": [
"<matplotlib.figure.Figure at 0x1159ff9d0>"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\n",
"text": [
"<matplotlib.figure.Figure at 0x1159fffd0>"
]
}
],
"prompt_number": 4
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"sess = tf.InteractiveSession()"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 5
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Softmax regression model ##"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"x = tf.placeholder(\"float\", shape=[None, 784])\n",
"y_ = tf.placeholder(\"float\", shape=[None, 10])"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 6
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"W = tf.Variable(tf.zeros([784,10]))\n",
"b = tf.Variable(tf.zeros([10]))"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 7
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"sess.run(tf.initialize_all_variables())"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 8
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"y = tf.nn.softmax(tf.matmul(x,W) + b)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 9
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"cross_entropy = -tf.reduce_sum(y_*tf.log(y)) "
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 10
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 11
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%%time\n",
"for i in range(1000):\n",
" batch = mnist.train.next_batch(50)\n",
" train_step.run(feed_dict={x: batch[0], y_: batch[1]})"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"CPU times: user 1.7 s, sys: 1.45 s, total: 3.15 s\n",
"Wall time: 2.03 s\n"
]
}
],
"prompt_number": 13
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Evaluate the model ##"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1)) "
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 14
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"accuracy = tf.reduce_mean(tf.cast(correct_prediction, \"float\")) "
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 15
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"feed_dict = {x: mnist.test.images, y_: mnist.test.labels}"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 67
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"print accuracy.eval(feed_dict=feed_dict)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"0.9199\n"
]
}
],
"prompt_number": 68
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# XXX How to avoid repeated evaluation?\n",
"inferred_labels = tf.argmax(y, 1).eval(feed_dict=feed_dict)\n",
"correct_labels = tf.argmax(y_, 1).eval(feed_dict=feed_dict)\n",
"is_correct = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1)).eval(feed_dict=feed_dict)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 89
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import numpy as np\n",
"\n",
"# Indices of misclassified images\n",
"misclassified_idxs = np.arange(len(mnist.test.images))[~is_correct]"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 79
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"print len(inferred_labels)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"10000\n"
]
}
],
"prompt_number": 84
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Plot 10 randomly chosen misclassified digits\n",
"plt.figure(figsize=(18, 8))\n",
"subplot = 1\n",
"for i in np.random.choice(misclassified_idxs, size=10, replace=False):\n",
" plt.subplot(2, 5, subplot)\n",
" plt.imshow(mnist.test.images[i].reshape(28, 28))\n",
" subplot += 1\n",
" title = 'Classified as {} should be {}'.format(inferred_labels[i],\n",
" correct_labels[i])\n",
" plt.title(title)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAABAoAAAHMCAYAAABcLUoiAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XlclXX6//HrAGYFh81kUTBEwgUMNcZMxbLSnHRMR8dl\n0lyoSUcf2dSUtqlZmZa22TLuWi6VU6nlUmnmqBPjd6bM1Kw0UVxwBRTcEK/fH/y8i7xv4Nycw3LO\n6/l4nEdx3ff5fD7nHN4cuLzPfTtUVQUAAAAAAEBE/Kp6AQAAAAAAoPqgUQAAAAAAAAw0CgAAAAAA\ngIFGAQAAAAAAMNAoAAAAAAAABhoFAAAAAADAUG0bBePHj5eBAwd6bPzk5GT517/+JSIiqipDhgyR\n8PBwadOmjWzcuFGaNGlia9wvv/xSYmNj3blUj5k3b56kpaV5ZOy4uDhZu3at6bayniM/Pz/5+eef\nPbIuX0F+PI/8eCey43lkx3uRH88jP96L/Hge+XFNlTYKFi1aJKmpqeJ0OqVevXpy5513yqZNm0RE\nxOFweHTubdu2SYcOHUREZOPGjbJmzRo5ePCgZGRkSPv27WXnzp0enb8iMjMzxc/PT5xOp3F77rnn\nqnpZJTgcDo+/hmU5fvy4tGvXTq655hoJDQ2Vtm3byr///e8qXZM7kR97duzYIampqRIeHi7h4eHS\nqVMn+f7776t6WSVUh/xs2LChxM8Yp9Mpfn5+8tFHH1XputyB7NhDdsrHm7MjQn7sWrhwYYnvicDA\nQPHz85NvvvmmqpdmqA75ERH54osvpFWrVhISEiKNGjWSmTNnVvWS3Ib82MP7T/n5+flJUFCQ8bPm\nL3/5i/2x3Lgul7z00kvyt7/9TZ588kk5cuSIZGVlyYgRI+Tjjz8WkeJOV2XZu3evxMXFyZVXXllp\nc7rDyZMn5dSpU3Lq1Cl54oknqno51U5QUJDMmTNHjhw5Irm5uTJ69Gj5wx/+IBcvXqzqpVUY+bGv\nfv36smTJEjl+/LgcP35cunfvLv369avqZVU7aWlpxs+XU6dOySeffCJBQUHSpUuXql5ahZAd+8hO\n+XhrdkTIT0XcfffdJb4v3nzzTWnUqJG0bNmyqpdWrRQWFkrPnj1l+PDhkpeXJ++995489NBDsnXr\n1qpeWoWRH/t4/3HNd999Z/ysmTFjhu1xqqRRkJeXJ+PGjZM333xTevToIVdddZX4+/tL165dZdKk\nSab3+dOf/iTR0dESGhoqN998s+zYscPYtnLlSklKSpLg4GCJiYmRqVOniojIsWPHpFu3bhIWFiZ1\n6tQxumgivxweMnv2bLnvvvvkq6++EqfTKU8//fRlh4ccPHhQevXqJRERERIfHy/Tpk0ztp05c0YG\nDx4s4eHhkpSUJP/3f/9X6mMfNWqUNGjQQEJCQiQ1NVU2btxobNu8ebOkpqZKSEiIREVFycMPP1zq\nWOX9g3fevHnSqFEjCQ4Olvj4eFm0aFGJ7Y888oiEh4dLfHy8rF69usTj7t69u9SpU0euu+46mTVr\nlrFt8ODB8tRTTxlfl3ZIjavPkYjIihUrpFGjRlK3bl159NFHS/zwnDNnjjRr1kzCw8OlS5cusm/f\nPtMxateuLY0bNxY/Pz+5ePGi+Pn5SU5Ojpw4caLM+asz8lOx/ISEhEjDhg3F4XBIUVGR+Pn5ye7d\nuy3n9NX8mD0Pf/rTn+Sqq64q1/7VEdkhO2UhO9bIj3t+d7tk3rx5cs8995S63Rfzc+LECTl16pRx\nCH5qaqo0bdq02v3rsavID+8/ZXHn+4/b/lFUq8CqVas0ICBAi4qKLPcZN26cDhgwwPh67ty5mp+f\nr+fPn9cHH3xQW7RoYWyLiorSjRs3qqpqbm6ufv3116qqOmbMGB02bJheuHBBL1y4YOyjqhoXF6dr\n165VVdV58+Zp+/btjW3r1q3TmJgYVVUtKirSVq1a6TPPPKOFhYX6888/a3x8vH766aeqqjp69Gjt\n0KGD5uTkaFZWliYlJWlsbKzl41qwYIGeOHFCi4qKdOrUqRoVFaXnzp1TVdU2bdroggULVFW1oKBA\nMzIyTMfYs2ePOhwOrV+/vsbExOiQIUP02LFjpvvm5+drcHCw/vjjj6qqmp2drdu3bzee01q1aums\nWbP04sWL+tZbb2m9evWM+6alpemIESP03LlzumXLFq1bt65+8cUXqqo6ePBgfeqpp0yfs98+v64+\nRw6HQ2+99VbNycnRffv2aWJios6aNUtVVZcuXaoJCQm6c+dOLSoq0meffVbbtm1rOZaqavPmzfWK\nK65Qh8Ohf/nLX0rdtyYgPxXLzyUhISEaEBCgfn5++txzz5nuQ35+eR6cTqeuX7++zH2rM7JDdsiO\nfeTHPflRVc3MzFR/f3/NzMw03e7r+fnzn/+sb7zxhl64cEE3bdqkERERun///lKf0+qO/PD+U1n5\ncTgcWq9ePY2KitI//vGPlj9nyqNKGgULFizQqKioUvf5bVh+LScnRx0Oh548eVJVVRs0aKDTp0/X\nvLy8EvuNHTtW77rrLt21a9dlY/z6xZw7d65lWDIyMrRBgwYl7jtx4kQdMmSIqmqJ4Kiqzpgxo8Q3\nTVnCwsJ069atqqraoUMHHTdunB49erTU++Tn5+v//vc/LSoq0sOHD2vv3r31jjvusNw3NDRUP/jg\nAz19+nSJbXPnztWEhATj64KCAnU4HHr48GHdt2+f+vv7a35+vrH9scce08GDB6tqcViefPJJY1tp\nYXH1OXI4HCX2f/PNN/W2225TVdUuXbro7NmzjW1FRUV69dVX6759+yzHU1U9d+6cLl68WOfPn1/q\nfjUB+fmFnfz8WkFBgb755pu6YsUK0+3kp9jbb7+t8fHxpe5TE5CdX5Cdy5Gd0pGfX1Q0PxMmTNCO\nHTtabvf1/CxfvlwjIyM1ICBAAwICjD+YajLy8wvefy7nzvxs2LBBCwsLNTc3V0eOHKnJycl64cIF\ny7lLUyUfPahTp44cO3as3IdFFBUVyZgxYyQhIaHEoSfHjh0TEZEPPvhAVq5cKXFxcXLLLbdIRkaG\niBQfVpKQkCCdO3eWRo0ayeTJk11e6969e+XgwYMSFhZm3J5//nk5cuSIiBQfovLrw04aNGhQ6nhT\npkyRZs2aSWhoqISFhUleXp7xOGbPni0//vijNG3aVFq3bi0rVqwwHSMwMFBatWolfn5+EhERIa+/\n/rp89tlnUlBQYLrve++9J//4xz+kXr160q1bN/nhhx+M7VFRUcb/X3311SIikp+fLwcPHpTw8HAJ\nDAws8dgOHDhQ1lN2GVefIxG5bP+DBw+KSPHrMWrUKOO1qFOnjohImeu64oorpF+/fjJp0qQa/zk3\n8lOx/Pza1VdfLcOGDZN77rnHGOfXyE+x+fPnl3qIbE1BdshOWciONfLjvvy8/fbbMmjQIMvtvpyf\nnTt3Sr9+/eSdd96RwsJC2b59u0yePFlWrlzp8mOoTsgP7z9lcdf7T/v27SUgIEBCQkLk1VdflczM\nTNsnqqySRsFNN90ktWvXLvcZgBctWiTLly+XtWvXSl5enuzZs0e0+GgIESn+/NLSpUvl6NGj0qNH\nD+nTp4+IFJ/MbsqUKbJ7925Zvny5vPTSS7Ju3TqX1hobGysNGzaUnJwc43by5En55JNPREQkOjq6\nxOdESvvMyIYNG+TFF1+UJUuWSG5uruTk5EhISIjxOBISEmTRokVy9OhRGT16tPTu3VvOnDlT7rVa\n/fDp3LmzfPbZZ5KdnS1NmjSR++67r8yx6tWrJydOnJD8/PwSjy0mJkZEikN4+vRpY1t2drblWK48\nR2b77Nu3T+rXry8ixcGZMWNGidejoKBA2rRpU+aYIsUnydmzZ0+59q2uyI9781NUVCSnT5+2/IHr\n6/nJysqS9evXe8UfO2SH7JSF7FgjP+7Jz6ZNm+TQoUPSu3fvUh+Dr+Zn27Zt0rhxY+nUqZOIiCQm\nJkrXrl1l1apVZc5fnZEf3n/K4om/fS49z2rzRJlV0igICQmRCRMmyIgRI2TZsmVy+vRpKSwslFWr\nVsno0aMv2z8/P19q164t4eHhUlBQII8//rixrbCwUBYuXCh5eXni7+8vTqdT/P39RUTkk08+kV27\ndomqSnBwsPj7+4ufn2sPuXXr1uJ0OuWFF16QM2fOSFFRkWzbtk3++9//iohInz595Pnnn5fc3FzZ\nv39/iZN9/NapU6ckICBArrnmGjl//rxMmDBBTp48aWxfsGCBHD161HiOHA6H6Xo3b94sP/zwg1y8\neFGOHz8uDzzwgHTs2FGcTudl+x45ckSWLVsmBQUFUqtWLQkMDDSen9LExsZK27Zt5bHHHpNz587J\n1q1bZc6cOTJgwAAREWnRooWsXLlScnJyJDs7W1555RXLsVx5ji6ZMmWK5ObmSlZWlrz22mvSt29f\nEREZNmyYTJw40TihS15enixZssR0jP/85z+yceNGOX/+vJw5c0YmT54sR44ckRtvvLHM+asz8lOx\n/KxZs0a2bNkiRUVFcvLkSXnooYckPDxcmjZtetm+vpyfS9555x1p166dNGzYsMx5qzuyQ3bKQnas\nkZ+K5eeS+fPnS+/evUv8q+Vv+XJ+WrVqJbt27ZJ169aJqsru3bvlk08+kZSUlDLnr87ID+8/ZXFH\nfnbs2GE8T/n5+fLQQw9JTEyM6fNULrY+sOAmCxcu1NTUVA0MDNSoqCjt1q2bfvXVV6qqOn78eB04\ncKCqFn/W5K677lKn06lxcXH69ttvq5+fn+7evVvPnz+vXbp00bCwMA0ODtbWrVvrpk2bVFX15Zdf\n1ri4OA0MDNSYmBh99tlnjbl/e0KPtLQ0Y9u6detKnHDi4MGD2r9/f42KitKwsDC96aabjPuePn1a\n77nnHg0NDdWkpCR98cUXLU9WUVRUpEOHDtXg4GCNjo7WF154QRs2bGiMNWDAAI2IiNCgoCBNTk7W\nZcuWmY6zePFibdiwoQYGBmp0dLQOGjRIDx8+bLrvoUOH9Oabb9aQkBANDQ3Vjh076vfff2/6uFXV\neF5VVffv36/dunXT8PBwbdSokU6fPt3Y7+zZs9q3b18NDg7WlJQUffnll0s87l8/v648R6rFn9OZ\nNm2axsfHa506dfTvf/97iZO/vPPOO9q8eXMNDg7W2NhYTU9PNx1n/fr1mpKSok6nU8PDw/WWW27R\nDRs2WM5b05Afe/lZsmSJNmnSRIOCgrRu3brarVs3/e6770z39eX8XNKkSROdM2dOqfvUNGSH7Jgh\nO+VDfuzlR1X1zJkzGhoaapwczYqv5+f999/X5ORkdTqdGhMTo2PGjCn1+apJyA/vP2bclZ8vvvhC\nGzdurIGBgRoREaE9e/Y0PV9FeTlUK/GinQAAAAAAoFqrko8eAAAAAACA6olGAQAAAAAAMNhuFKxe\nvVqaNGki1113na1LbwC+jPwA9pEfwD7yA9hHfuBLbJ2joKioSBo3bixr1qyR+vXry+9+9ztZvHix\n/TMqAj6E/AD2kR/APvID2Ed+4GsC7Nxp8+bNkpCQIHFxcSIi0q9fP1m2bFmJoDgcDrcsEKhsnj6/\nJ/mBt6qMc+OSH3gr8gPYR34A+6zyY+ujBwcOHJDY2Fjj65iYGDlw4IC9lQE+hvwA9pEfwD7yA9hH\nfuBrbDUK6JYB9pEfwD7yA9hHfgD7yA98ja1GQf369SUrK8v4OisrS2JiYty2KMCbkR/APvID2Ed+\nAPvID3yO2lBYWKjx8fG6Z88ePXfunKakpOiOHTtK7CMi3LjVyJunkR9u3nqrDOSHm7feyA83bvZv\n5IcbN/s3K7ZOZhgQECCvv/663HHHHVJUVCTp6emc8RMoJ/ID2Ed+APvID2Af+YGvsXV5xHINzOd4\nUEN5KBIuIT+oiapDdkTID2om8gPYR34A+6zyY+scBQAAAAAAwDvRKAAAAAAAAAYaBQAAAAAAwECj\nAAAAAAAAGGgUAAAAAAAAA40CAAAAAABgoFEAAAAAAAAMNAoAAAAAAICBRgEAAAAAADDQKAAAAAAA\nAAYaBQAAAAAAwECjAAAAAAAAGGgUAAAAAAAAA40CAAAAAABgoFEAAAAAAAAMNAoAAAAAAICBRgEA\nAAAAADAEVPUCIJKQkGBaf/zxx03rt912m+VYt956q2l99+7dri8MAAAAACpJaGioaT0jI8O0ft11\n17k8x4YNG0zrTz/9tGn93//+t2n93LlzLs9dk3BEAQAAAAAAMNAoAAAAAAAABhoFAAAAAADAQKMA\nAAAAAAAYKnQyw7i4OAkODhZ/f3+pVauWbN682V3rArwe+QHsITuAfeQHsI/8wJc4VFXt3rlhw4by\nv//9T8LDwy8f2OGo0MJ8yX/+8x/TeuvWrU3rpb1kVmPddNNNri/MR1UgEi4hP/A21SE7IjUrPy1a\ntLDctn79etO61eObOXOmW9YkIuJ0Ok3r6enppvV3333XtF6vXj3LOb7++mvT+qFDh0zr06ZNM617\ny1mnyQ9gH/nxHrGxsab1PXv2uG0Oq9fJ6vto3bp1pvUTJ06Y1q2uqiAisnjxYtP68ePHLe/jaVaP\nu8IfPaisYALeiPwA9pAdwD7yA9hHfuArKtQocDgccvvtt0tqaqpb/yUD8AXkB7CH7AD2kR/APvID\nX1KhcxRs2rRJoqOj5ejRo9KpUydp0qSJpKWluWttgFcjP4A9ZAewj/wA9pEf+JIKHVEQHR0tIiJ1\n69aVnj17ckIPwAXkB7CH7AD2kR/APvIDX2K7UXD69Gk5deqUiIgUFBTIZ599Js2bN3fbwgBvRn4A\ne8gOYB/5AewjP/A1tj96cPjwYenZs6eIiFy4cEHuvvtu6dy5s9sW5kusrlTwu9/9zm1joXohP64J\nCgqy3Pbll1+a1iMjI03rCxcudMeSShUcHGxaHz58uGnd6sRIHTp0sJxj48aNri/MC3hbdo4dO2a5\nLTMz07SenJxsWh81apQ7liQirp8Rum/fvi7PYfX9bTWHVa7Gjh3r8ty+ytvy407PPPOMab13796W\n92ncuLFLc1idtX3KlCmm9VmzZlmOVVhYaFpv27ataf2uu+4yrVv9nLEzt7cjP95j5MiRpvVLR4z8\nVmJiomm9a9eupvXSfm5YzfHEE09Y3qeq2G4UNGzYULZs2eLOtQA+g/wA9pAdwD7yA9hHfuBrKnx5\nRAAAAAAA4D1oFAAAAAAAAAONAgAAAAAAYKBRAAAAAAAADDQKAAAAAACAwaFW1yGq6MAWl1bC5caN\nG+dSPTs723Ks22+/3bS+Y8cO1xfmozwUCZeQn/KbN2+eaX3gwIGVuxAP+OCDDyy39enTpxJXUj7V\nITsi3pMfq0soWV0eMT093ZPLKdWtt95qWg8PD7e8j6uXYPz2229N67fccotp/dL1zmsK8uNeSUlJ\npvU//OEPpvWJEyea1ivjdbF6zhcvXmx5H6tLqw4bNsy0HhBgfqEzq7lzcnIs537yySdN62+99Zbl\nfTyN/HiPjz/+2LT++9//3qVxZs6cabnN6nLVrrJ6n/b397e8z/Hjx03rZ86cccua7LDKD0cUAAAA\nAAAAA40CAAAAAABgoFEAAAAAAAAMNAoAAAAAAICBRgEAAAAAADCYnwIVHnHttdea1gcPHuzSOEuW\nLLHcxtUN4Gveffdd07rVma1DQ0NN6999951p/ezZsy6vySrrERERLo1z6NAhl+eG97B6/a3qn3/+\nuSeXU6pNmzaZ1m+88Ua3zfHTTz+Z1mva1Q3gPv3797fcNmvWLNP6lVde6dIcR48etdy2cuVK07rV\nFRSs3HPPPab1J554wqVx3MnqvVJEZNSoUab1qrzqAWoep9NpWu/WrZtp/eLFiy6Nv2rVKpfX5Cpv\n/z2NIwoAAAAAAICBRgEAAAAAADDQKAAAAAAAAAYaBQAAAAAAwECjAAAAAAAAGLjqQSVq0aKFad3q\nDOlW8vPzLbcNHDjQtL5u3TrT+v79+12aG6huVq9ebVq/+eabTet169Y1rW/evNm0XlBQYDl3UlKS\nS2ty1TvvvOOWcQBPczgcLtVFRPz8zP+twurM1q+88orrC4NXGz9+vOU2V69uMH36dJfnOHz4sEtz\nWPnqq6/cMo6IyLlz50zrtWvXdtsc06ZNc9tY8F333nuvad3qPUBVTevHjx83rWdkZNhbGAwcUQAA\nAAAAAAw0CgAAAAAAgIFGAQAAAAAAMNAoAAAAAAAAhjIbBUOHDpXIyEhp3ry5UTtx4oR06tRJEhMT\npXPnzpKbm+vRRQI1EdkB7CM/gH3kB7CP/ADFHGp1Csn/b8OGDRIUFCT33HOPfPfddyIi8uijj8o1\n11wjjz76qEyePFlycnJk0qRJJQcu5UzH3iw2NtZy29KlS03rLVu29NRyDF9//bVp/amnnjKtr1q1\nypPLqdbKiES52c2OiO/mp6bJysoyrderV8+lcebPn29aHzlypOV9Tp8+7dIclcFd2REhP9VVYmKi\naX3jxo2m9fDwcMuxrF4nq++j9u3bm9a95czW5Md1P/zwg+W2hIQE07rVVaBuv/12t6zJjpSUFNN6\n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\nfvhhj86Xn58vvXr1kldffVWcTmeJbZ5+7Pn5+dK7d2959dVXJSgoqNIfu6eQn194c37IjmeQn1+Q\nH8/N7Y35qersiFSf/HhzdkTIjydUdX6qS3ZEyI835MejjYL69etLVlaW8XVWVpbExMR4csoSoqOj\nRUSkbt260rNnT9m8eXOlzS1S3E3Kzs4WEZFDhw5JREREpc0dERFhfJPee++9Hn3shYWF0qtXLxk4\ncKD06NFDRCrvsV+ae8CAAcbclfnYPYn8eH9+yI7nkB/yQ37sqersiFRtfnwhOyLkx1OqOj+895Af\ndz52jzYKUlNT5aeffpLMzEw5f/68vPfee9K9e3dPTmk4ffq0nDp1SkRECgoK5LPPPitxZszK0L17\nd5k/f76IiMyfP994MSvDoUOHjP//6KOPPPbYVVXS09OlWbNm8uCDDxr1ynjsVnNX1mP3NPLj3fkh\nO55FfsgP+bGnKrMjUvX58fbsiJAfT+K9h/yIeFF+3H56xN9YuXKlJiYmaqNGjXTixImens7w888/\na0pKiqakpGhSUpLH5+7Xr59GR0drrVq1NCYmRufMmaPHjx/X2267Ta+77jrt1KmT5uTkVMrcs2fP\n1oEDB2rz5s31+uuv17vuukuzs7M9MveGDRvU4XBoSkqKtmjRQlu0aKGrVq2qlMduNvfKlSsr7bFX\nBvLjvfkhO55HfsgP+bGnqrKjWrn58cXsqJIfT+O9h/x4S34cql5wilEAAAAAAOAWHv3oAQAAAAAA\nqFloFAAAAAAAAAONAgAAAAAAYKBRAAAAAAAADDQKAAAAAACAgUYBAAAAAAAw0CgAAAAAAAAGGgUA\nAAAAAMBAowAAAAAAABhoFAAAAAAAAAONAgAAAAAAYKBRAAAAAAAADDQKAAAAAACAgUYBAAAAAAAw\n0CgAAAAAAAAGGgUAAAAAAMBAowAAAAAAABhoFAAAAAAAAAONAgAAAAAAYKBRAAAAAAAADDQKAAAA\nAACAgUYBAAAAAAAw0CgAAAAAAAAGGgUAAAAAAMBAowAAAAAAABhoFAAAAAAAAAONAgAAAAAAYKBR\nAAAAAAAADDQKAAAAAACAgUYBAAAAAAAw0CgAAAAAAAAGGgUAAAAAAMBAowAAAAAAABhoFAAAAAAA\nAAONAgAAAAAAYKBRAAAAAAAADDQKAAAAAACAgUYBAAAAAAAw0CgAAAAAAAAGGgUAAAAAAMBAowAA\n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\n2FZaWFx9jhwOR4n933zzTb3ttttUVbVLly46e/ZsY1tRUZFeffXVum/fPtOxli9frpGRkRoQEKAB\nAQFG6Goy8vMLO/nJz8/X//3vf1pUVKSHDx/W3r176x133GG5r6/mZ+HChepwOPTee+/Vs2fP6tat\nW7Vu3br6+eefW85dE5CfX9jJT3p6uo4ZM6ZErV27djp//vzL9vXl/KiqbtiwQQsLCzU3N1dHjhyp\nycnJeuHCBcu5qzuy84uK/u727bffanh4eIk/4n7Nl7PDew/5McPvblXzt0+VfPSgTp06cuzYsXIf\nPlJUVCRjxoyRhIQECQkJkYYNG4rD4ZBjx46JiMgHH3wgK1eulLi4OLnlllskIyNDRIoPK0lISJDO\nnTtLo0aNZPLkyS6vde/evXLw4EEJCwszbs8//7wcOXJERIoPUfn1YScNGjQodbwpU6ZIs2bNJDQ0\nVMLCwiQvL894HLNnz5Yff/xRmjZtKq1bt5YVK1a4vN7fCgwMlPfee0/+8Y9/SL169aRbt27yww8/\nGNujoqKM/7/66qtFRCQ/P18OHjwo4eHhEhgYWOKxHThwwOU1uPocichl+x88eFBEil+PUaNGGa9F\nnTp1RERM17Vz507p16+fvPPOO1JYWCjbt2+XyZMny8qVK11+DNUJ+alYfgIDA6VVq1bi5+cnERER\n8vrrr8tnn30mBQUFpvv6an6uuuoqEREZO3as1K5dW5o3by79+vUjPz6en6CgIDl58mSJWl5enjid\nzsv29eX8iIi0b99eAgICJCQkRF599VXJzMys1icLKwvZcc/vbrt27ZI777xTXnvtNWnXrp3pPr6c\nHd57ipGfkvjdrWr+9qmSRsFNN90ktWvXlo8++qhc+y9atEiWL18ua9eulby8PNmzZ49o8dEQIlL8\n+YulS5fK0aNHpUePHtKnTx8RKf6FZsqUKbJ7925Zvny5vPTSS7Ju3TqX1hobGysNGzaUnJwc43by\n5En55JNPREQkOjq6xOdESvu84oYNG+TFF1+UJUuWSG5uruTk5EhISIjxOBISEmTRokVy9OhRGT16\ntPTu3VvOnDnj0nrNdO7cWT777DPJzs6WJk2ayH333VfmferVqycnTpyQ/Pz8Eo8tJiZGRIpDePr0\naWNbaWfudeU5Mttn3759Ur9+fREpDs6MGTNKvB4FBQXSpk2by8bYtm2bNG7cWDp16iQiIomJidK1\n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\nAICNgwIAAAAAAGDjoAAAAAAAANg8OyjIy8vz6tKAZ8Ll6zZc9gF0Vzh9zYbTXoDuCKev2XDaC9Ad\n4fQ1G057Aboj0Nesz7IsK4h7AQAAAAAAYYy/egAAAAAAAGwcFAAAAAAAAJvnBwUHDhyQYcOGyaOP\nPiqVlZVeL9dJSkqKjBw5UrKysmT06NGerlVSUiJ+v18yMjLs7PLly1JQUCCpqalSWFgoV69eDdra\nFRUVkpSUJFlZWZKVlSUHDhzwZO2GhgbJz8+XtLQ0SU9Pl/Xr14tIcN67bu1gvfdgoD/R2x+64z36\nQ3/oj5lQdkckeP2Jxe6I0B+v8b2H/kRNfywP3blzxxoyZIh1/vx569atW1ZmZqb10UcfeblkJykp\nKdalS5eCstbRo0et999/30pPT7ezX//611ZlZaVlWZa1atUq6ze/+U3Q1q6oqLBWr17tyXrf1NTU\nZNXW1lqWZVmtra1Wamqq9dFHHwXlvevWDtZ79xr9ie7+0B1v0R/6Q3/MhLo7lhW8/sRidyyL/ngp\n1P3hew/9cZOnv1Fw+vRpGTp0qKSkpEjv3r1l5syZsm/fPi+X/D9WkO7VmJubK/369euUvfnmmzJv\n3jwREZk3b57s3bs3aGuLBOe9Dxw4UEaNGiUiInFxcTJ8+HBpbGwMynvXrS0SvD93L9Gf6O4P3fEW\n/aE/9MdMOHRHJDify1jsjgj98VI49IfvPd6Kpf54elDQ2NgoycnJ9r8nJSXZbyYYfD6f/PCHP5TH\nH39ctmzZErR1v9bS0iJ+v19ERPx+v7S0tAR1/Q0bNkhmZqaUlpZ69qs/31RfXy+1tbUyZsyYoL/3\nr9fOzs4WkeC/dy/Qn9jpD91xH/2hP/THTKi7IxLa/sRSd0Toj9tC3R++99AfN9+7pwcFPp/Py8t3\n6fjx41JbWytvvfWWbNy4UY4dOxayvfh8vqB+PubPny/nz5+Xuro6SUhIkEWLFnm6XltbmxQXF8u6\ndeukb9++nZ7z+r23tbXJ1KlTZd26dRIXFxf09+4V+nNPNPeH7niD/txDf7xbOxr7E+ruiIRPf6K5\nOyL0xwuh7k+4dEeE/kRDfzw9KEhMTJSGhgb73xsaGiQpKcnLJTtJSEgQEZEBAwbIlClT5PTp00Fb\nW+TuaVJzc7OIiDQ1NUl8fHzQ1o6Pj7e/SJ955hlP3/vt27eluLhY5syZI5MnTxaR4L33r9d+6qmn\n7LWD+d69RH+ivz90xzv0h/7QHzOh7o5IaPsTC90RoT9eCXV/+N5Df9x8754eFDz++OPy6aefZjYF\nuAAAAY5JREFUSn19vdy6dUt27twpRUVFXi5pu379urS2toqIyLVr1+TgwYOd7owZDEVFRVJVVSUi\nIlVVVfYfZjA0NTXZ/7xnzx7P3rtlWVJaWiojRoyQsrIyOw/Ge9etHaz37jX6E939oTveoj/0h/6Y\nCWV3RELfn2jvjgj98RLfe+iPSBT1x/XbI37L/v37rdTUVGvIkCHWypUrvV7Odu7cOSszM9PKzMy0\n0tLSPF975syZVkJCgtW7d28rKSnJ2r59u3Xp0iVr4sSJ1qOPPmoVFBRYV65cCcra27Zts+bMmWNl\nZGRYI0eOtCZNmmQ1Nzd7svaxY8csn89nZWZmWqNGjbJGjRplvfXWW0F576q19+/fH7T3Hgz0J3r7\nQ3e8R3/oD/0xE6ruWFZw+xOL3bEs+uM1vvfQn2jpj8+youAWowAAAAAAwBWe/tUDAAAAAAAQWTgo\nAAAAAAAANg4KAAAAAACAjYMCAAAAAABg46AAAAAAAADYOCgAAAAAAAA2DgoAAAAAAICNgwIAAAAA\nAGD7L8a/h+y2pk2UAAAAAElFTkSuQmCC\n",
"text": [
"<matplotlib.figure.Figure at 0x115f5e750>"
]
}
],
"prompt_number": 96
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Multilayer convolutional network ##"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"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)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 111
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"def conv2d(x, W):\n",
" return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME')\n",
"\n",
"def max_pool_2x2(x):\n",
" return tf.nn.max_pool(x, ksize=[1, 2, 2, 1],\n",
" strides=[1, 2, 2, 1], padding='SAME')"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 112
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"W_conv1 = weight_variable([5, 5, 1, 32])\n",
"b_conv1 = bias_variable([32]) "
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 113
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"x_image = tf.reshape(x, [-1,28,28,1]) "
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 114
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1)\n",
"h_pool1 = max_pool_2x2(h_conv1) "
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 115
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"W_conv2 = weight_variable([5, 5, 32, 64])\n",
"b_conv2 = bias_variable([64])\n",
"\n",
"h_conv2 = tf.nn.relu(conv2d(h_pool1, W_conv2) + b_conv2)\n",
"h_pool2 = max_pool_2x2(h_conv2)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 116
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"W_fc1 = weight_variable([7 * 7 * 64, 1024])\n",
"b_fc1 = bias_variable([1024])\n",
"\n",
"h_pool2_flat = tf.reshape(h_pool2, [-1, 7*7*64])\n",
"h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, W_fc1) + b_fc1)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 117
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"keep_prob = tf.placeholder(\"float\")\n",
"h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 118
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"W_fc2 = weight_variable([1024, 10])\n",
"b_fc2 = bias_variable([10])\n",
"\n",
"y_conv=tf.nn.softmax(tf.matmul(h_fc1_drop, W_fc2) + b_fc2)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 119
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"cross_entropy = -tf.reduce_sum(y_*tf.log(y_conv))\n",
"train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)\n",
"correct_prediction = tf.equal(tf.argmax(y_conv,1), tf.argmax(y_,1))\n",
"accuracy = tf.reduce_mean(tf.cast(correct_prediction, \"float\"))\n",
"sess.run(tf.initialize_all_variables())"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 120
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import sys"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 121
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%%time\n",
"for i in range(20000):\n",
" batch = mnist.train.next_batch(50)\n",
" if i%100 == 0:\n",
" train_accuracy = accuracy.eval(feed_dict={x:batch[0],\n",
" y_: batch[1],\n",
" keep_prob: 1.0})\n",
" print \"step %d, training accuracy %g\"%(i, train_accuracy)\n",
" sys.stdout.flush()\n",
" train_step.run(feed_dict={x: batch[0], y_: batch[1], keep_prob: 0.5})"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 0, training accuracy 0.2\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 100, training accuracy 0.84\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 200, training accuracy 0.9\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 300, training accuracy 0.8\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 400, training accuracy 0.96\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 500, training accuracy 0.98\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 600, training accuracy 0.9\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 700, training accuracy 0.94\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 800, training accuracy 0.92\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 900, training accuracy 0.92\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 1000, training accuracy 0.98\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 1100, training accuracy 0.98\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 1200, training accuracy 0.98\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 1300, training accuracy 0.96\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 1400, training accuracy 0.94\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 1500, training accuracy 0.94\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 1600, training accuracy 0.98\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 1700, training accuracy 0.98\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 1800, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 1900, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 2000, training accuracy 0.94\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 2100, training accuracy 0.94\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 2200, training accuracy 0.98\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 2300, training accuracy 0.98\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 2400, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 2500, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 2600, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 2700, training accuracy 0.98\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 2800, training accuracy 0.98\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 2900, training accuracy 0.96\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 3000, training accuracy 0.98\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 3100, training accuracy 0.98\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 3200, training accuracy 0.96\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 3300, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 3400, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 3500, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 3600, training accuracy 0.98\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 3700, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 3800, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 3900, training accuracy 0.98\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 4000, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 4100, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 4200, training accuracy 0.98\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 4300, training accuracy 0.98\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 4400, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 4500, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 4600, training accuracy 0.98\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 4700, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 4800, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 4900, training accuracy 0.98\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 5000, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 5100, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 5200, training accuracy 0.98\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 5300, training accuracy 0.98\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 5400, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 5500, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 5600, training accuracy 0.98\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 5700, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 5800, training accuracy 0.98\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 5900, training accuracy 0.98\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 6000, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 6100, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 6200, training accuracy 0.96\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 6300, training accuracy 0.98\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 6400, training accuracy 0.98\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 6500, training accuracy 0.98\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 6600, training accuracy 0.98\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 6700, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 6800, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 6900, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 7000, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 7100, training accuracy 0.98\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 7200, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 7300, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 7400, training accuracy 0.98\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 7500, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 7600, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 7700, training accuracy 0.98\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 7800, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 7900, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 8000, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 8100, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 8200, training accuracy 0.98\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 8300, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 8400, training accuracy 0.98\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 8500, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 8600, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 8700, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 8800, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 8900, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 9000, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 9100, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 9200, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 9300, training accuracy 0.98\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 9400, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 9500, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 9600, training accuracy 0.98\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 9700, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 9800, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 9900, training accuracy 0.98\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 10000, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 10100, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 10200, training accuracy 0.98\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 10300, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 10400, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 10500, training accuracy 0.98\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 10600, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 10700, training accuracy 0.98\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 10800, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 10900, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 11000, training accuracy 0.98\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 11100, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 11200, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 11300, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 11400, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 11500, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 11600, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 11700, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 11800, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 11900, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 12000, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 12100, training accuracy 0.98\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 12200, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 12300, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 12400, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 12500, training accuracy 0.98\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 12600, training accuracy 0.96\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 12700, training accuracy 0.96\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 12800, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 12900, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 13000, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 13100, training accuracy 0.98\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 13200, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 13300, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 13400, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 13500, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 13600, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 13700, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 13800, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 13900, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 14000, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 14100, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 14200, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 14300, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 14400, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 14500, training accuracy 0.98\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 14600, training accuracy 0.98\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 14700, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 14800, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 14900, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 15000, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 15100, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 15200, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 15300, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 15400, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 15500, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 15600, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 15700, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 15800, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 15900, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 16000, training accuracy 0.98\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 16100, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 16200, training accuracy 0.98\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 16300, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 16400, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 16500, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 16600, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 16700, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 16800, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 16900, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 17000, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 17100, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 17200, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 17300, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 17400, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 17500, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 17600, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 17700, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 17800, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 17900, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 18000, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 18100, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 18200, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 18300, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 18400, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 18500, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 18600, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 18700, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 18800, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 18900, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 19000, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 19100, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 19200, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 19300, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 19400, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 19500, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 19600, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 19700, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 19800, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"step 19900, training accuracy 1\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"CPU times: user 2h 52min 46s, sys: 9min 18s, total: 3h 2min 5s\n",
"Wall time: 1h 10min 11s\n"
]
}
],
"prompt_number": 122
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Evaluate the network ##"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"print \"test accuracy %g\"%accuracy.eval(feed_dict={x: mnist.test.images, y_: mnist.test.labels, keep_prob: 1.0})"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"test accuracy 0.9929\n"
]
}
],
"prompt_number": 123
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"feed_dict = {x: mnist.test.images, y_: mnist.test.labels, keep_prob: 1.0}\n",
"inferred_labels = tf.argmax(y_conv, 1).eval(feed_dict=feed_dict)\n",
"correct_labels = tf.argmax(y_, 1).eval(feed_dict=feed_dict)\n",
"is_correct = tf.equal(tf.argmax(y_, 1), tf.argmax(y_conv, 1)).eval(feed_dict=feed_dict)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 134
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"misclassified_idxs = np.arange(len(mnist.test.images))[~is_correct]"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 135
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Plot 10 randomly chosen misclassified digits\n",
"plt.figure(figsize=(18, 8))\n",
"subplot = 1\n",
"for i in np.random.choice(misclassified_idxs, size=10, replace=False):\n",
" plt.subplot(2, 5, subplot)\n",
" plt.imshow(mnist.test.images[i].reshape(28, 28))\n",
" subplot += 1\n",
" title = 'Classified as {} should be {}'.format(inferred_labels[i],\n",
" correct_labels[i])\n",
" plt.title(title)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAABAoAAAHMCAYAAABcLUoiAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xl0FGX6//2rkzAq2RMJCSRMCAEDAQMYEWVXQb6CgBNE\nVFZRD4ijiI7AjCORURQ3BJQZWQQEcZRRFhHQYRX4yTCOgLKJIEsIBEGykLCF5nr+yENppCqhK93p\npPv9OqeP5Krquu+q5EOTy+67HKqqAgAAAAAAICIB3p4AAAAAAACoOmgUAAAAAAAAA40CAAAAAABg\noFEAAAAAAAAMNAoAAAAAAICBRgEAAAAAADBU2UZBZmam9O/f32PHb9q0qXz55ZciIqKqMnjwYImK\nipLWrVvLhg0bJCUlxdZx165dKwkJCe6cqsfMnj1b2rVr55FjJyYmyqpVq0y3lXeNAgIC5Mcff/TI\nvPwF+fE88uObyI7nkR3fRX48j/z4LvLjeeTHNV5tFMyfP1/S09MlNDRU6tSpI3feeads3LhRREQc\nDodHx96+fbu0b99eREQ2bNggK1eulCNHjsimTZukbdu2snv3bo+OX1EfffSRNG7cWMLCwiQ1NVUW\nL17s7SmV4nA4PP49LM+ePXukZ8+eEhMTI9HR0dK1a1fZs2ePV+fkTuSn4saNGycBAQGyevVqb0+l\nlKqQHxGRTz/9VJo2bSqhoaHSpk0b2bVrl7en5BZkx57i4mLp3bu31K9fXwICAmTdunXentJlqkJ2\n1q9fL6GhoaUeAQEBsnDhQq/Oy13Ijz07d+6U9PR0iYqKkqioKOncuXOV+zu1KuRHpOSXppCQECM/\njzzyiLen5Dbkx57333+/1N+pwcHBEhAQIFu2bPH21AxVJT+rV6+Wli1bSnh4uDRo0ECmT59u+1he\naxS88cYb8uSTT8qzzz4rP/30k2RlZcnw4cPl008/FZGSTldlOXjwoCQmJsrVV19daWNWRHZ2tvTv\n31/efPNNKSgokFdffVXuv/9+OXHihLenVqXk5+dLr169ZM+ePXLs2DFp1aqV9OzZ09vTcgvyU3H7\n9u2Tf/3rX1KnTh1vT6VK+uGHH6Rfv34ybdo0yc/Pl7vuukt69OghTqfT21OrELJTMe3bt5d58+ZJ\nbGxslfgHUVXUrl07OXXqlPFYunSphISESNeuXb09tQojP/bVrVtXFixYID///LP8/PPP0qNHD+nb\nt6+3p1Vlfffdd0aGpk2b5u3puAX5se+BBx4o9ffq1KlTpUGDBtKiRQtvT61KKS4ulrvvvluGDRsm\n+fn58uGHH8rIkSPl22+/tXU8rzQK8vPzZezYsTJ16lTp1auXXHPNNRIYGCjdunWTl19+2fQ599xz\nj8TFxUlERIR06NBBdu7caWxbtmyZpKamSlhYmMTHx8vrr78uIiInTpyQ7t27S2RkpERHRxtdNJFf\n3h4yc+ZMefjhh+Wrr76S0NBQef755y97e8iRI0ckIyNDYmJiJCkpSaZMmWJsO3PmjAwaNEiioqIk\nNTVV/vvf/5Z57k888YTUq1dPwsPDJT09XTZs2GBs27x5s6Snp0t4eLjExsbKU089ZXqMw4cPS0RE\nhNxxxx0iInLnnXdKcHCw7Nu3z3T/2bNnS4MGDSQsLEySkpJk/vz5pbb/6U9/kqioKElKSpIVK1aU\nOu8ePXpIdHS0NGzYUGbMmGFsGzRokPz1r381vi7rLTWuXiMRkc8++0waNGggtWrVkmeeeabUX57v\nvvuuNGnSRKKioqRr165y6NAh02PceOONMnjwYImIiJCgoCAZMWKEfP/995Kbm1vu+FUZ+alYfi55\n7LHHZMKECVKjRo0y9/PX/Hz++efSrl07ueWWWyQgIEBGjRol2dnZVfL/Il8pslOx7NSoUUMef/xx\nadOmjQQGBpY5noj/ZsfsOtxzzz1yzTXXXNH+VRX5qVh+wsPDpX79+uJwOMTpdEpAQIDlv9tEyM/F\nixfLHa86IT/u+bfbJbNnz5YBAwaUud0f83Py5Ek5deqU8RGW9PR0ady4sf13L6kXLF++XIOCgtTp\ndFruM3bsWO3Xr5/x9axZs7SwsFDPnz+vI0aM0ObNmxvbYmNjdcOGDaqqmpeXp998842qqo4ePVqH\nDh2qFy5c0AsXLhj7qKomJibqqlWrVFV19uzZ2rZtW2PbmjVrND4+XlVVnU6ntmzZUv/2t79pcXGx\n/vjjj5qUlKSff/65qqqOGjVK27dvr7m5uZqVlaWpqamakJBgeV7z5s3TkydPqtPp1Ndff11jY2P1\n3LlzqqraunVrnTdvnqqqFhUV6aZNm0yP4XQ6tUOHDvrpp5/qhQsXdOHChZqQkKCnT5++bN/CwkIN\nCwvTPXv2qKpqTk6O7tixw7imNWrU0BkzZujFixf173//u9apU8d4brt27XT48OF67tw53bp1q9aq\n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\n8u2338q7774r/fr1ExGR5s2by7JlyyQ3N1dycnLkzTfftDyWK9foktdee03y8vIkKytLJk+ebLwT\nYOjQoTJ+/HhjQZf8/HxZsGCB6TEKCgrkjjvukLZt28r48ePLHbO6ID8Vy8+qVatkx44dsm3bNtm6\ndavUqVNHpk2bJo8++uhl+/pzfkRE/ve//4nT6ZTjx4/LI488Ij179pRGjRqVO35VRXYqlh0RkXPn\nzsnZs2cv+/Nv+Xt2RETmzp0rbdq0kfr165c7bnVAfiqWn5UrV8rWrVvF6XRKQUGBjBw5UqKioqRx\n48aX7evP+dm5c6dxnQoLC2XkyJESHx9vep2qE/JT8dcfkZJ3afXu3bvU//X/LX/OT8uWLWXv3r2y\nZs0aUVXZt2+fLF261PR3xCti+0MLbvD+++9renq6BgcHa2xsrHbv3l2/+uorVVXNzMzU/v37q2rJ\nZ0169uypoaGhmpiYqO+9954GBATovn379Pz589q1a1eNjIzUsLAwbdWqlW7cuFFVVSdOnKiJiYka\nHBys8fHx+sILLxhj/3ZBj3bt2hnb1qxZU2rBiSNHjuh9992nsbGxGhkZqTfffLPx3NOnT+uAAQM0\nIiJCU1NT9dVXX7VcrMLpdOqDDz6oYWFhGhcXp6+88orWr1/fOFa/fv00JiZGQ0JCtGnTprp48WLL\na/fWW29pcnKyhoaGalJSkr7xxhum+x09elQ7dOig4eHhGhERoZ06ddJdu3aZnreqGtdVVfXw4cPa\nvXt3jYqK0gYNGug777xj7Hf27Fm99957NSwsTNPS0nTixImlzvvX19eVa6Ra8jmdKVOmaFJSkkZH\nR+vTTz9davGXuXPnarNmzTQsLEwTEhJ0yJAhpseZPXu2OhwODQ4O1pCQEA0JCdHQ0FDNysqyHLs6\nIT/28/NrZa1R4M/5UVVt27athoaGalRUlA4dOtR0wdTqiOzYz87vf/97dTgcGhAQYPz30nofv+bv\n2VFVTUlJ0XfffbfMfaoj8mMvPwsWLNCUlBQNCQnRWrVqaffu3fW7774z3def87N69Wq97rrrNDg4\nWGNiYvTuu+82/bx9dUV+7L/+nDlzRiMiIozFBa34c35USxbsbtq0qYaGhmp8fLyOHj26zOtVFodq\nNX8vDwAAAAAAcBuvfPQAAAAAAABUTTQKAAAAAACAwXajYMWKFZKSkiINGza0desNwJ+RH8A+8gPY\n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\n9pEfwD7yA392RY2CwsJC6d27t0yaNElCQkJk2LBhsn//ftm6davExcXJU0895el5AtUW+QHsIz+A\nfeQHsI/8wN+V2ygoLi6WjIwM6devn/Tq1UtERGJiYsThcIjD4ZCHHnpINm/e7PGJAtUR+QHsIz+A\nfeQHsI/8AOU0ClRVhgwZIk2aNJERI0YY9aNHjxp/XrhwoTRr1sxzMwSqKfID2Ed+APvID2Af+QFK\nlLmY4caNG2XevHly/fXXS4sWLUREZPz48fLBBx/I1q1bxeFwSP369eWdd96plMkC1Qn5AewjP4B9\n5Aewj/wAJcq8PWKFDsztQVBNVYUVbckPqqOqkB0R8oPqifwA9pEfwD6r/FzxXQ8AAAAAAIDvo1EA\nAAAAAAAMNAoAAAAAAICBRgEAAAAAADDQKAAAAAAAAAYaBQAAAAAAwECjAAAAAAAAGGgUAAAAAAAA\nA40CAAAAAABgoFEAAAAAAAAMNAoAAAAAAIDBY42CDh06eOrQgMdUlZ/bqjIP4EpVpZ/ZqjQX4EpU\npZ/ZqjQX4EpUpZ/ZqjQX4EqU9TPrUFWtxLkAAAAAAIAqjI8eAAAAAAAAA40CAAAAAABg8HijYMWK\nFZKSkiINGzaUCRMmeHq4UhITE+X666+XFi1aSKtWrTw61oMPPii1a9eWZs2aGbWTJ09K586dpVGj\nRtKlSxfJy8urtLEzMzMlPj5eWrRoIS1atJAVK1Z4ZOysrCzp1KmTpKamStOmTWXy5MkiUjnnbjV2\nZZ17ZSA/vpsfsuN55If8kB97vJkdkcrLjz9mR4T8eBqvPeTHZ/KjHnThwgVt0KCB7t+/X8+fP69p\naWm6c+dOTw5ZSmJiov7888+VMtaXX36p33zzjTZt2tSo/elPf9IJEyaoqurLL7+so0aNqrSxMzMz\n9fXXX/fIeL929OhR3bJli6qqnjp1Shs1aqQ7d+6slHO3Gruyzt3TyI9v54fseBb5IT/kxx5vZ0e1\n8vLjj9lRJT+e5O388NpDftzJo+8o2Lx5syQnJ0tiYqLUqFFD+vbtK4sXL/bkkJfRSlqrsV27dhIZ\nGVmqtmTJEhk4cKCIiAwcOFAWLVpUaWOLVM65x8bGSvPmzUVEJCQkRBo3bizZ2dmVcu5WY4tU3vfd\nk8iPb+eH7HgW+SE/5MeeqpAdkcq5lv6YHRHy40lVIT+89niWP+XHo42C7OxsSUhIML6Oj483TqYy\nOBwOuf322yU9PV2mT59eaeNecuzYMaldu7aIiNSuXVuOHTtWqeNPmTJF0tLSZMiQIR5768+vHThw\nQLZs2SI33XRTpZ/7pbFbt24tIpV/7p5AfvwnP2TH/cgP+SE/9ng7OyLezY8/ZUeE/Libt/PDaw/5\ncee5e7RR4HA4PHn4cm3cuFG2bNkiy5cvl7ffflvWr1/vtbk4HI5KvR7Dhg2T/fv3y9atWyUuLk6e\neuopj45XWFgoGRkZMmnSJAkNDS21zdPnXlhYKL1795ZJkyZJSEhIpZ+7p5CfX/hyfsiOZ5CfX5Af\nz43ti/nxdnZEqk5+fDk7IuTHE7ydn6qSHRHy4wv58WijoG7dupKVlWV8nZWVJfHx8Z4cspS4uDgR\nEalVq5bcfffdsnnz5kobW6Skm5STkyMiIkePHpWYmJhKGzsmJsb4IX3ooYc8eu7FxcWSkZEh/fv3\nl169eolI5Z37pbH79etnjF2Z5+5J5Mf380N2PIf8kB/yY4+3syPi3fz4Q3ZEyI+neDs/vPaQH3ee\nu0cbBenp6fLDDz/IgQMH5Pz58/Lhhx9Kjx49PDmk4fTp03Lq1CkRESkqKpIvvvii1MqYlaFHjx4y\nZ84cERGZM2eO8c2sDEePHjX+vHDhQo+du6rKkCFDpEmTJjJixAijXhnnbjV2ZZ27p5Ef384P2fEs\n8kN+yI893syOiPfz4+vZESE/nsRrD/kR8aH8uH15xN9YtmyZNmrUSBs0aKDjx4/39HCGH3/8UdPS\n0jQtLU1TU1M9Pnbfvn01Li5Oa9SoofHx8fruu+/qzz//rLfddps2bNhQO3furLm5uZUy9syZM7V/\n//7arFkzvf7667Vnz56ak5PjkbHXr1+vDodD09LStHnz5tq8eXNdvnx5pZy72djLli2rtHOvDOTH\nd/NDdjyP/JAf8mOPt7KjWrn58cfsqJIfT+O1h/z4Sn4cqj6wxCgAAAAAAHALj370AAAAAAAAVC80\nCgAAAAAAgIFGAQAAAAAAMNAoAAAAAAAABhoFAAAAAADAQKMAAAAAAAAYaBQAAAAAAAADjQIAAAAA\nAGCgUQAAAAAAAAw0CgAAAAAAgIFGAQAAAAAAMNAoAAAAAAAABhoFAAAAAADAQKMAAAAAAAAYaBQA\nAAAAAAADjQIAAAAAAGCgUQAAAAAAAAw0CgAAAAAAgIFGAQAAAAAAMNAoAAAAAAAABhoFAAAAAADA\nQKMAAAAAAAAYaBQAAAAAAAADjQIAAAAAAGCgUQAAAAAAAAw0CgAAAAAAgIFGAQAAAAAAMNAoAAAA\nAAAABhoFAAAAAADAQKMAAAAAAAAYaBQAAAAAAAADjQIAAAAAAGCgUQAAAAAAAAw0CgAAAAAAgIFG\nAQAAAAAAMNAoAAAAAAAABhoFAAAAAADAQKMAAAAAAAAYaBQAAAAAAAADjQIAAAAAAGCgUQAAAAAA\nAAw0CgAAAAAAgIFGAQAAAAAAMFTZRkFmZqb079/fY8dv2rSpfPnllyIioqoyePBgiYqKktatW8uG\nDRskJSXF1nHXrl0rCQkJ7pyqx8yePVvatWvnkWMnJibKqlWrTLeVd40CAgLkxx9/9Mi8/AX58Tzy\n45vIjueRHd9FfjyP/Pgu8uN55Mc1Xm0UzJ8/X9LT0yU0NFTq1Kkjd955p2zcuFFERBwOh0fH3r59\nu7Rv315ERDZs2CArV66UI0eOyKZNm6Rt27aye/duj45fUatWrZKUlBQJDg6WW2+9VQ4dOuTtKZXi\ncDg8/j28EqtXr5aWLVtKeHi4NGjQQKZPn+7tKbkN+bFn586dkp6eLlFRURIVFSWdO3eWXbt2eXta\npVSV/DzyyCOSkpIigYGBMmfOHG9Px23Ijj1k58rx2uMZ1Tk/mzZtks6dO0t0dLTExMRInz59JCcn\nx9vTKqWq5MdXX3tEyI9dxcXF0rt3b6lfv74EBATIunXrvD2ly1SF/OzZs0d69uwpMTExEh0dLV27\ndpU9e/bYPp7XGgVvvPGGPPnkk/Lss8/KTz/9JFlZWTJ8+HD59NNPRaSk01VZDh48KImJiXL11VdX\n2pgVceLECcnIyJAXX3xRcnNzJT09Xe69915vT6vKKS4ulrvvvluGDRsm+fn58uGHH8rIkSPl22+/\n9fbUKoz82Fe3bl1ZsGCB/Pzzz/Lzzz9Ljx49pG/fvt6eVpXUvHlzmTp1qrRs2dLrL37uQnbsIztX\nhteeylHd8pOXlydDhw6VgwcPysGDByU0NFQGDx7s7WlVSb742iNCfiqqffv2Mm/ePImNjfWpnwt3\nys/Pl169esmePXvk2LFj0qpVK+nZs6ft43mlUZCfny9jx46VqVOnSq9eveSaa66RwMBA6datm7z8\n8sumz7nnnnskLi5OIiIipEOHDrJz505j27JlyyQ1NVXCwsIkPj5eXn/9dREp+YW6e/fuEhkZKdHR\n0UYXTeSXt4fMnDlTHn74Yfnqq68kNDRUnn/++cveHnLkyBHJyMiQmJgYSUpKkilTphjbzpw5I4MG\nDZKoqChJTU2V//73v2We+xNPPCH16tWT8PBwSU9Plw0bNhjbNm/eLOnp6RIeHi6xsbHy1FNPmR7j\nk08+kaZNm0pGRob87ne/k8zMTNm2bZtlx2j27NnSoEEDCQsLk6SkJJk/f36p7X/6058kKipKkpKS\nZMWKFaXOu0ePHhIdHS0NGzaUGTNmGNsGDRokf/3rX42vy3pLjavXSETks88+kwYNGkitWrXkmWee\nKfWX57vvvitNmjSRqKgo6dq1q+W7KU6ePCmnTp0y3saVnp4ujRs3rnL/B8xV5Kdi+QkPD5f69euL\nw+EQp9MpAQEBsm/fPssx/TU/IiKPPvqo3HrrrdXqHxJlITtkpzy89lgjPxXLT9euXSUjI0NCQkLk\nmmuukeHDhxv/J9mMv+ZHxPdee0TIT0XzU6NGDXn88celTZs2EhgYWOZ4Iv6bnxtvvFEGDx4sERER\nEhQUJCNGjJDvv/9ecnNzyx3flHrB8uXLNSgoSJ1Op+U+Y8eO1X79+hlfz5o1SwsLC/X8+fM6YsQI\nbd68ubEtNjZWN2zYoKqqeXl5+s0336iq6ujRo3Xo0KF64cIFvXDhgrGPqmpiYqKuWrVKVVVnz56t\nbdu2NbatWbNG4+PjVVXV6XRqy5Yt9W9/+5sWFxfrjz/+qElJSfr555+rquqoUaO0ffv2mpubq1lZ\nWZqamqoJCQmW5zVv3jw9efKkOp1Off311zU2NlbPnTunqqqtW7fWefPmqapqUVGRbtq0yfQYjz/+\nuD766KOlas2aNdOPP/74sn0LCws1LCxM9+zZo6qqOTk5umPHDuOa1qhRQ2fMmKEXL17Uv//971qn\nTh3jue3atdPhw4fruXPndOvWrVqrVi1dvXq1qqoOGjRI//rXv5pes99eX1evkcPh0FtvvVVzc3P1\n0KFD2qhRI50xY4aqqi5atEiTk5N19+7d6nQ69YUXXtBbbrnF8lj333+/vv3223rhwgXduHGjxsTE\n6OHDhy33rw7IT8Xyc0l4eLgGBQVpQECAvvjii6b7+Ht+Lmnbtq3OmTOn3P2qOrJDdnjtsY/8uCc/\nl0ycOFFvvvlm023+np9LfOW1R5X8uDM/8fHxum7dOsvt5OcXCxcuLHV+rvJKo2DevHkaGxtb5j6/\nDcuv5ebmqsPh0IKCAlVVrVevnr7zzjuan59far/nnntOe/bsqXv37r3sGL/+Zs6aNcsyLJs2bdJ6\n9eqVeu748eN18ODBqqqlgqOqOm3atFI/NOWJjIzUb7/9VlVV27dvr2PHjtXjx4+X+ZwhQ4bo6NGj\nS9XatGlj+pdpYWGhRkRE6Mcff6ynT58utW3WrFmanJxsfF1UVKQOh0OPHTumhw4d0sDAQC0sLDS2\njxkzRgcNGqSqJWF59tlnjW1lhcXVa+RwOErtP3XqVL3ttttUVbVr1646c+ZMY5vT6dSaNWvqoUOH\nTI+1ZMkSrV27tgYFBWlQUJARuuqM/PzCTn5+raioSKdOnaqfffaZ6XZ/z88lvvKPNbLzC7JzOV57\nykZ+flHR/Gzbtk2joqJK/RL3a/6en0t85bVHlfz8WkXzcyWNAvKjmpWVpXXr1tV//vOfZe5XFq98\n9CA6OlpOnDghFy9evKL9nU6njB49WpKTk0u99fHEiRMiIvLxxx/LsmXLJDExUTp27CibNm0SkZK3\nlSQnJ0uXLl2kQYMGMmHCBJfnevDgQTly5IhERkYaj5deekl++uknESl5i8qv33ZSr169Mo/32muv\nSZMmTSQiIkIiIyMlPz/fOI+ZM2fKnj17pHHjxtKqVSv57LPPTI8REhIiBQUFpWr5+fkSGhp62b7B\nwcHy4Ycfyj/+8Q+pU6eOdO/eXb7//ntje2xsrPHnmjVriohIYWGhHDlyRKKioiQ4OLjUuWVnZ5d5\nfmZcvUYictn+R44cEZGS78cTTzxhfC+io6NFREzntXv3bunbt6/MnTtXiouLZceOHTJhwgRZtmyZ\ny+dQlZCfiuXn12rWrClDhw6VAQMGGMf5NX/Ojy8iO2SnPLz2WCM/7snP3r175c4775TJkydLmzZt\nTPfx5/z4KvLjvtef8pAfkePHj0uXLl1k+PDhFVrHziuNgptvvlmuuuoqWbhw4RXtP3/+fFmyZIms\nWrVK8vPzZf/+/aIl74YQkZLP/y1atEiOHz8uvXr1kj59+ohIyS/Ur732muzbt0+WLFkib7zxhqxZ\ns8aluSYkJEj9+vUlNzfXeBQUFMjSpUtFRCQuLq7U50TK+szV+vXr5dVXX5UFCxZIXl6e5ObmSnh4\nuHEeycnJMn/+fDl+/LiMGjVKevfuLWfOnLnsOKmpqbJt2zbj66KiItm3b5+kpqaajtulSxf54osv\nJCcnR1JSUuThhx8u97zr1KkjJ0+elMLCwlLnFh8fLyIlITx9+rSxrayVe125Rmb7HDp0SOrWrSsi\nJcGZNm1aqe9HUVGRtG7d+rJjbN++Xa677jrp3LmziIg0atRIunXrJsuXLy93/KqM/FQsP7/ldDrl\n9OnTln/h+mt+fBHZITvl4bXHGvmpeH4OHjwonTt3lueee04eeOCBMs/BX/Pjq8iPe19/yuPP+cnN\nzZUuXbpIr169ZMyYMeWOWxavNArCw8Nl3LhxMnz4cFm8eLGcPn1aiouLZfny5TJq1KjL9i8sLJSr\nrrpKoqKipKioSP785z8b24qLi+X999+X/Px8CQwMlNDQUGORi6VLl8revXtFVSUsLEwCAwMlIMC1\nU27VqpWEhobKK6+8ImfOnBGn0ynbt2+Xr7/+WkRE+vTpIy+99JLk5eXJ4cOHSy328VunTp2SoKAg\nufbaa+X8+fMybty4Uu8MmDdvnhw/fty4Rg6Hw3S+d999t2zfvl0++eQTOXv2rDz//PPSvHlzadSo\n0WX7/vTTT7J48WIpKiqSGjVqSHBw8BUtApKQkCC33HKLjBkzRs6dOyfffvutvPvuu9KvXz8RKVmR\ndtmyZZKbmys5OTny5ptvWh7LlWt0yWuvvSZ5eXmSlZUlkydPNrphQ4cOlfHjxxsLuuTn58uCBQtM\nj9GyZUvZu3evrFmzRlRV9u3bJ0uXLpW0tLRyx6/KyE/F8rNy5UrZunWrOJ1OKSgokJEjR0pUVJQ0\nbtz4sn39OT8iJT8fZ8+elYsXL8r58+fl7Nmzlboqs7uRHbJTHl57rJGfiuUnOztbbr31Vnnsscfk\nkUceKXP+/pwfEd977REhPxXNj4jIuXPn5OzZs5f9+bf8OT8FBQVyxx13SNu2bWX8+PHljlku2x9a\ncIP3339f09PTNTg4WGNjY7V79+761VdfqapqZmam9u/fX1VLPmvSs2dPDQ0N1cTERH3vvfc0ICBA\n9+3bp+fPn9euXbtqZGSkhoWFaatWrXTjxo2qWrJQTGJiogYHB2t8fLy+8MILxti/XdCjXbt2xrY1\na9aUWnDiyJEjet9992lsbKxGRkbqzTffbDz39OnTOmDAAI2IiNDU1FR99dVXLRercDqd+uCDD2pY\nWJjGxcXpK6+8ovXr1zeO1a9fP42JidGQkBBt2rSpLl682PLarVy5UlNSUvSaa67RTp066cGDB033\n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\n",
"text": [
"<matplotlib.figure.Figure at 0x11a0fdd50>"
]
}
],
"prompt_number": 141
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment