Skip to content

Instantly share code, notes, and snippets.

@fuglede
Last active August 30, 2023 06:45
Show Gist options
  • Save fuglede/ad04ce38e80887ddcbeb6b81e97bbfbc to your computer and use it in GitHub Desktop.
Save fuglede/ad04ce38e80887ddcbeb6b81e97bbfbc 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": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0xae22828470>"
]
},
"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": false
},
"outputs": [],
"source": [
"X = tf.placeholder(\"float\")\n",
"Y = tf.placeholder(\"float\")\n",
"\n",
"# Set model weights; initialize all weights as zero\n",
"W = tf.Variable(tf.zeros([1], \"float\"), name=\"weight\")\n",
"b = tf.Variable(tf.zeros([1], \"float\"), 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.98528713]\n",
"b = [ 0.08671897]\n"
]
},
{
"data": {
"image/png": "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\ni4iEkP8PkLiPgOCfHGgAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0xae2281e8d0>"
]
},
"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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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0xae1c5684e0>"
]
},
"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 0xae250f1ef0>"
]
},
"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.51274556]\n",
" [ 0.41009402]]\n",
"b = [ 0.04852471]\n"
]
},
{
"data": {
"image/png": "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\nFhYWFlHA/wO/F58UmSEgkwAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0xae25100438>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"with tf.Session() as sess:\n",
" # We stack our two groups of 2-dimensional points and label them 0 and 1 respectively\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",
" 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)-1\n",
" Xmax = np.max(train_X)+1\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