Skip to content

Instantly share code, notes, and snippets.

@jtokoph
Forked from fuglede/tensorflow101.ipynb
Created March 14, 2017 01:44
Show Gist options
  • Select an option

  • Save jtokoph/40b726c20ed84047660454707a80aa4b to your computer and use it in GitHub Desktop.

Select an option

Save jtokoph/40b726c20ed84047660454707a80aa4b to your computer and use it in GitHub Desktop.
TensorFlow 101
Display the source blob
Display the rendered blob
Raw
{
"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": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0xa1f59d780>]"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0xa1e2583c8>"
]
},
"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 = 1.12245\n",
"b = -0.780825\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0xa20b37f98>"
]
},
"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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\nAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0xa20b37dd8>"
]
},
"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* $p(X) = 1/(1 + \\exp(w^tX + b))$, taking values between $0$ and $1$. 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": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0xa20b37828>]"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0xa20b37860>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"x = np.arange(-10, 11)\n",
"plt.title('The logarithm of the logistic function')\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.84594744]\n",
" [ 0.624578 ]]\n",
"b = [ 0.24354661]\n"
]
},
{
"data": {
"image/png": "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\nGEQA/w802tWVygvjdQAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0xa20ac6cc0>"
]
},
"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()"
]
},
{
"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
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment