|
|
@@ -0,0 +1,406 @@ |
|
|
{ |
|
|
"cells": [ |
|
|
{ |
|
|
"cell_type": "code", |
|
|
"execution_count": 123, |
|
|
"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": null, |
|
|
"metadata": { |
|
|
"collapsed": false |
|
|
}, |
|
|
"outputs": [], |
|
|
"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": { |
|
|
"text/plain": [ |
|
|
"[<matplotlib.lines.Line2D at 0x5d4b9edb38>]" |
|
|
] |
|
|
}, |
|
|
"execution_count": 3, |
|
|
"metadata": {}, |
|
|
"output_type": "execute_result" |
|
|
}, |
|
|
{ |
|
|
"data": { |
|
|
"image/png": "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\n", |
|
|
"text/plain": [ |
|
|
"<matplotlib.figure.Figure at 0x5d4b60ecc0>" |
|
|
] |
|
|
}, |
|
|
"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.88705\n", |
|
|
"b = 0.708046\n" |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"data": { |
|
|
"image/png": "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\n", |
|
|
"text/plain": [ |
|
|
"<matplotlib.figure.Figure at 0x5d4cfa2240>" |
|
|
] |
|
|
}, |
|
|
"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": 149, |
|
|
"metadata": { |
|
|
"collapsed": false |
|
|
}, |
|
|
"outputs": [ |
|
|
{ |
|
|
"data": { |
|
|
"image/png": "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\nSUVORK5CYII=\n", |
|
|
"text/plain": [ |
|
|
"<matplotlib.figure.Figure at 0x5d505bb8d0>" |
|
|
] |
|
|
}, |
|
|
"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: 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$, and our prediction function will be the *logistic function* $q(X) = 1/(1 + \\exp(w^tX + b))$, taking values between $0$ and $1$. At the end of the day, $q(X)$ represents the probability that the point $X$ should be labelled \"green\"." |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"cell_type": "code", |
|
|
"execution_count": 150, |
|
|
"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 $$-\\sum_{i=1}^n p(X_i) \\log(q(X_i)) + (1-p(X_i))\\log(1-q(X_i)),$$ where $p(X_i)$ is the label of $X_i$ (which is $0$ or $1$)." |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"cell_type": "code", |
|
|
"execution_count": 151, |
|
|
"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 $q$." |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"cell_type": "code", |
|
|
"execution_count": 152, |
|
|
"metadata": { |
|
|
"collapsed": false |
|
|
}, |
|
|
"outputs": [ |
|
|
{ |
|
|
"name": "stdout", |
|
|
"output_type": "stream", |
|
|
"text": [ |
|
|
"W = [[ 0.32362193]\n", |
|
|
" [ 0.22263546]]\n", |
|
|
"b = [ 0.1163578]\n" |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"data": { |
|
|
"image/png": "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\n", |
|
|
"text/plain": [ |
|
|
"<matplotlib.figure.Figure at 0x5d505a5d68>" |
|
|
] |
|
|
}, |
|
|
"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 q\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()" |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"cell_type": "code", |
|
|
"execution_count": null, |
|
|
"metadata": { |
|
|
"collapsed": true |
|
|
}, |
|
|
"outputs": [], |
|
|
"source": [] |
|
|
} |
|
|
], |
|
|
"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 |
|
|
} |