diff --git a/README.md b/README.md index d3f6082..f9cfa46 100644 --- a/README.md +++ b/README.md @@ -95,6 +95,7 @@ IPython Notebook(s) demonstrating deep learning functionality. | Notebook | Description | |--------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------| | [tsf-basics](http://nbviewer.ipython.org/github/donnemartin/data-science-ipython-notebooks/blob/master/deep-learning/tensor-flow-examples/1_intro/basic_operations.ipynb) | Learn basic operations in TensorFlow, a library for various kinds of perceptual and language understanding tasks from Google. | +| [tsf-linear](http://nbviewer.ipython.org/github/donnemartin/data-science-ipython-notebooks/blob/master/deep-learning/tensor-flow-examples/2_basic_classifiers/linear_regression.ipynb) | Implement linear regression in TensorFlow. | ### tensor-flow-exercises diff --git a/deep-learning/tensor-flow-examples/notebooks/2_basic_classifiers/linear_regression.ipynb b/deep-learning/tensor-flow-examples/notebooks/2_basic_classifiers/linear_regression.ipynb new file mode 100644 index 0000000..d7c7ff1 --- /dev/null +++ b/deep-learning/tensor-flow-examples/notebooks/2_basic_classifiers/linear_regression.ipynb @@ -0,0 +1,252 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Linear Regression in TensorFlow\n", + "\n", + "Credits: Forked from [TensorFlow-Examples](https://github.com/aymericdamien/TensorFlow-Examples) by Aymeric Damien\n", + "\n", + "## Setup\n", + "\n", + "Refer to the [setup instructions](http://nbviewer.ipython.org/github/donnemartin/data-science-ipython-notebooks/blob/master/deep-learning/tensor-flow-examples/Setup_TensorFlow.md)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import tensorflow as tf\n", + "import numpy\n", + "import matplotlib.pyplot as plt\n", + "rng = numpy.random" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Parameters\n", + "learning_rate = 0.01\n", + "training_epochs = 2000\n", + "display_step = 50" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Training Data\n", + "train_X = numpy.asarray([3.3,4.4,5.5,6.71,6.93,4.168,9.779,6.182,7.59,2.167,7.042,10.791,5.313,7.997,5.654,9.27,3.1])\n", + "train_Y = numpy.asarray([1.7,2.76,2.09,3.19,1.694,1.573,3.366,2.596,2.53,1.221,2.827,3.465,1.65,2.904,2.42,2.94,1.3])\n", + "n_samples = train_X.shape[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# tf Graph Input\n", + "X = tf.placeholder(\"float\")\n", + "Y = tf.placeholder(\"float\")" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Create Model\n", + "\n", + "# Set model weights\n", + "W = tf.Variable(rng.randn(), name=\"weight\")\n", + "b = tf.Variable(rng.randn(), name=\"bias\")" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Construct a linear model\n", + "activation = tf.add(tf.mul(X, W), b)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Minimize the squared errors\n", + "cost = tf.reduce_sum(tf.pow(activation-Y, 2))/(2*n_samples) #L2 loss\n", + "optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost) #Gradient descent" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Initializing the variables\n", + "init = tf.initialize_all_variables()" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch: 0001 cost= 3.389688730 W= 0.0198441 b= -0.273522\n", + "Epoch: 0051 cost= 0.134034902 W= 0.383208 b= -0.159746\n", + "Epoch: 0101 cost= 0.127440125 W= 0.375261 b= -0.102578\n", + "Epoch: 0151 cost= 0.121607177 W= 0.367787 b= -0.0488099\n", + "Epoch: 0201 cost= 0.116448022 W= 0.360758 b= 0.00175997\n", + "Epoch: 0251 cost= 0.111884907 W= 0.354146 b= 0.0493223\n", + "Epoch: 0301 cost= 0.107848980 W= 0.347928 b= 0.0940558\n", + "Epoch: 0351 cost= 0.104279339 W= 0.34208 b= 0.136129\n", + "Epoch: 0401 cost= 0.101122171 W= 0.336579 b= 0.1757\n", + "Epoch: 0451 cost= 0.098329842 W= 0.331405 b= 0.212917\n", + "Epoch: 0501 cost= 0.095860250 W= 0.32654 b= 0.247921\n", + "Epoch: 0551 cost= 0.093676031 W= 0.321963 b= 0.280843\n", + "Epoch: 0601 cost= 0.091744311 W= 0.317659 b= 0.311807\n", + "Epoch: 0651 cost= 0.090035893 W= 0.313611 b= 0.340929\n", + "Epoch: 0701 cost= 0.088524953 W= 0.309804 b= 0.36832\n", + "Epoch: 0751 cost= 0.087188691 W= 0.306222 b= 0.394082\n", + "Epoch: 0801 cost= 0.086007021 W= 0.302854 b= 0.418311\n", + "Epoch: 0851 cost= 0.084961981 W= 0.299687 b= 0.441099\n", + "Epoch: 0901 cost= 0.084037818 W= 0.296708 b= 0.462532\n", + "Epoch: 0951 cost= 0.083220571 W= 0.293905 b= 0.48269\n", + "Epoch: 1001 cost= 0.082497880 W= 0.29127 b= 0.50165\n", + "Epoch: 1051 cost= 0.081858821 W= 0.288791 b= 0.519481\n", + "Epoch: 1101 cost= 0.081293717 W= 0.28646 b= 0.536251\n", + "Epoch: 1151 cost= 0.080794014 W= 0.284267 b= 0.552026\n", + "Epoch: 1201 cost= 0.080352172 W= 0.282205 b= 0.566861\n", + "Epoch: 1251 cost= 0.079961479 W= 0.280265 b= 0.580815\n", + "Epoch: 1301 cost= 0.079616025 W= 0.278441 b= 0.593939\n", + "Epoch: 1351 cost= 0.079310589 W= 0.276725 b= 0.606284\n", + "Epoch: 1401 cost= 0.079040587 W= 0.275111 b= 0.617893\n", + "Epoch: 1451 cost= 0.078801893 W= 0.273594 b= 0.62881\n", + "Epoch: 1501 cost= 0.078590907 W= 0.272167 b= 0.639077\n", + "Epoch: 1551 cost= 0.078404360 W= 0.270824 b= 0.648734\n", + "Epoch: 1601 cost= 0.078239456 W= 0.269562 b= 0.657817\n", + "Epoch: 1651 cost= 0.078093678 W= 0.268374 b= 0.66636\n", + "Epoch: 1701 cost= 0.077964827 W= 0.267257 b= 0.674395\n", + "Epoch: 1751 cost= 0.077850945 W= 0.266207 b= 0.681952\n", + "Epoch: 1801 cost= 0.077750273 W= 0.265219 b= 0.68906\n", + "Epoch: 1851 cost= 0.077661335 W= 0.264289 b= 0.695745\n", + "Epoch: 1901 cost= 0.077582702 W= 0.263416 b= 0.702033\n", + "Epoch: 1951 cost= 0.077513263 W= 0.262593 b= 0.707947\n", + "Optimization Finished!\n", + "cost= 0.077453 W= 0.261835 b= 0.713401\n" + ] + } + ], + "source": [ + "# Launch the graph\n", + "with tf.Session() as sess:\n", + " sess.run(init)\n", + "\n", + " # Fit all training data\n", + " for epoch in range(training_epochs):\n", + " for (x, y) in zip(train_X, train_Y):\n", + " sess.run(optimizer, feed_dict={X: x, Y: y})\n", + "\n", + " #Display logs per epoch step\n", + " if epoch % display_step == 0:\n", + " print \"Epoch:\", '%04d' % (epoch+1), \"cost=\", \\\n", + " \"{:.9f}\".format(sess.run(cost, feed_dict={X: train_X, Y:train_Y})), \\\n", + " \"W=\", sess.run(W), \"b=\", sess.run(b)\n", + "\n", + " print \"Optimization Finished!\"\n", + " print \"cost=\", sess.run(cost, feed_dict={X: train_X, Y: train_Y}), \\\n", + " \"W=\", sess.run(W), \"b=\", sess.run(b)\n", + "\n", + " #Graphic display\n", + " plt.plot(train_X, train_Y, 'ro', label='Original data')\n", + " plt.plot(train_X, sess.run(W) * train_X + sess.run(b), label='Fitted line')\n", + " plt.legend()\n", + " plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n49L+/fffm4ZhmLGxsR7fX3lLly41DcMwo6OjzVOnTpW2//zzz2Z4eLjHz6O6NWVmZlZa06lTp8yf\nfvrJrT03N9f83e9+Z1544YXmyZMnK3wPVf3zwfe1mmMKFgAAcJOWnKyoCvqiivvr6+tlZWVJqtr6\ninbt2rlcc7YRI0bopptuqtJrnj59WsuWLVOLFi301FNPufT16NFDv//976t0n7P179/f7bo//OEP\nCgoK0tatW13a7Xa7mjZt6naPHj16aODAgfrss89UWFhY7RpKLFy4UJI0e/ZsNWzYsLS9ZcuWevrp\npz1eU92azHOs/WjYsKHatm3r1t68eXPFxsbql19+cftcYA0CCAAAcBNUUKCKnjVkK+6vz69XGyIj\nI6t87jfffKP8/Hz16NHD45fufv36Vfv1r776are24OBgXXzxxfrll1/c+tavX69hw4apTZs2atiw\nYekainXr1un06dM6fPhwtWsokZqaqqCgIPXv39+tr7IF/LVd065duzRhwoTSxyqX3O+xxx6TpBo/\nWhm1gzUgAADATWFwsEzJYygoKu6vr6/XunVrpaena//+/ec894cffpAkjz9Zb926dZVfMzc3V5J0\n8cUXe+yvqL0yLVq08NgeHBzsNprx6quvavLkybrwwgt14403qn379goJCZFhGPrwww+1Y8eOCheL\nV0Vubq7CwsIUFBTk1lfRe6vtmv73v/9p0KBBKioq0vXXX69bb71VzZs3l81m0/bt27V69eoavUfU\nHgIIAABw0zUyUlvS0tTHQ9+W4v76+nrXXHONNm3apE8++UT33ntvhecVFhZq06ZNkjyPUFRnP4rm\nzZtLkg4dOuSxv6L22lBQUKBnn31Wbdq0UWpqqlsg+OKLL2r8GqGhofr5559VWFjoFkIOHjzolZpm\nzZql/Px8bdq0Sddee61L31//+letXr262vdE3WAKFgAAcBPncGhqeLiS5ByBUPGvSZKmhYcrzuGo\nt683YcIEBQUF6cMPP1RaWlqF57399tvKyspSly5ddN1119XoNa+44go1btxYO3fu1IkTJ9z6//vf\n/9bo/pU5fPiwcnNzFR0d7fZF/8SJE0pNTa3x5n4REREqLCxUYmKiW19JiKtpTSXBpqK1Kt99953C\nwsLcwockff7551V9K/ACAggAAHBjt9u1PClJKydM0LCuXTW8c2cN69pVKydMqPVH8Hr79Tp27Kip\nU6fqzJkzGj58uMd9MFatWqWHH35YwcHBWrBgQY1fs0GDBho7dqyOHj2qWbNmufTt2LFD8fHxNX6N\nipTsObJt2zb9+uuvpe1nzpzRww8/rCNHjtT4NWJjYyVJ06ZNc5nm9PPPP7u93/OtqWXLlpLk9rjj\nEh07dtSRI0f09ddfu7S/9dZb+ve//139N4U6wxQsAADgkd1u19zipxv52+s9++yz+vXXX/Xyyy/r\nyiuv1ODBg9W1a1edOXNGX375pZKTkxUSEqJly5bVePSjxJw5c/Tpp5/K4XBoy5Yt6tu3r7KysrRi\nxQoNHTpUq1atctt0UKr5zt82m00PPfSQ5syZo+7du2v48OE6ffq0PvvsMx09erT0iVM1MW7cOC1f\nvlxr1qzR7373Ow0fPlxnzpzRBx98oMjISO3du7fGNTVr1kx9+vRRYmKixo8fr8suu0xBQUEaMWKE\nunfvrkmTJmnjxo3q37+/Ro8erebNm2vbtm364osvdPvttyshIaFG7xG1hxEQAAAQcAzD0Isvvqgt\nW7bojjvu0K5du/R///d/+uc//6m8vDw99thj2rNnj2677TaP157PlKWLLrpIX375pX7/+99r165d\neuWVV7Rjxw4tWLBAd955p6SytSI1eS1P58+cOVMvvfSSmjRpojfeeEOrVq1SZGSkkpOT1b59+xpP\nwZKkFStWaMaMGSoqKtLf/vY3rVu3Tn/4wx+0fPlyj+efT03vvPOOhg4dqo8++kjPPfecpk+fru3b\nt0uSBg8erLVr16pr165avny5Fi5cqCZNmmjTpk0aOnRorbxH1A7DrGmsRq1JTU1VRESEUlJS1KtX\nL6vLAQD4Gf6d8V3Tpk3TX//6V23cuLF0V3R4V1X/fPDnqOYYAQEAAPAST/tQfP3115o/f77CwsJq\nbboX4MtYAwIAAOAlV199tS677DJ169ZNTZs21bfffqv169dLkt58802XXcQBf0UAAQAA8JI//elP\nWrVqld577z0dP35cLVu2VExMjB577DGPj48F/BEBBAAAwEueeeYZPfPMM1aXAViKNSAAAAAAvIYA\nAgAAAMBrCCAAAAAAvIYAAgAAAMBrCCAAAAAAvIYAAgAAAMBrCCAAAAAAvIYAAgAAAMBrCCAAAAAA\nvIYAAgAA4EFmZqZsNptiY2OtLqVCmzZtks1m04wZM6p0/qJFi2Sz2bR48WKX9g4dOqhjx451USLg\nhgACAAACjs1mq/S/+Ph4GYYhSaW/lpgwYYJsNpv279/v8d4DBgyQzebdr1jla6zu+YZhVPsewPkK\ntroAAAAAKxiGoenTp3vs69mzp37zm98oPT1doaGhHq89173rk08//dTqEhBACCAAACBgPfPMM5X2\nd+7c2WO7aZoyTbMuSrIE06/gTUzBAgAA8MDTGpCS6VmS80t7yZStjh07at++fbLZbNq8ebNM03SZ\n0jVw4ECXe//444964IEHdOmll6px48Zq1aqVRowYoW3btnms5dChQ7rnnnt08cUXKyQkRFdddVVp\nHbXB0xqQs9eLfPbZZxowYICaN2+u0NBQ3XLLLUpPT/d4r7y8PP31r39Vz5491axZM11wwQWKjo7W\ne++9V2v1on5jBAQAAKASZ0+nmj59ulatWqUdO3Zo0qRJatGihSSpRYsWatGihaZPn65FixZp3759\nevbZZ0uv69ChQ+n/p6am6qabbtIvv/yim2++WbfffrtycnK0atUq9e/fXx9++KFiYmJKzz98+LCi\no6P1/fff65prrlH//v114MAB/elPf9KNN95YJ+/zbOvWrdPq1as1ZMgQ/fnPf9auXbu0YcMGbd26\nVWlpaQoLCys99+jRoxo0aJC++uorRURE6J577lFRUZE++ugj3XHHHdq1a5dmzpxZazWjfiKAAACA\ngGSapmbMmOE2lapjx466++67PV4zffp0ff/996UBpH379m79n332mfbv3+9xeldBQYFGjx6tvLw8\nbdq0Sddcc01p3+zZs9W7d2/dc889yszMVMOGDSVJU6dO1ffff6/JkyfrpZdeKj3/gQceUN++fc/7\n/VfV6tWrtXHjRpdRnKlTp2rOnDl6++23NWXKlNL2SZMm6auvvpLD4dBjjz1W2n7q1Cndeuutmj17\ntm6//XZdeeWVdV43fBcBBAAAVCovT6pgtk2d6tJFCgmp29fw9PjaAQMGVBhAamr9+vXau3evpkyZ\n4hI+JKlNmzaaMmWKJk+erP/85z+KiYnRmTNntHTpUjVv3txlREWSIiIidOedd7o9Ure2jR071m0K\n2cSJEzVnzhxt3bq1tO3IkSNasmSJevfu7RI+JKlRo0aaM2eONm7cqHfffZcAEuAIIAAAoFLp6VJE\nhPdfNyVF6tWr7u5vGIYKCwvr7gU8SEpKkuRcX1I+UEjSt99+K0navXu3YmJilJ6erpMnT6p37966\n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\nYmKi1q9fX+W/LXv37lX//v3VokULPfnkkzp69Kiefvppbdu2TdnZ2VU+3TNU1fSavPvuu3r11Vf1\ns5/9TPHx8WH95vEFs2DUJ598YhUXF/uM7dq1y2rUqJE1ZswYQ6mCT2lpqZWYmGi1b9/edBTjRo8e\nbV133XXWgAEDrMsuu8x0HGPWrVtnuVwua8WKFaajBIUjR45YrVu3tkaMGGE6StDbuHGj5XK5rCef\nfNJ0FMdNmzbNcrlcVm5urs/42LFjLZfLZRUWFhpKZs6QIUOsmJgY6/DhwxVjBw4csJo1axYWf59O\nnTplHTx40LIsy9q8ebPlcrmshQsX+n3dhAkTrMjISOvbb7+tGFu7dq3lcrmsl156ybG8TqjpNTl4\n8KB18uRJy7Isa9KkSZbL5XI0Zyhjrsiwfv36VewdUq5z587q1q2bduzYYShV8HG73WrXrl2deofl\nh9iwYYNWrFihuXPn+m1yGa4sy9LRo0dVUlJiOopRS5YsUUFBgWbNmiXJXkJQVlZmOFVwWrJkiVwu\nl37961+bjuK48k1uW7Vq5TPepk0b1atXTxERESZiGbVx40Zdd911atGiRcVYmzZt1L9/f61Zs0ZF\nRUUG0wVeRERExc+DdY7nEq1YsUI33HCD2rVrVzF27bXXqkuXLnrjjTcCntNJNb0mrVq1UsOGDZ2K\nVadQQIKQZVk6ePCgWrZsaTqKUUVFRTp06JA8Ho+effZZffDBB0pLSzMdy5jS0lLdf//9uuuuu8Jy\naV51UlNT1bx5czVu3FjXXHONtmzZYjqSEWvXrlVUVJS+/fZbde3aVc2aNVPz5s01ceJEnTp1ynS8\noFFcXKw33nhDV155pc9j08PFHXfcodatW2v8+PH67LPP9O233yojI0MvvviiJk+eXFFQwsnp06er\n/HM3adJEp0+f1rZt2wykCi779u2T1+vVFVdc4XeuV69e2rp1q4FUCGXcAxKEFi9erP3792vmzJmm\noxj1m9/8Ri+99JIkqX79+nruued09913G05lzosvvqg9e/boo48+Mh0lKDRs2FA33XSThgwZopYt\nW2r79u16+umndfXVV+uTTz5RYmKi6YiO2rVrl0pKSnTjjTfqzjvv1FNPPaV169bp+eefV2FhoZYs\nWWI6YlD44IMPdPjwYd16662moxgRFxenf/3rXxoyZIguv/zyivFHH31UTzzxhMFk5nTt2lWZmZkq\n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\n", + "text/plain": [ + "" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from IPython.display import Image\n", + "Image(filename='linearreg.png')" + ] + } + ], + "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.4.3" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +}