{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# CS 20 : TensorFlow for Deep Learning Research\n", "## Lecture 03 : Linear and Logistic Regression\n", "### Linear Regression with mse loss" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Setup" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1.12.0\n" ] } ], "source": [ "from __future__ import absolute_import, division, print_function\n", "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "import tensorflow as tf\n", "%matplotlib inline\n", "\n", "print(tf.__version__)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Load and Pre-process data" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style scoped>\n", " .dataframe tbody tr th:only-of-type {\n", " vertical-align: middle;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: right;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th>Country</th>\n", " <th>Birth rate</th>\n", " <th>Life expectancy</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>0</th>\n", " <td>Vietnam</td>\n", " <td>1.822</td>\n", " <td>74.828244</td>\n", " </tr>\n", " <tr>\n", " <th>1</th>\n", " <td>Vanuatu</td>\n", " <td>3.869</td>\n", " <td>70.819488</td>\n", " </tr>\n", " <tr>\n", " <th>2</th>\n", " <td>Tonga</td>\n", " <td>3.911</td>\n", " <td>72.150659</td>\n", " </tr>\n", " <tr>\n", " <th>3</th>\n", " <td>Timor-Leste</td>\n", " <td>5.578</td>\n", " <td>61.999854</td>\n", " </tr>\n", " <tr>\n", " <th>4</th>\n", " <td>Thailand</td>\n", " <td>1.579</td>\n", " <td>73.927659</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " Country Birth rate Life expectancy\n", "0 Vietnam 1.822 74.828244\n", "1 Vanuatu 3.869 70.819488\n", "2 Tonga 3.911 72.150659\n", "3 Timor-Leste 5.578 61.999854\n", "4 Thailand 1.579 73.927659" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data = pd.read_table('../data/lecture03/example_with_placeholder/birth_life_2010.txt')\n", "data.head()" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(190,) (190,)\n" ] } ], "source": [ "x = data.loc[:,'Birth rate'].values\n", "y = data.loc[:,'Life expectancy'].values\n", "print(x.shape, y.shape)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(133,) (133,)\n", "(57,) (57,)\n" ] } ], "source": [ "# split train and validation\n", "tr_indices = np.random.choice(range(x.shape[0]), size = int(x.shape[0] * .7), replace=False)\n", "x_tr = x[tr_indices]\n", "y_tr = y[tr_indices]\n", "\n", "x_val = np.delete(x, tr_indices, axis = 0)\n", "y_val = np.delete(y, tr_indices, axis = 0)\n", "\n", "print(x_tr.shape, y_tr.shape)\n", "print(x_val.shape, y_val.shape)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Define the graph of Simple Linear Regression" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "# create placeholders for X (birth rate) and Y (life expectancy)\n", "X = tf.placeholder(dtype = tf.float32, shape = [None])\n", "Y = tf.placeholder(dtype = tf.float32, shape = [None])\n", "\n", "# create weight and bias, initialized to 0 \n", "w = tf.get_variable(name = 'weight', initializer = tf.constant(.0))\n", "b = tf.get_variable(name = 'bias', initializer = tf.constant(.0))\n", "\n", "# construct model to predict Y\n", "yhat = X * w + b\n", "\n", "# use the square error as loss function\n", "mse_loss = tf.reduce_mean(tf.square(Y - yhat))\n", "mse_loss_summ = tf.summary.scalar(name = 'mse_loss', tensor = mse_loss) # for tensorboard\n", "\n", "# using gradient descent with learning rate of 0.01 to minimize loss\n", "opt = tf.train.GradientDescentOptimizer(learning_rate=.01)\n", "training_op = opt.minimize(mse_loss)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Training" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "23\n" ] } ], "source": [ "epochs = 100\n", "batch_size = 8\n", "total_step = int(x.shape[0] / batch_size)\n", "print(total_step)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "train_writer = tf.summary.FileWriter(logdir = '../graphs/lecture03/linreg_mse_tf_placeholder/train',\n", " graph = tf.get_default_graph())\n", "val_writer = tf.summary.FileWriter(logdir = '../graphs/lecture03/linreg_mse_tf_placeholder/val',\n", " graph = tf.get_default_graph())" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "epoch : 0, tr_loss : 1556.64, val_loss : 1371.51\n", "epoch : 10, tr_loss : 256.99, val_loss : 241.85\n", "epoch : 20, tr_loss : 66.92, val_loss : 68.71\n", "epoch : 30, tr_loss : 33.08, val_loss : 39.05\n", "epoch : 40, tr_loss : 36.52, val_loss : 39.96\n", "epoch : 50, tr_loss : 29.12, val_loss : 27.00\n", "epoch : 60, tr_loss : 27.00, val_loss : 31.27\n", "epoch : 70, tr_loss : 36.59, val_loss : 32.96\n", "epoch : 80, tr_loss : 32.53, val_loss : 34.06\n", "epoch : 90, tr_loss : 34.44, val_loss : 35.25\n" ] } ], "source": [ "sess_config = tf.ConfigProto(gpu_options=tf.GPUOptions(allow_growth=True))\n", "sess = tf.Session(config = sess_config)\n", "sess.run(tf.global_variables_initializer())\n", "\n", "tr_loss_hist = []\n", "val_loss_hist = []\n", "\n", "for epoch in range(epochs):\n", " avg_tr_loss = 0\n", " avg_val_loss = 0\n", " \n", " for step in range(total_step):\n", " batch_indices = np.random.choice(range(x_tr.shape[0]),\n", " size = batch_size, replace = False)\n", " val_indices = np.random.choice(range(x_val.shape[0]),\n", " size = batch_size, replace = False)\n", " batch_xs = x_tr[batch_indices]\n", " batch_ys = y_tr[batch_indices]\n", " val_xs = x_val[val_indices]\n", " val_ys = y_val[val_indices]\n", " \n", " _, tr_loss = sess.run(fetches = [training_op, mse_loss],\n", " feed_dict = {X : batch_xs, Y : batch_ys})\n", " tr_loss_summ = sess.run(mse_loss_summ, feed_dict = {X : batch_xs, Y : batch_ys})\n", "\n", " val_loss, val_loss_summ = sess.run(fetches = [mse_loss, mse_loss_summ],\n", " feed_dict = {X : val_xs, Y: val_ys})\n", " avg_tr_loss += tr_loss / total_step\n", " avg_val_loss += val_loss / total_step\n", " \n", " train_writer.add_summary(tr_loss_summ, global_step = epoch)\n", " val_writer.add_summary(val_loss_summ, global_step = epoch)\n", " tr_loss_hist.append(avg_tr_loss)\n", " val_loss_hist.append(avg_val_loss)\n", " \n", " if epoch % 10 == 0:\n", " print('epoch : {:3}, tr_loss : {:.2f}, val_loss : {:.2f}'.format(epoch, avg_tr_loss, avg_val_loss))\n", "\n", "train_writer.close()\n", "val_writer.close()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Visualization" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "<matplotlib.legend.Legend at 0x1230c20b8>" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(tr_loss_hist, label = 'train')\n", "plt.plot(val_loss_hist, label = 'validation')\n", "plt.legend()" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "<matplotlib.legend.Legend at 0x123121c50>" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAD8CAYAAABn919SAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJztnXl4FWWW/78nITQGkCWABEISXBCaLYSIImq3g6KgoNggYqCZ1kdsXJrpnvY3dDu/n/YzwzzO2LbCKGpcEM0VV3BrGnEfxwU7KAqyI0kg7FGQuAI5vz/eW7lb1b1V91bdWu75PE89Sb21nbrJ/dap8573vMTMEARBEPxPntsGCIIgCPYggi4IghAQRNAFQRACggi6IAhCQBBBFwRBCAgi6IIgCAFBBF0QBCEgiKALgiAEBBF0QRCEgNAumxfr0aMHl5eXZ/OSgiAIvmfNmjUHmblnqv2yKujl5eWoq6vL5iUFQRB8DxE1mNlPQi6CIAgBQQRdEAQhIIigC4IgBISsxtAFQcguR48exa5du/D999+7bYpggg4dOqCkpAQFBQVpHS+CLggBZteuXejcuTPKy8tBRG6bIySBmdHc3Ixdu3ahf//+aZ0j0CGXUAgoLwfy8tTPUMhtiwQhu3z//fcoKioSMfcBRISioqKM3qZ8IejpCHMoBMyeDTQ0AMzq5+zZIupC7iFi7h8y/Vt5XtDTFeZbbwW+/Ta27dtvVbsgCEIQ8bygpyvMjY3W2gVBcIb8/HxUVFRgyJAhmDhxIg4dOpT2ucrLy3Hw4MGk+zz22GO46aabku7z9ttv4/3330/bDq/ieUFPV5hLS43bJbYuCPo48d044YQTsHbtWqxfvx7du3fHfffdl/lJM0QE3SWSCXMy5s8HCgtj2woLgQkTJLYuCHpko99p9OjRaGpqalu/8847ccYZZ2DYsGG47bbb2tovv/xyjBw5EoMHD0ZNTU3K8y5evBgDBgzAqFGj8N5777W1v/zyyzjzzDMxYsQIXHDBBdi3bx/q6+vxwAMP4O6770ZFRQXeffdd3f18CTNnbRk5ciRbpbaWubCQWf2LqaWwULWbObasjJlI/dTWo8+lLWVllk0TBM+zYcMG0/s69d3o2LEjMzMfO3aMp0yZwn/729+YmfnVV1/l6667jltbW/n48eN8ySWX8DvvvMPMzM3NzczM/O233/LgwYP54MGDYRvL+MCBAzHn3717N/fr14/379/PP/zwA5999tl84403MjPzl19+ya2trczM/NBDD/Hvfvc7Zma+7bbb+M4772w7h9F+bqD3NwNQxyY01vN56NXV6uettyqPIT8/NoaubTeipSXibcydCzQ36++XaWw9FFI2NTaqt4f581PbJghewql+p++++w4VFRVoamrCoEGDcOGFFwIAVq1ahVWrVmHEiBEAgJaWFmzduhXnnXceFi5ciOXLlwMAdu7cia1bt6KoqEj3/KtXr8bPf/5z9OypihFOmzYNW7ZsAaDy8KdNm4Y9e/bgxx9/NMzvNruf1/F8yAVQwqiFUI4fV22pXgdDIeBXv4oVcCMxB1KHcJKh96o6cyZAZC4O6ZeYvl/sFNIj3fBmKrQYekNDA5i5LYbOzPjDH/6AtWvXYu3atdi2bRuuvfZavP3223j99dfxwQcf4NNPP8WIESPSzs2++eabcdNNN2HdunV48MEHDc9jdj+v4wtBB6xnu9x6K3D0qP62+FTPwkL1wLDTNmb1UxP3G27QP9Yv+fJ+sVNIH6N+p0y+G7HnKsTChQtx11134dixY7jooovw6KOPoqWlBQDQ1NSE/fv34/Dhw+jWrRsKCwuxadMmfPjhh0nPe+aZZ+Kdd95Bc3Mzjh49imeffbZt2+HDh9G3b18AwJIlS9raO3fujCNHjqTcz2/4RtCtvg4me01kBsrKlLCXlQE1NZmFR1K9kjIDDzygL35+yZf3i51C+lRXq++Cnd+NeEaMGIFhw4Zh6dKlGDduHK6++mqMHj0aQ4cOxZQpU3DkyBFcfPHFOHbsGAYNGoR58+bhrLPOSnrO4uJi3H777Rg9ejTGjBmDQYMGtW27/fbbMXXqVIwcORI9evRoa584cSKWL1/e1ilqtJ/fINZcySxQVVXF6U5wUV6uvMJ4ysqA+nrz+yc7Jl2SXSvVdfPyIt58NERAa6sd1tmDX+wUYtm4cWOMwAneR+9vRkRrmLkq1bGe99C1uG1DQ2KopKBAdXrqxXQnTNA/X36+uVdIK/FivVdVPfQ8eafilnbjFzsFIZfxtKBHx20B5SFqol5UpH5vbtaP6a5YoX/Orl1Tv0ImixfrCb32qpqfn/y88eIXCqkHUjx2xi3twun4qiAINmAmt9GuxWoeerK82FQ5s0T62wHm/HzmOXOsX7eoKHlOvNH19HLn9fLrtWuYybF3A728fsHbWMlDF7xBYPPQ0+nw1LaVlhrHtY8fB+6/X/2+aJH58+ulPUZ3DBLpx5nz84FZs9R+M2cq21paEjsZAaBTJ+/mr1dXe9c2QRBMhlyI6LdE9DkRrSeipUTUgYj6E9FqItpGRE8TUXu7jUsWt00V050/H2ifwiK9EcWhkAqnWKGxUYm1Uafh7NnAkiWxIRynBjgJgpC7pJQuIuoL4DcAqph5CIB8AFcB+E8AdzPzqQC+AnCt3cZpcdtKrMHrGIt+aGyL25qJ6aZK4NEGKWlosfP4du3cBgPV2kTaaNuKFfreuB7SySgIQrqY9UXbATiBiNoBKASwB8A/AHguvH0JgMvtNk7rbBzbfS3G4k00ogzbTh6H6umtKXNmkw0siiY6e0Uv1xpQIZOaGmDBAnPZLNGUlZn3uqWTUQgi0eVzp06dim/Nejc6vP3227j00ksBAC+99BLuuOMOw30PHTqERXox1RTcfvvt+POf/5xyv06dOiXdnu71M8JMoB3AXAAtAA4ACAHoAWBb1PZ+ANYbHDsbQB2AutLS0vR7CmpqYnsPU/TIJesUNSo8ZHQMUWSf2lrVqWrm3FpHaLJOVulkFJzEC52iWnEuZuarr76a77rrrpjtWnEuM7z11lt8ySWXmNp3x44dPHjwYPOGhokv3GVE9H3Zef1MOkXNhFy6AbgMQH8AfQB0BHCxhQdGDTNXMXOVVjwnLa67Trnco0er9RkzlGtu4P6aDV00NERSEY1CNNE11GfO1A/JxBP9xmAUHlqwQA00am1VP6XDUQg65557LrZt24b6+nqcfvrp+OUvf4khQ4Zg586dWLVqFUaPHo3KykpMnTq1rSTAypUrMXDgQFRWVmLZsmVt54qeyGLfvn2YPHkyhg8fjuHDh+P999/HvHnzsH37dlRUVOCWW24BYFyud/78+RgwYADOOeccbN68Wdf2HTt2tI1q/dd//de29paWFowdOxaVlZUYOnQoXnzxRQBIuL7RfraSSvEBTAXwSNT6LwHcD+AggHbhttEAXk11rnTK5+qydWusqztuHHPcE94oLVBvKShI7mXPmWP+XEblRiXlT3CDGG9v7lzmn/3M3mXu3JQ2aJ7s0aNHedKkSbxo0SLesWMHExF/8MEHzMx84MABPvfcc7mlpYWZme+44w7+05/+xN999x2XlJTwli1buLW1ladOndrmoS9evLitTO6VV17Jd999NzOrMr2HDh1K8JCNyvXW1dXxkCFD+JtvvuHDhw/zKaecouuhT5w4kZcsWcLMzPfee2/MfR0+fLjtPk455RRubW1NuL7RfvE46qEDaARwFhEVkprBdCyADQDeAjAlvM8sAA48bgw49dRIgRQAWLVKBbqffDLGkz7hhMgAJKMOTcA41q552VY6NQH9UarV1eKNC7mJVj63qqoKpaWluPZalT9RVlbWVqflww8/xIYNGzBmzBhUVFRgyZIlaGhowKZNm9C/f3+cdtppICLMmDFD9xpvvvkm5syZA0DF7Lt06ZKwT3S53srKSmzatAlbt27Fu+++i8mTJ6OwsBAnnngiJk2apHuN9957D9OnTwcAzJw5s62dmfHHP/4Rw4YNwwUXXICmpibdCTLM7pcJKfPQmXk1ET0H4GMAxwB8AqAGwF8BPEVE/x5ue8RWy8xw/fXAtdcC554LfPghUF2NalRjHhrB6IfmZhXaeOIJtbvB/4IuRJG6K1F/O1MYjVIVBFe55x5XLquVz42nY8eObb8zMy688EIsXbo0Zh+949KFWZXrvf7662Pa77HwuVB8/REAoVAIBw4cwJo1a1BQUIDy8nLd8rtm98sEU1kuzHwbMw9k5iHMPJOZf2DmL5h5FDOfysxTmfkHWy0zS7t2wAcfAFu3tjXtRClWYDwIrW0Df6xWBYyOwVtNJZRcckGwxllnnYX33nsP27ZtAwB888032LJlCwYOHIj6+nps374dABIEX2Ps2LG4Pzxa8Pjx4zh8+HBCiVyjcr3nnXceXnjhBXz33Xc4cuQIXn75Zd1rjBkzBk899RQAJc4ahw8fRq9evVBQUIC33noLDeEcZr0SvXr72Ymna7lY4tRTkUeMX0P9UcdjJVqRj6uwFI2NyUW2oCB2PT590GzxLQ3JJRcEa/Ts2ROPPfYYpk+fjmHDhmH06NHYtGkTOnTogJqaGlxyySWorKxEr169dI9fsGAB3nrrLQwdOhQjR47Ehg0bUFRUhDFjxmDIkCG45ZZbDMv1VlZWYtq0aRg+fDjGjx+PM844w/Aa9913H4YOHRozL2p1dTXq6uowdOhQPP744xg4cCAAJFzfaD9bMRNot2uxrVPUAC09MB9H+UOMiumpPLPvTsPUQTMdlrW1zHl55jpFk3V4SueokE28kLYoWMPpTlHf0DZNHdrhLKzGadjStu3Dpn5YmTcBhEjxbi110EyHZXU18PjjqcsJFBUZd3iamfVHpnkTBCFdAiXo8aNHj5adhlAtA+E5DC9q/RtakY9peDqt2Viqq4FHH1XnB/SnsluwIPE4TaRnzEg+649M8yYIQkaYcePtWpwOuSTl6FHmM86IjY3s3JnRKc2GalLlsGsjUVOVBBYEq2zYsEE311nwJq2trRJyMUW7dsBHHwHRo8D69QMuvTTtOdTMhGqM6sNEo3WiplMuWBCS0aFDBzQ3N0NpguBlmBnNzc3o0KFD2ufwdD10Jwj9fQBuLWNc2nAf7sVNwF//qgYlPf00cOWVtl8vlRhHZ9QY1XCXrBkhXUpKSrBr1y4cOHDAbVMEE3To0AElJSVpH++bSaLtQItRax5zOxzF6rzRqGxdE9lp1y6gb1/brplqsur58yOefbx9gBJ8u2deFwTBXwRmkmg7iQ9/HEMBRrbWYQCiwjAlJcCkSamLqZvEqDBXbW1imCZVSWBBEIRk5JSgG4U/tmIACIzfFtyrGl5+WeUNPvNMxte0KtJS80UQhHTJKUFPFYu+5+iN6N39R2DECNUwbZpS4d27ccMNql+VSP284Qbz101XpCUnXRAEK+SUoE+YkJg7Hs++LwsQ+uePgY0bI419+2Lc/Zfj+HEVhtEmmbYi6laRnHRBEKwSaEGP9nB79AAeecRcaPzWWwEMHKh2XrgQAHA5XgQjD1PwbNt+epNM611bz7tOtV0v3TF6EJIgCEICZpLV7VqyObDIygQXyaacY2Zuhx/5Y1TE7NQbuxkwf21tOjoz25lTT4cnNWEEIXeAyYFFgRV0o1GX6cw4pM0hejo2Ju6sMxdiqhGfZkaEJttH74FApGZWsoI8FATBH5gV9MCGXMyOrtSrxxJdOhdQsWsA2IyBIDDmIqogfn4+8G//ZuraWrvR9oYGZU+PHirer5fuOH++fjiGwxM4mY2xp4rRS4esIPgQM6pv1+I1D12bL9SMlzpnTsRTz89nvvm67xJPuGVL0mun8tCjl4ICY9uMwjFW6r5YfQOIDwkJgpA9EMSQi5UQgZ4oFRSo+uepimlZCkO8806CKtY+0Wo5hm5FnFM9EMyQLEYvRcIEwVvYJugATgewNmr5GsA/AbgdQFNU+4RU58pE0NPxGmtrlYBr+2uTWdh5De24lwqnxRz4ydR/T/pg0B4cyYQ5vnM2+lijY/Lzk9uqkUy0U3XICoKQXRzx0AHkA9gLoCws6L+3cnwmgp6O12hVoJMJrJnyuD+BThhm69aYfeNFPtU1jUjl2Zt5CBl9NuKhC4K3cErQxwF4L/x7VgU9Ha/RqjAli01HC160MGtx9ejlPLyd0GgUhpkzh7l9+8Rz5OUlDw+Z8e5TZb0YhZckhi4I3sIpQX8UwE0cEfR6AJ+F27ulOj7bHnoygbZyjeilqMhc/JuIma+8MqZxHv7D0JuODg3pCXy8oJqdOCNdEZaURkHwDrYLOoD2AA4COCm8flI4BJMHYD6ARw2Omw2gDkBdaWlp2jeUjtdoJNBGQpfJYKT4RfPcT8C3CRtPxjbDN4zaWuMHUfzDy0wcXsIkguB/nBD0ywCsMthWDmB9qnM4keWSzJO0Io7Rx0R7y3YtP8ebCY1Aa4IdyQTaKLyUzjGCIPgHs4JuZWDRdABLtRUiKo7aNhnAegvnSov4qoVA8sEx1dWqXY9kA4+++06/vbAQKCrS35afrwYF5efrb38b54PAeBZT2toYeVh+1n+atiu+WqQ2+MdoAg1ADQySwUGCkCOYUX0AHQE0A+gS1fYEgHVQMfSXABSnOo/dA4vMxNWNvO3ofVJ1cmohFO2NIFnoJ1XHKsDcQScMw9u3J72n+DBROuEhvRCVxMoFwfsgiAOL4jFTwKqgIHF7+/bWB/lo5y0rSz661Ez2ifZAee2PiWEYvWwYLWPFzIMnL09tz8sz9yCTbBZB8D6BFXQzoqaJlpF3roleWVl68fJkomdUOCv6Z8J5Jk+O2fDxVf+p21dg9sEzZ07yB4qG5JsLgj8IpKCbEbXoXHGrQm1lSTWgyewAoqKi8EHffJO48Ysv2s5ppXqk0YMu3u4gjQiV0JEQZAIp6Eailp+f+EXOpHyuFVE3KyDJYusxx77+eszGo8jnstJW22w2Ex7ym4cuoSMh6JgVdF+VzzXKAGltTZyv02z53GSUlalFDyJr08Mlm880ZhaisWMRqmW8nH8ZAKAdjqO+MQ+/x5+t30AcWoaOVha3pQUoKIjdR698sNeR2Z0EIYwZ1bdrccpD1/Mo7fTQ471rq7ntzMlDQNEhjtra6EFJiWGYcnzRttqunfl70MoMxHuy7dunrkCZCrfDHUEKHQmCHghiyMXKq7Wdoz6jRTyTQTypUiiNbB6L12Iavkd7LitttdSh61TRLS+EO7wSOnL7wSYEl0AKOrP1mujJysFaXbTrpcquSWZPMvFL9VbxAibFNPwOd5m2m9kZT9YLYuqFh4oXbBCCS2AFPV2MhKdTp+RZIfGLkddv9sub7IFk5sHTES0JjWXYkdTeVA+MZGUQUj08vRLuiLa1qCjzMJJVvPBgE4KLCHocVjyoZNk0Ru1m6o+nEkczcf82gVi1KmbDNziBgdakMfFMQ1Z6+3pNyJKNA3BS3L3yYBOCiQi6DmbDNUZiZiSyqb60ZsUxVdxf75idIy6N2amu+i+2fAZmhdproYZUD0WnbPPag00IFiLoGWJlcFCqL60VcezYUX/fpNPntSSGYbi+PqP7t+Jxeqkz0EzYygmR9dqDTQgWIugOkO6X1ow4pvLOTYnQq68mGtfamta9+tXjNBO2cioM4qUHmxAszAq6rwYWuU11NVBTowYbEamfNTWRwUxGGA0qim7XGxwTjamBUuPGKc2aMEGtf/utGkG0YIGJg2OZP18NMorGD4OO9OyOJ9kgr0yIL++c6v9CEGzHjOrbtfjdQ08XM559qlCBZc/4yJHEkzQ0WLbbjx5ndHjMsCCaIPgIiIfuHcx49sm8xrQ8406dlIb97W+RtrIy4MQTVbtJu/3ocWp2MwNPPGH9jUoQ/IoIepZIJY5GoYKiogxF6OKLlbJddJFaP3JEhWEWLkzzhP5Am81p5ky1/sQTkVmutFo2MouTEDSITXprdlBVVcV1dXVZu57fCIVULL2xUXns8+fb7E22tACdO8e2NTYC/frZeBH3CYVUsbToPonCQmDWLGDJksR28doFr0NEa5i5KtV+OeOhax6blz2zaC9+/nwl7rbaq4VhVqyItJWWAl27mg7D+AGj6os1NVKVUQg2OSHooRBwzTWx5W6vucabog5EPMxoe2fMAHr0sMnm8ePViS+8UK0fPqyeHPfea8PJ3ccoI+j4cWv7C4LfSBlyIaLTATwd1XQygP8H4PFwezmAegBXMvNXyc7lVsilRw+guTmxvagIOHgw6+akpLxcibgetocIjhxRHaXR7NwJlJTYdIHsY/T55efri3pZWSS+LghexLaQCzNvZuYKZq4AMBLAtwCWA5gH4A1mPg3AG+F1T6In5sna3cZIzAEHQgSdOytv/a9/jbT166eedj4Nwxjl0M+e7c/cekEwi9WQy1gA25m5AcBlAJaE25cAuNxOw9zC7Vh7KKRS7JLhSIhgwgQl4BdcoNa//FJ9CIsWOXAxZzFKE120KL2BYYLgFyxluRDRowA+ZuZ7iegQM3cNtxOAr7T1uGNmA5gNAKWlpSMbkrmfDmE25GKUHZHNL72RrdE4HiIIYBhGEPyM7VkuRNQewCQAz8ZvC49k0n0yMHMNM1cxc1XPnj3NXs5WFixInDuzoCBxRLzbc1OGQqnF3OkQQSgElA/tjDxiXNPz5ciGfv2Anj19G4YRhFzASshlPJR3vi+8vo+IigEg/HO/3cbZRXU1sHhx7Kv24sWJXrdRKCNbWRCpHhzphgjMhpHis2sWH7gUHQsZe396vtrh4EF1kvvvt2aAIAhZwXTIhYieAvAqMy8Or98JoJmZ7yCieQC6M/P/SXYOrw8sMsqOyFYWRF6esQNcW5te2MdKGCnp/X/2NdClS+yGXbuAvn2tGyUIgiVsDbkQUUcAFwJYFtV8B4ALiWgrgAvC654n2lvt0UMtmuc6YYLzWRDJvGWjei5FRenH8K2EkZK+oWg1YF56KbKhpAQoLk7PsDBud0ILQqAwU8HLrsXtaotmZgSaM8e5CoOpqi7OmWN/dUArE1VYqoH+s5/F7vTAA5Ztk0khBMEckAkuErE0Z6dNRJegNZqTVHtw6M2FOWdOZtdPds+ZzDnKzMyHDiWc9Iy+TaYF2a+TaNiJX0sUC9lFBF0HM9OT2TmbTao3guhrpitueoIQ3VZUxFxQYHzteMG2KjC1tcxT2r8Yc9LdVGxKmHJ9YmV5QxHMIoKuQ7Y9dDPX066ZjrjpCUJBAXP79rFt7dsrYXfinqPv8X9wTuyJH3wwrc8nVzz0XL9/wTxmBT0ninNppJqezO4OUDPpjto1zUxTF49eh+fRo8CPP8a2/fijKrRoNAI1k7TM6GPPw7vogkORhuuvVxfds0f3WL9Oc2cXbqfJCsEjpwQ9fkh4UZFanBoGbiTG+fmJ10xH3KwMutVqrFux0wzxx36NLiAwZvdcHmns00d3lGm6c7QGBSf+HkKOY8aNt2txO+SSbazGSK3Gr406Wa10vGYas015znPiwjAPPZT+xVzAyU5LiaELZoHE0L2Bk4JgVsyjRcIJe1Ke86uvEo3avTvzCztMNgRXslwEM5gVdJmCzscYjewsKlIxc8emsrOINrXeyIZleB6/iGwoLbUWN8oybo8cFgQNmYIuBzCKuy9YkHxC6myOzoyuD7MMV4DAWJ13ltrY2KiC548+6pwBGSCdloLfEEH3EfFCDFjvVNSb3m72bOdEXS8T56zWDzCsX9TkVtdeq25g715njEgT6bQU/IYIuk8wEmIguTceT7ZLBBt5s+t3hSemfv75SGNxMdC/vzOGpEGup1UK/kME3SfYJcTZDiOk9HKvuEIJ+6hRar2+Xnnrixc7Y5AFnEyrlKJkghOIoPsEu4Q422EEo8FcLS1xIrZ6tZr2TuOaa5SK7tuXcGw2qa629gZkhmyHvYTcQQTdJ9glxNkOI2heblFRbHtzs46IdeumFO7ZqEmxevcGTj3VGeNcwu2ZsYTgIoLuE+wSYjdGZ1ZXqzTKeAxFbMoUJexV4Syt7duVsY895pyRWUSyZwSnkDx0H6Hlc3slv9wKRrMxEalwhiFffpno3u/bB/TqZat92UTy2wWrSB56AHEinpst0g4Zde+ungRPPx1pO+kk4LTTbLMt20j2jOAUIuhCVshYxK68Ugl7ZaVa37ZNufePP26rndkg14uSCc5hdk7RrkT0HBFtIqKNRDSaiG4noiYiWhteJjhtrGAer6XF6YnYrFkqhGTJxjVrVI+qxqxZ6oT79ztluiP4+W1L8C5mPfQFAFYy80AAwwFsDLffzcwV4WWFIxYKlvFqWly0iM2fDyxZkqaNWhjmqacibSedBAwc6JTpvsdrD3jBGVIKOhF1AXAegEcAgJl/ZOZDyY8SnMDsl9IPaXG22DhtmhL24cPV+ubNyluvrbXNziDg1Qe8YD9mPPT+AA4AWExEnxDRw0TUMbztJiL6jIgeJaJuzpnpT+z0iqx8Kf2QFmerjWvXAgcPRtZnzlTCfuBAWrYFDT884AV7MCPo7QBUArifmUcA+AbAPAD3AzgFQAWAPQDu0juYiGYTUR0R1R3IoS+Y3V6RlS+lH4pK2W5jUZH6oJcujbT16gX89KdpnjA4+OEBL9iDGUHfBWAXM68Orz8HoJKZ9zHzcWZuBfAQgFF6BzNzDTNXMXNVz5497bHaB9jtFVn5UvohLc4xG6+6Sgn7sGFqfeNG5a3ncHzBDw94wR5SCjoz7wWwk4hODzeNBbCBiIqjdpsMYL0D9vkWu70iK19KP6TFOW7jp5/GhlxmzFAXig7N5Ah+eMALNmFmWiOosEodgM8AvACgG4AnAKwLt70EoDjVeXJpCrqyMuO5PdNB5p/MgFAo9oMbMiTp7kGcFi6I95RLQOYUdRenJmSWL2UGDB4c+wd58smEXeTBKXgRs4IutVwcxM+1VwLLwYNAfF/OwYNt9WKkzorgRaSWiweQ0YAepEcP5XhH56r36NHWiSoZIYKfEUEXcpPqaiXs2ujSdesAItxY9JTu7pIRIvgBEXQht9m4MaYOzH8fnA4GoTsi9WIkI0TwCyLogtCzp/LWoyo3NqMHPkGFJ1M+BcEIEXRB0JgW8Z49AAATrElEQVQ5Uwn7gAEAgAp8ivoGQnXBMy4bJgjmEEEPGFJVTx9Ln8vmzbGTU0+bpgYlRU9iLQgeRAQ9QHipqp6XHixpfS69eqmdo+cxLSoCRo502lxBSBvJQw8QXsihDoWAuXNj56AAVMeiW7FoWz6XAQOArVsj6888A0ydaoN1gpAayUPPQdzOodY84XgxB9wt12rL57JlS2wY5sorVRjmq68yss2PeOntS4hFBD1AuF1VT6/CZDQNDe4IgW2fixaGWbw40ta9OzBKt9BoIPFSWE9IRAQ9QLhdVS+Vx0vkjhDY/rn84z+qmzj5ZLX+97+rm3v++UzM9AUyWYa3EUEPEG6XzU3m8RIpDYwmW0Lg2OeyfTuwd29kfcqUwIdh3A7rCcmRTlHBNrTX8XgPrqhIP64OKP1rbXXeNicJhYC1cxfjzuZrIo2jRgGrVxsf5FO80PGei0inqJB19Dzh2lpVzLCsTP8Yv9dI0R5if27+FQiMHShXGz76SH0Iy5a5ap/duB3WE5IjHrqQFfS8dzdTGe1Cz2M9CXuxF8WxjV99BXTtmjW7nETKQmcf8dAFT+F2fN8p9GLH+9AbBMa1eDjS2K0bcPbZGV3LK+mCUhbau4iHLggZYBRT1iACWktKgZ07I43LlgGTJ1u6TlDfcARziIcuCFlAL6YcTWkplBu/Z0+k8YorlNIfOmT6OpIuKJjBlKATUVcieo6INhHRRiIaTUTdieg1Itoa/tnNaWMFwWtooaTwDHYxxHQW9u6t8jZraiI7dOsGnHOOqetIuqBgBrMe+gIAK5l5IIDhADYCmAfgDWY+DcAb4XVByDmqq1UmT22tiT6C665Twl5Sotbfe08d8OKLSa/h9ihgwR+kjKETURcAawGczFE7E9FmAD9n5j1EVAzgbWY+Pdm5JIYuCFHs2QP06RPbdugQ0KVLwq4SQ89t7Iyh9wdwAMBiIvqEiB4moo4ATmJmLTC4F8BJ6ZsrCDlIcbHy1h98MNLWtStw3nkJuwY1S0iwFzMeehWADwGMYebVRLQAwNcAbmbmrlH7fcXMCXF0IpoNYDYAlJaWjmxIlhIgCLlMnz6xnacvvghMmuSePYJnsNND3wVgFzNr45ifA1AJYF841ILwz/16BzNzDTNXMXNVz549zVkvCLnI7t1AU1Nk/bLLlDv+9dfu2ST4ipSCzsx7AewkIi0+PhbABgAvAZgVbpsFIHmvjiAIqenTB2DGR7+6P9LWpQv2/vR892wSfIPZLJebAYSI6DMAFQD+A8AdAC4koq0ALgivC4KQIaEQcP7TvwaBsQe9AQC9N76tvPWXX3bXOMHTmBJ0Zl4bDpsMY+bLmfkrZm5m5rHMfBozX8DMMoOuEBjcHGYfPYioD/agL3ZFNk6aJGEYwRAZKSoIcbg9K0/8YKHd6AsC4wYsijR26QKMHZsdgwTfIIIuCHHYOcw+HU/faLDQirI5qiKWllzw5pvKW3/lFeuGCYFEBF0Q4rBrmH26nr5efZj27YGWFiAvn1BeuB/LFkaFYSZOVMJ+5Ig1A4XAIYIuCHHYNcw+XU8/fhBRUZF6IDQ3Rx4MM+f1RaiWgXvvjRx44onABRdYM1IIFCLoghCHXbPyZOLpR9cc79QJOHo0dnvbg+HGG9VO3burDW+8oZ4CK1ZYM1YIBCLogq9xIhvFrmH2dnn6KR8MRMp9j665fsklEobJQUTQBd/iZDaKHbPy2OXpm34wlJSoD+K//zvSduKJwLhx1i5ogFdmTBKSwMxZW0aOHMmCYBdlZcxKwWKXsjK3LYtQW6vsIVI/a2vTO0dhYew9FhamOFdrK3PXrrEHrViR5l2kaYNgGwDq2ITGiocu+JZcmfQhrRAQkZqYOvrDmDBBtbe0WLZBZkzyByLogm/x+qQPdoaE0g4B9eunLr5gQaStc2dg/HhL18+Vh6ffEUEXfIsdMWon48Ke8mp/8xv1NDjxRLW+cqXy1leuNHW41x+egkIEXfAtmWajOD3E36xXm7XORiLg8GF1oxrjx5sKw9jVwSs4jJlAu12LdIoKXsLpTlUz53e1s/Gee2IvPGFC0t3t6OAV0gPSKSoIyXE6LmzGq812WCbmbeDuuQg9ER65BKjBSETAqlW6x9qRyik4iwi6kLM4HRc2ExLKZmejbojpekLogSNKoTUuukgZ/M039hshOIoIupCzZCMunMqrzWZnY9K3gbIypfJ/+UtkY6dOqvCX4BtE0IWcxa4h/pmQzc5GI6+/oSGqI/a3v1VPnxNOUOuvvKI+nM8+s98gwXZE0IWcxu24cDYfKsm8/pjsHiLluu/YEdlh+HBgwADghx/sN0ywDVOCTkT1RLSOiNYSUV247XYiagq3rSWiCc6aKgjBJFsPFb23AQ3djtjychWGeekltb51K9ChA/Bf/+WMgULGWPHQz2fmCmauimq7O9xWwcxSr1MQPIz2NmBEQ4NBLvzEieppc/XVav1f/kV58evWOWmukAYSchGEHKK6WoV1jDAcYEWkGvbti7QNG2YpDCPVGp3HrKAzgFVEtIaIZke130REnxHRo0TUzQH7BEGwmWShFw3DXPhevZTqv/iiWtfCMHfemfR8bk+8nSuQGoSUYieivszcRES9ALwG4GYAmwEchBL7fwNQzMzX6Bw7G8BsACgtLR3ZED3sWBAEVwiFlGA3NiqB1YNIRVoMYQamTweefjrStm4dMGRIwq7l5bEVBzTKymJT4AV9iGhNXLhbF1MeOjM3hX/uB7AcwChm3sfMx5m5FcBDAEYZHFvDzFXMXNVTm61cEARXie6INQrBpMyFJwKeegrYuzfSNnQoMHBgQhgml6s1ZjPUlFLQiagjEXXWfgcwDsB6IiqO2m0ygPXOmCgIgpNknAt/0kmxYZjNm1UY5q672nbJ1WqN2Q41mfHQTwLwv0T0KYCPAPyVmVcC+K9wKuNnAM4H8FtnTBQEwUlsy4WfNEm5/NOmqfXf/16dcP36nK3WmO1aPaZi6HZRVVXFdXV1WbueIAgusW8f0Lt3ZH3QICz9l7X4w23t0dioPPP584Nf4CsvT7+PImX/RML+NsbQBUEIBlmL52phmOXL1frGjZj+jz9B/W/+ktYAKr+mPGY71CSCLgg5giupg5dfrlzRqVPV+j//s3JPP/88wTYjwfZzymPWQ01miqbbtcgEF4LgHk5P6JGSPXtiLzx4MPMPP6Sc5MN1uzPEjolBIBNcCEb49fVVyAzXUwd791ZavGyZWv/8c+AnP8EXN9+dtOPQdbszJJsF4ETQcww/v74KmeGZ1MHJk5W6/eIXAID/+9XvwCAMwoaY3TTB9ozdPkAEPcfw1Ez0QlbxVOogEfDcc8CePW1NGzAYn2EoCvAjgIhge8pujyOCnmP4/fVVSB8vTOiRQO/eCNUyprd/HgAwFOvxI36CWwruaRNsT9rtUSQPPceQmhqCFwmFgFv/yPhL4y9wBZZHNmzYAAwa5J5hHkHy0ANOuh2b8voqeJHqaqC+gXAFLwN2745s+OlP1WxJR4+6Z5yPEEH3IZl0bMrrq+B5iovVP/azz6r1zz4D2rcHFi501y4fICEXHyJhEyFnYFbZMMujwjAbN6qKjjmEhFwCjHRsCjkDkcpbb2qKtA0aBFRUSBhGBxF0HyJ5uUK2cX0wWp8+ylt/5hm1/umnKgxz771ZNsTbiKD7EOnYFLKJpwajTZ2qBiVddplav/lm5cVv3uyCMd5DBN2HSMemt3Hdm7UZzw1GIwJeeCE2DDNwID6mSpxadtT3n3cmiKD7lGzWhxDM4ylvNsqmTB4wnu2z6dMHoVrGzPZqTtNKfIJtje3xwYz7QBSMh6llzFTwsmuRaotC0PFaZcBUlQyTHadVCMzP99Y9RRP5vFv5RUyMMXAANpm6Vz8Ak9UWJW1REGzErhlq7CKdFFftLSM+zBJNYaE3wnzxn3cfNKEJJW3rdRiJq0o/wLaGAhessw9JWxQEF/BaBlI64RK9mDkA5Od7r88m/nPdjb4gMKbhKQBAFdZgW2N7YNEiF6zLPqYEnYjqwxNCryWiunBbdyJ6jYi2hn92c9ZUQfA+XstASucBYyT2ra3e67PR+7wB4BlMQx6O4xVcohpuvFE9jbZsya6BWcaKh34+M1dEuf3zALzBzKcBeCO8LggxBC3jQ8PovryWgZTOA8ZrbxnJiP68AfWZazDyMK3wFSxbuCvSePrpwBlnAMeOZdfQbGEm0A6gHkCPuLbNAIrDvxcD2JzqPNIpmluk2yHnddy6r3SnMrN6nJ//bknvdenS2JtatMglK60Dk52iZgV9B4CPAawBMDvcdihqO0WvGy0i6LmF1zI+7MKN+8q2yNoxD6YnOX6cecKE2A9yyxa3rUqJWUE3leVCRH2ZuYmIegF4DcDNAF5i5q5R+3zFzAlxdCKaDWA2AJSWlo5s0OtyFwKJ1zI+7MKN+5KCbDazaxfQr19k/YwzgPffB9q1c8+mJNia5cLMTeGf+wEsBzAKwD4iKg5frBjAfoNja5i5ipmrevbsadZ+IQD4KRZrBTfuy7ODe2zAlX6WkhL1VNYu9ve/AwUFwIMPZuHizpFS0ImoIxF11n4HMA7AegAvAZgV3m0WgBedMlLwJ17L+LALN+4rqA9H10fWXn01cPw4cPHFav3Xv1avWtu2ZckAm0kVkwFwMoBPw8vnAG4NtxdBZbdsBfA6gO6pziUx9NwjqLHYbN+Xnzsqk+GpfpbGxlgjzjyT+ehRFwxJBDJSVBCCRSikBv00NirPfP587+SDp4sn+1mefDL2g33wQfXa4CIyUlQQAkYQC7JlEkpyLPauhWEuukitX3+9b8IwIuhCVgnqQCMhPdLtj9CLvc+YAfToYdP/VF4esHJlbGrRaacBZ5/t6UFJIuhC1nC9A0zIKmYe3umOrDWqN9PcbPP/VGmp+md94gm1/sEHKhvm4YdtuoC9SAxdyBqSS5076FVstLNCo1HsXcOR/6nWVpUN89prkbZt24BTTrH5QolIDF3wHEHOpfYCXgpnOT3LUaoYuyP/U3l5wKpVsV7JqacCY8Z4Jgwjgi5kjaDmUlvFCeH1WjjL6Ye3UZVFDUf/p7QwzOOPq/X33/dOGMZMbqNdi+ShB59k+dlBzaW2gl2fQfznXFTkoXxuzk5+eW2t/n1n9X/q+HHmsWNjDdi+3fbLwM7iXHYtIujBxoxYBXWgkVnsEDq9z9loIXLqTqzb6JTQeuJ/qr4+9mbPPZf52DHbTm9W0KVTVLAN6fRMjR0DaYw+Zz3c/OyDOBAqJY8/DsyaFVl/+GHg2mszPq3ZTlERdME2PDnqz2PY8dBLleGh4ZV5P3OO48eBceOAN9+MtH3xBdC/f9qnlCwXIetIp2dq7CjsZfR5FhV5Z6aknCY/H3jjDWDHjkjbyScDe/c6fmkRdME2glpd0U7smKLO6HNesCB4pQF8TXm5epV67DFVRqBjR8cvKSEXwVZyMm7qAvI55xYSQxcEQQgIEkMXBEHIMUTQBUEQAoIIuiAIQkAQQRcEQQgIIuiCIAgBQQRdEAQhIIigC4IgBISs5qET0QEAZsoK9QBw0GFzsoXcizeRe/Emci/6lDFzz1Q7ZVXQzUJEdWaS6P2A3Is3kXvxJnIvmSEhF0EQhIAggi4IghAQvCroNW4bYCNyL95E7sWbyL1kgCdj6IIgCIJ1vOqhC4IgCBbxlKAT0aNEtJ+I1rttS6YQUT8ieouINhDR50Q0122b0oWIOhDRR0T0afhe/uS2TZlCRPlE9AkRveK2LZlARPVEtI6I1hKRr2tTE1FXInqOiDYR0UYiGu22TelARKeH/x7a8jUR/VNWru2lkAsRnQegBcDjzDzEbXsygYiKARQz88dE1BnAGgCXM/MGl02zDBERgI7M3EJEBQD+F8BcZv7QZdPShoh+B6AKwInMfKnb9qQLEdUDqGJm3+duE9ESAO8y88NE1B5AITMfctuuTCCifABNAM5kZpNTe6ePpzx0Zv4fAF+6bYcdMPMeZv44/PsRABsB9HXXqvRgRUt4tSC8eMcTsAgRlQC4BMDDbtsiKIioC4DzADwCAMz8o9/FPMxYANuzIeaAxwQ9qBBROYARAFa7a0n6hEMUawHsB/AaM/v2XgDcA+D/AGh12xAbYACriGgNEc1225gM6A/gAIDF4VDYw0Tk/CScznMVgKXZupgIusMQUScAzwP4J2b+2m170oWZjzNzBYASAKOIyJchMSK6FMB+Zl7jti02cQ4zVwIYD+DGcNjSj7QDUAngfmYeAeAbAPPcNSkzwmGjSQCezdY1RdAdJBxvfh5AiJmXuW2PHYRfg98CcLHbtqTJGACTwrHnpwD8AxHVumtS+jBzU/jnfgDLAYxy16K02QVgV9Sb33NQAu9nxgP4mJn3ZeuCIugOEe5IfATARmb+i9v2ZAIR9SSiruHfTwBwIYBN7lqVHsz8B2YuYeZyqNfhN5l5hstmpQURdQx3uCMcnhgHwJcZYsy8F8BOIjo93DQWgO8SCOKYjiyGWwD1muMZiGgpgJ8D6EFEuwDcxsyPuGtV2owBMBPAunDsGQD+yMwrXLQpXYoBLAn32OcBeIaZfZ3uFxBOArBc+Q5oB+BJZl7prkkZcTOAUDhU8QWAX7lsT9qEH7AXArg+q9f1UtqiIAiCkD4SchEEQQgIIuiCIAgBQQRdEAQhIIigC4IgBAQRdEEQhIAggi4IghAQRNAFQRACggi6IAhCQPj/Hfk87NdBDJ0AAAAASUVORK5CYII=\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "w_out, b_out = sess.run([w, b])\n", "plt.plot(data.iloc[:,1], data.iloc[:,2], 'bo', label='Real data')\n", "plt.plot(data.iloc[:,1], data.iloc[:,1] * w_out + b_out, 'r', label='Predicted data')\n", "plt.legend()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.6" }, "varInspector": { "cols": { "lenName": 16, "lenType": 16, "lenVar": 40 }, "kernels_config": { "python": { "delete_cmd_postfix": "", "delete_cmd_prefix": "del ", "library": "var_list.py", "varRefreshCmd": "print(var_dic_list())" }, "r": { "delete_cmd_postfix": ") ", "delete_cmd_prefix": "rm(", "library": "var_list.r", "varRefreshCmd": "cat(var_dic_list()) " } }, "types_to_exclude": [ "module", "function", "builtin_function_or_method", "instance", "_Feature" ], "window_display": false } }, "nbformat": 4, "nbformat_minor": 2 }