-
-
Save jtokoph/40b726c20ed84047660454707a80aa4b to your computer and use it in GitHub Desktop.
TensorFlow 101
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "cells": [ | |
| { | |
| "cell_type": "code", | |
| "execution_count": 1, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "import numpy as np\n", | |
| "import matplotlib.cm as cm\n", | |
| "import matplotlib.pyplot as plt\n", | |
| "import seaborn as sns\n", | |
| "import tensorflow as tf\n", | |
| "%matplotlib inline" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "TensorFlow 101\n", | |
| "==============\n", | |
| "\n", | |
| "Some of the main objects in TensorFlow are \"placeholders\", which are things that you can feed things into, \"Variables\", which contain intermediate results of calculations, and \"sessions\" in which one carries out predefined calculations." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 2, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "4\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "a = tf.placeholder('int64') # a will be an integer\n", | |
| "b = tf.placeholder('int64') # b will also be an integer\n", | |
| "c = tf.add(a, b) # c = a + b\n", | |
| "\n", | |
| "with tf.Session() as sess: # Start a TensorFlow \"session\"\n", | |
| " # Feed in the values of a and b and evaluate c\n", | |
| " result = sess.run(c, feed_dict={a: 2, b: 2})\n", | |
| " print(result)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "Linear regression in TensorFlow\n", | |
| "===============================\n", | |
| "\n", | |
| "Let's do a slightly more interesting example: OLS linear regression. Let's first set up some data outside of TensorFlow" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 3, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "Number of samples: 15\n" | |
| ] | |
| }, | |
| { | |
| "data": { | |
| "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXUAAAECCAYAAAAB2kexAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAEAVJREFUeJzt3X2MHHd9x/H32Q4RZ66h8h2ur059gODbmEqAksq9AHki\nKA2XJkUC9Z8IEto0LVEplZIqJgpShUBIgZRSGohS8iRRqSQiqekpRJBEJCDLNAGkJoavQ1u7WHad\ns2mKOZOS1Nc/dn3xwz3sze3e7P72/ZIs7Y52dj5e3312/Jv5zQzMzMwgSSrDqroDSJLax1KXpIJY\n6pJUEEtdkgpiqUtSQSx1SSrImlZeFBFbgE9l5oUR8XrgbuAo8HRmXtfBfJKkJVh0Tz0ibgDuAE5v\nLroV+Ghmng+siogrOphPkrQErQy//Bh4z3HPz87MJ5qPHwIubnsqSVIli5Z6Zj4AvHTcooHjHh8G\nzmh3KElSNVUOlB497vEQ8HybskiSlqmlA6Un+V5EnJeZjwOXAo8utsLMzMzMwMDAYi+TJJ1oycVZ\npdSvB+6IiNOAHwL3L5pqYICpqcMVNtVZIyNDXZfLTK0xU+u6MZeZWjMyMrTkdVoq9czcA5zbfPws\ncMGStyRJ6jgnH0lSQSx1SSqIpS5JBbHUJakglrokFcRSl6SCWOqSVBBLXZIKYqlLUkEsdUkqiKUu\nSQWx1CWpIJa6JBWkyqV3JWnF7dh5gMntu9l38Aijw4NMjI+xZfP6umN1HUtdUtfbsfMAt297Zvb5\n3qnp2ecW+4kcfpHU9Sa3755n+Z4VzdELLHVJXW/fwSNzLt9/aHqFk3Q/S11S1xsdHpxz+YZ1a1c4\nSfez1CV1vYnxsXmWb1rZID3AA6WSut6xg6GT2/ew/9A0G9atZWJ8kwdJ52CpS+oJWzavt8Rb4PCL\nJBXEUpekgljqklQQx9SlHubUeZ3MUpd6lFPnNReHX6Qe5dR5zcVSl3qUU+c1F0td6lFOnddcLHWp\nRzl1XnPxQKnUo5w6r7lY6lIPc+q8TubwiyQVxFKXpIJY6pJUEMfUJfW9HTsP8PC/PMl//tfhnr/c\ngqUuqa+VdrmFSqUeEWuAe4Ax4CXgmszc1cZckrQiFrrcQt+UOvBuYHVmvi0iLgY+Cby3fbEkncwr\nMnZGaZdbqFrqu4A1ETEAnAH8sn2RJJ2stCGCbjI6PMjeqVMLvFcvt1D17JefA68FfgTcDnyubYkk\nncIrMnZOaZdbGJiZmVnyShHxGeCFzLwpIn4deAz4rcycb4996RuRNOuKG7Zx9Oipv0arVw3w4C2X\n15CoLI9/fy/3PfIsPzlwmDPXD/G+d76B8966se5YAANLXaHq8MtPgRebj59vvs/qhVaYmjpccVOd\nMzIy1HW5zNSafss0um7+IYLFttlvn1UVZ208g7+9/sITMnVDvpGRoSWvU3X45bPA2RHxOPBNYGtm\n/qLie0laRGlDBOqcSnvqmTkN/EGbs0iah1dkVKucfCT1CK/IqFZ47RdJKoilLkkFsdQlqSCWuiQV\nxFKXpIJY6pJUEEtdkgpiqUtSQSx1SSqIpS5JBbHUJakgXvtFajNvO6c6WepSG3nbOdXNUpfaaCl3\npnePXp1gqUtt1Oqd6d2jV6d4oFRqo9HhwTmXn3xnem8krU6x1KU2avW2c63u0UtL5fCL1Eat3nZu\ndHj+G0lLy2GpS23Wym3nJsbHThhTf3m5N5LW8ljqUg28kbQ6xVKXauKNpNUJHiiVpIJY6pJUEEtd\nkgpiqUtSQSx1SSqIpS5JBbHUJakglrokFcRSl6SCWOqSVBBLXZIKYqlLUkEsdUkqiKUuSQWpfOnd\niLgRuBw4DbgtM+9qWypJUiWV9tQj4nxgPDPPBS4AzmxnKElSNVX31C8Bno6IB4Eh4Ib2RZJUhx07\nDzC5fTf7Dh5hdHiQifExb+LRg6qW+jDwG8BlwOuAbcBvtiuUpJW1Y+eBE+6Zundqeva5xd5bqh4o\nPQQ8nJkvZeYu4IWIGG5jLkkraHL77nmW71nRHFq+qnvq3wY+DPx1RIwCgzSKfl4jI0MVN9VZ3ZjL\nTK0xU+sWy7Xv0JE5l+8/NN2xv1M3flbdmGmpKpV6Zk5GxDsi4rvAAPChzJxZaJ2pqcNVNtVRIyND\nXZfLTK0xU+tayTW6bpC9U9OnLN+wbm1H/k7d+Fl1a6alqnxKY2beWHVdSd1lYnzshDH1l5dvqiGN\nlqNyqUsqx7GDoZPb97D/0DQb1q1lYnyTB0l7kKUuCWgUuyXe+7xMgCQVxFKXpIJY6pJUEEtdkgpi\nqUtSQSx1SSqIpS5JBbHUJakglrokFcRSl6SCWOqSVBCv/SL1GW9bVzZLXeoj3raufA6/SH3E29aV\nz1KX+si+g/Pftk5lsNSlPjI6PDjn8g3r1q5wEnWKpS71kYnxsXmWe9u6UnigVOoj3raufJa61Ge8\nbV3ZHH6RpIJY6pJUEEtdkgrimLqK4hR49TtLXcVwCrzk8IsK4hR4yVJXQZwCL1nqKohT4CVLXQVx\nCrzkgdK+UvqZIU6Blyz1vtEvZ4Y4BV79zuGXPuGZIVJ/sNT7hGeGSP3BUu8Tnhki9QdLvU94ZojU\nHzxQ2ic8M0TqD8sq9Yh4DfAkcHFm7mpPJHWKZ4ZI5as8/BIRa4AvAnMfgZMkrbjljKl/GvgCsK9N\nWSRJy1Sp1CPiKuC5zPwGMNDWRJKkyqruqV8NvCsiHgPeAtzbHF+XJNVoYGZmZllv0Cz2axc5ULq8\njUhSf1rySEg7TmlsqbCnpg63YVPtNTIy1HW5zNQaM7WuG3OZqTUjI0NLXmfZpZ6ZFy33PSRJ7eGM\nUkkqiKUuSQWx1CWpIJa6JBXEUpekgljqklQQS12SCmKpS1JBLHVJKoilLkkFsdQlqSCWuiQVxFKX\npIJY6pJUEEtdkgpiqUtSQSx1SSqIpS5JBbHUJakglrokFcRSl6SCWOqSVBBLXZIKYqlLUkEsdUkq\niKUuSQWx1CWpIJa6JBXEUpekgqypO4Dab8fOA0xu382+g0cYHR5kYnyMLZvX1x1L0gqw1AuzY+cB\nbt/2zOzzvVPTs88tdql8Dr8UZnL77nmW71nRHJLqYakXZt/BI3Mu339oeoWTSKqDpV6Y0eHBOZdv\nWLd2hZNIqoOlXpiJ8bF5lm9a2SCSatFzB0o9s2Nhxz6Lye172H9omg3r1jIxvsnPSOoTPVXqntnR\nmi2b1/t5SH2qUqlHxBrgTmAMeAXwicz8WhtzzWmhMzssMUmqvqd+JXAwM98fEb8K/ADoeKlXPbPD\nIRtJ/aJqqX8FuK/5eBXwYnviLGx0eJC9U6cW+EJndiw0ZHPZ+UPtDylJNap09ktmHsnM6YgYolHu\nN7U31tyqnNnhZBxJ/WRgZmam0ooRcSbwVeDzmXnPIi+vtpE5PP79vdz3yLP85MBhzlw/xPve+QbO\ne+vGeV9/xQ3bOHr01M2vXjXAg7dc3q5YktQJA0tdoeqB0vXAw8B1mflYK+tMTR2usqlTnLXxDD72\ngXNafu/RdQsP2bQrV7uMjAyZqQVmal035jJTa0ZGlj5EXHXy0Vbg1cDNEfFYRDwaEadXfK+OcjKO\npH5SaU89Mz8CfKTNWTrCyTiS+klPTT6qysk4kvqF136RpIJY6pJUEEtdkgpiqUtSQSx1SSqIpS5J\nBbHUJakglrokFcRSl6SCWOqSVBBLXZIKYqlLUkEsdUkqiKUuSQWx1CWpIJa6JBXEUpekgljqklQQ\nS12SCtJz9yjdsfMAk9t3s+/gEUaHB5kYH/P+o5LU1FOlvmPnAW7f9szs871T07PPFyp2vwgk9Yue\nGn6Z3L57nuV75l3n2BfB3qlpjs7MzH4R7Nh5oDMhJalGPVXq+w4emXP5/kPT865T5YtAknpVT5X6\n6PDgnMs3rFs77zpVvggkqVf1VKlPjI/Ns3zTvOtU+SKQpF7VU6W+ZfN6rr38TWwceRWrVw2wceRV\nXHv5mxY86Fnli0CSelVPnf0CjWJfypkrx147uX0P+w9Ns2HdWibGN3n2i6Qi9VypV7HULwJJ6lU9\nNfwiSVqYpS5JBbHUJakglrokFcRSl6SCWOqSVBBLXZIKUuk89YgYAG4D3gy8APxRZv57O4NJkpau\n6p767wOnZ+a5wFbg1vZFkiRVVbXU3w58HSAzdwDntC2RJKmyqqX+K8D/HPf8pYhwfF6Sala1iH8G\nDB3/Ppl5tA15JEnLUPWCXt8BLgPuj4jfAf51kdcPjIwMLfKSenRjLjO1xkyt68ZcZuqMqqX+APCu\niPhO8/nVbcojSVqGgZmZmbozSJLaxIObklQQS12SCmKpS1JBLHVJKsiK3KM0IrYAn8rMC1die4tk\nWQPcCYwBrwA+kZlfqznTKuAOIICjwJ9k5s46Mx0TEa8BngQuzsxddecBiIineHny239k5h/WmQcg\nIm4ELgdOA27LzLtqzvMB4CpgBngljes0/Vpm/qzGTGuAe2j87r0EXNMNP1MR8QrgLuB1NH6ursvM\nf6sxz2xfRsTrgbtp9MLTmXndYut3fE89Im6gUVind3pbLboSOJiZ5wGXAp+vOQ/A7wEzmfl24Gbg\nkzXnAWZ/Cb8IHKk7yzERcTpAZl7U/NMNhX4+MN68FtIFwJn1JoLMvCczL8zMi4CngD+rs9Cb3g2s\nzsy3AR+nS37OgWuAw5k5DnwY+Lu6gszRl7cCH83M84FVEXHFYu+xEsMvPwbeswLbadVXaBQnNP7+\nL9aYBYDM/Cfgj5tPx4D/ri/NCT4NfAHYV3eQ47wZWBsRD0fEN5t7NXW7BHg6Ih4EtgH/XHOeWRFx\nDrA5M79UdxZgF7CmeZXXM4Bf1pznmM3AQwDN/zmcVWOWk/vy7Mx8ovn4IeDixd6g46WemQ/Q+K9W\nV8jMI5k5HRFDwH3ATXVnAsjMoxFxN/A3wJdrjkNEXAU8l5nfAAZqjnO8I8AtmXkJ8KfAl7vgukPD\nwNnAe2lk+od645xgK/BXdYdo+jnwWuBHwO3A5+qNM+sHNGbI05whP9r84llxc/Tl8TkO0/gyXFDd\nvwy1iIgzgUeBezLzH+vOc0xmXgW8Efj7iHhlzXGupjFr+DHgLcC9zfH1uu2i+aWXmc8Ch4ANtSZq\nZHg4M19q7um9EBHDNWciIs4A3piZ36o7S9NfAF/PzKDxP657m+PZdbsTOBwRjwNXAE9lZrfMyjz+\nmlpDwPOLrbCSpd4Ve3sRsR54GPjLzLyn7jwAEXFl80AbNG468n+c+I+54jLz/OaY7IU09mTen5nP\n1Zmp6YPAZwAiYpTGD/r+WhPBt4HfhdlMgzSKvm7nAY/UHeI4P+XlA9zP0zhRY3V9cWb9NvBI8zjb\n/UA33fDnexFxXvPxpcATC70YVujsl6Zu+ebbCrwauDkiPkYj16WZ+b81ZvoqcFdEfIvGv8mf15zn\nZN3ybwfwJRqf1RM0vvg+WPcVQjNzMiLeERHfpbHz8qEu2dMLuqugPgvc2dwjPg3Ympm/qDkTwLPA\nxyPiJhrHs2o/+H6c64E7IuI04Ic0vnQW5LVfJKkgfTmmLkmlstQlqSCWuiQVxFKXpIJY6pJUEEtd\nkgpiqUtSQSx1SSrI/wNo3zTRfcwsbgAAAABJRU5ErkJggg==\n", | |
| "text/plain": [ | |
| "<matplotlib.figure.Figure at 0xbefc377438>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "train_X = np.array([7.33892413, 6.09065249, 3.6782235 , 1.5484478 , 5.2024495 ,\n", | |
| " 1.55973193, 1.90577005, 3.52333413, 1.89705273, 7.16303144,\n", | |
| " 6.69186969, 6.35116542, 8.40910037, 6.81104552, 9.0276311])\n", | |
| "train_Y = np.array([6.01218497, 7.15272823, 4.39711002, 0.78859037, 4.66163788,\n", | |
| " 2.1366047 , 0.75108498, 2.4262601 , 2.01357347, 5.1216737 ,\n", | |
| " 8.01817765, 7.07644285, 9.11215858, 8.64146407, 8.13432732])\n", | |
| "\n", | |
| "n_samples = train_X.shape[0]\n", | |
| "\n", | |
| "print(\"Number of samples: \", n_samples)\n", | |
| "plt.plot(train_X, train_Y, 'o');" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "At the end of the day, our model will be $y = Wx + b$, where we feed in the training values for $x$ and $y$, and the model will have to determine $W$ and $b$." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 4, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "X = tf.placeholder(\"float\")\n", | |
| "Y = tf.placeholder(\"float\")\n", | |
| "\n", | |
| "# Set model weights; initialize all weights as random numbers\n", | |
| "W = tf.Variable(np.random.randn(), name=\"weight\")\n", | |
| "b = tf.Variable(np.random.randn(), name=\"bias\")\n", | |
| "\n", | |
| "# Construct a linear model\n", | |
| "pred = tf.add(tf.mul(X, W), b)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "Recall that OLS works by minimizing the mean squared error, $\\frac{1}{2n} \\sum_{i=1}^n (W x_i + b - y_i)^2$; in TensorFlow, we explicitly specify this \"cost\" and how to go about minimizing it." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 5, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "# Mean squared error\n", | |
| "cost = tf.reduce_sum(tf.pow(pred-Y, 2))/(2*n_samples)\n", | |
| "\n", | |
| "# Gradient descent\n", | |
| "learning_rate = 0.001\n", | |
| "optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)\n", | |
| "\n", | |
| "# Initializing the variables\n", | |
| "init = tf.global_variables_initializer()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "With the variables in place, we can run the TensorFlow session and examine what it learns." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 6, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "W = 0.811665\n", | |
| "b = 1.18484\n" | |
| ] | |
| }, | |
| { | |
| "data": { | |
| "image/png": "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\n", | |
| "text/plain": [ | |
| "<matplotlib.figure.Figure at 0xbefec49dd8>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "with tf.Session() as sess:\n", | |
| " sess.run(init)\n", | |
| "\n", | |
| " # Run the optimization algorithm 1000 times\n", | |
| " for i in range(1000):\n", | |
| " sess.run(optimizer, feed_dict={X: train_X, Y: train_Y})\n", | |
| " \n", | |
| " # Visualize the results\n", | |
| " print('W = ', sess.run(W))\n", | |
| " print('b = ', sess.run(b))\n", | |
| " plt.plot(train_X, train_Y, 'o')\n", | |
| "\n", | |
| " # Make predictions for new values of x\n", | |
| " x = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])\n", | |
| " predictions = sess.run(pred, feed_dict={X: x})\n", | |
| " plt.plot(x, predictions)\n", | |
| " plt.show()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "Logistic regression in TensorFlow\n", | |
| "=================================" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "Next up, let us take a look at a classification problem instead." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 7, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": "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\nf0dmj5lZHOhBAAAAAElFTkSuQmCC\n", | |
| "text/plain": [ | |
| "<matplotlib.figure.Figure at 0xbefec49c88>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "group1 = np.random.multivariate_normal([-4, -4], 20*np.identity(2), size=40)\n", | |
| "group2 = np.random.multivariate_normal([4, 4], 20*np.identity(2), size=40)\n", | |
| "plt.plot(*group1.T, 'o')\n", | |
| "plt.plot(*group2.T, 'o')\n", | |
| "plt.show()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "The plan will be to find a line separating the two groups, so that if one day, someone comes with a new point in the plane, we will be able to say if that point should be green or blue.\n", | |
| "\n", | |
| "We proceed as with linear regression with a few notable differences:\n", | |
| "- Inputs $X$ are now 2-dimensional, which will be reflected in our placeholders and variables, we now have two weights, $w_1$ and $w_2$.\n", | |
| "- Our prediction function will be the *logistic* or *sigmoid* function $p(X) = 1/(1 + \\exp(w^tX + b))$, taking values between $0$ and $1$.\n", | |
| "\n", | |
| "At the end of the day, $p(X)$ represents the probability that the point $X$ should be labelled \"green\". Here's what its logarithm looks like:" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 8, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": "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\nm8JDRETi9v8BeCkbE1SYRtEAAAAASUVORK5CYII=\n", | |
| "text/plain": [ | |
| "<matplotlib.figure.Figure at 0xbefd3d09b0>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "x = np.arange(-10, 11)\n", | |
| "plt.title('The logarithm of the logistic function')\n", | |
| "plt.xlabel('$w^t X + b$')\n", | |
| "plt.ylabel('$p(X)$')\n", | |
| "plt.plot(x, np.log(1/(1+np.exp(x))));" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 9, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "# Inputs are now two-dimensional and come with labels \"blue\" or \"green\" (represented by 0 or 1)\n", | |
| "X = tf.placeholder(\"float\", shape=[None, 2])\n", | |
| "labels = tf.placeholder(\"float\", shape=[None])\n", | |
| "\n", | |
| "# Set model weights and bias as before\n", | |
| "W = tf.Variable(tf.zeros([2, 1], \"float\"), name=\"weight\")\n", | |
| "b = tf.Variable(tf.zeros([1], \"float\"), name=\"bias\")\n", | |
| "\n", | |
| "# Predictor is now the logistic function\n", | |
| "pred = tf.sigmoid(tf.to_double(tf.reduce_sum(tf.matmul(X, W), axis=[1]) + b))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "Just as we replaced our prediction method, we replace our cost function with the *cross-entropy*, $$-\\sum_{i=1}^n l(X_i) \\log(p(X_i)) + (1-l(X_i))\\log(1-p(X_i)),$$ where $l(X_i)$ is the label of $X_i$ (which is $0$ or $1$)." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 10, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "# Similarly, the OLS cost function from before is now replaced by cross-entropy\n", | |
| "cost = -tf.reduce_sum(tf.to_double(labels) * tf.log(pred) + (1-tf.to_double(labels)) * tf.log(1-pred))\n", | |
| "\n", | |
| "# Gradient descent\n", | |
| "learning_rate = 0.001\n", | |
| "optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)\n", | |
| "\n", | |
| "# Initializing the variables\n", | |
| "init = tf.global_variables_initializer()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "We are now in a position to run our optimization and plot the resulting values of $p$." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 11, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "W = [[ 0.48986775]\n", | |
| " [ 0.39842403]]\n", | |
| "b = [ 0.50659829]\n" | |
| ] | |
| }, | |
| { | |
| "data": { | |
| "image/png": "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\ngg==\n", | |
| "text/plain": [ | |
| "<matplotlib.figure.Figure at 0xbefec0fe48>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "with tf.Session() as sess:\n", | |
| " train_X = np.vstack((group1, group2))\n", | |
| " train_labels = np.array([0.0] * 40 + [1.0] * 40)\n", | |
| "\n", | |
| " sess.run(init)\n", | |
| "\n", | |
| " # Run the optimization algorithm 1000 times\n", | |
| " for i in range(1000):\n", | |
| " # We stack our two groups of 2-dimensional points and label them 0 and 1 respectively\n", | |
| " sess.run(optimizer, feed_dict={X: train_X, labels: train_labels})\n", | |
| " \n", | |
| " # Plot the predictions: the values of p\n", | |
| " Xmin = np.min(train_X)\n", | |
| " Xmax = np.max(train_X)\n", | |
| " x = np.arange(Xmin, Xmax, 0.1)\n", | |
| " y = np.arange(Xmin, Xmax, 0.1)\n", | |
| " \n", | |
| " plt.plot(*group1.T, 'o')\n", | |
| " plt.plot(*group2.T, 'o')\n", | |
| " plt.xlim(Xmin, Xmax)\n", | |
| " plt.ylim(Xmin, Xmax)\n", | |
| " print('W = ', sess.run(W))\n", | |
| " print('b = ', sess.run(b))\n", | |
| " \n", | |
| " xx, yy = np.meshgrid(x, y)\n", | |
| " predictions = sess.run(pred, feed_dict={X: np.array((xx.ravel(), yy.ravel())).T})\n", | |
| " \n", | |
| " plt.title('Probability that model will label a given point \"green\"')\n", | |
| " plt.contour(x, y, predictions.reshape(len(x), len(y)), cmap=cm.BuGn, levels=np.arange(0.0, 1.1, 0.1))\n", | |
| " plt.colorbar()" | |
| ] | |
| } | |
| ], | |
| "metadata": { | |
| "anaconda-cloud": {}, | |
| "kernelspec": { | |
| "display_name": "Python [Root]", | |
| "language": "python", | |
| "name": "Python [Root]" | |
| }, | |
| "language_info": { | |
| "codemirror_mode": { | |
| "name": "ipython", | |
| "version": 3 | |
| }, | |
| "file_extension": ".py", | |
| "mimetype": "text/x-python", | |
| "name": "python", | |
| "nbconvert_exporter": "python", | |
| "pygments_lexer": "ipython3", | |
| "version": "3.5.2" | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 0 | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment