Created
September 27, 2018 15:50
-
-
Save voodootikigod/d3a5eecbd69eb0de81d6213e0c10b1fb to your computer and use it in GitHub Desktop.
This file contains 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
{ | |
"nbformat": 4, | |
"nbformat_minor": 0, | |
"metadata": { | |
"colab": { | |
"name": "Concept01_linear_regression.ipynb", | |
"version": "0.3.2", | |
"provenance": [], | |
"toc_visible": true, | |
"include_colab_link": true | |
}, | |
"kernelspec": { | |
"display_name": "Python 3", | |
"language": "python", | |
"name": "python3" | |
} | |
}, | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "view-in-github", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"[View in Colaboratory](https://colab.research.google.com/github/voodootikigod/TensorFlow-Book/blob/master/google-aiml-backstage.ipynb)" | |
] | |
}, | |
{ | |
"metadata": { | |
"id": "Lah8kNHvpJgM", | |
"colab_type": "text" | |
}, | |
"cell_type": "markdown", | |
"source": [ | |
"# Basics" | |
] | |
}, | |
{ | |
"metadata": { | |
"id": "LIgHAheSpvEl", | |
"colab_type": "text" | |
}, | |
"cell_type": "markdown", | |
"source": [ | |
"## Our first Tensor\n", | |
"\n", | |
"Start with importing the necessary packages (from python). Notice you don't have to worry about `pip` or anything crazy with the Python packaging." | |
] | |
}, | |
{ | |
"metadata": { | |
"id": "kqoMOf_3qPiU", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"cell_type": "code", | |
"source": [ | |
"import tensorflow as tf\n", | |
"import numpy as np" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"id": "qAJ6xnOSqTRF", | |
"colab_type": "text" | |
}, | |
"cell_type": "markdown", | |
"source": [ | |
"Now lets make a 2x2 matrix!" | |
] | |
}, | |
{ | |
"metadata": { | |
"id": "62WKtwoNqV2t", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"cell_type": "code", | |
"source": [ | |
"m1 = [[1.0, 2.0],\n", | |
" [3.0, 4.0]]\n", | |
"\n", | |
"m2 = np.array([[1.0, 2.0],\n", | |
" [3.0, 4.0]], dtype=np.float32)\n", | |
"\n", | |
"m3 = tf.constant([[1.0, 2.0], [3.0, 4.0]])" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"id": "usYH0w5tqvc6", | |
"colab_type": "text" | |
}, | |
"cell_type": "markdown", | |
"source": [ | |
"WTF did we just do?!?!" | |
] | |
}, | |
{ | |
"metadata": { | |
"id": "AfzUp0GuqzIW", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"cell_type": "code", | |
"source": [ | |
"print(type(m1))\n", | |
"print(type(m2))\n", | |
"print(type(m3))" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"id": "-4r07-e3q6IQ", | |
"colab_type": "text" | |
}, | |
"cell_type": "markdown", | |
"source": [ | |
"But I only want tensors?!" | |
] | |
}, | |
{ | |
"metadata": { | |
"id": "T1k0LzDErATZ", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"cell_type": "code", | |
"source": [ | |
"t1 = tf.convert_to_tensor(m1, dtype=tf.float32)\n", | |
"t2 = tf.convert_to_tensor(m2, dtype=tf.float32)\n", | |
"t3 = tf.convert_to_tensor(m3, dtype=tf.float32)" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"id": "DLZ3wkzWrOXX", | |
"colab_type": "text" | |
}, | |
"cell_type": "markdown", | |
"source": [ | |
"Let's see what happened!" | |
] | |
}, | |
{ | |
"metadata": { | |
"id": "vsftfTBorRVp", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"cell_type": "code", | |
"source": [ | |
"print(type(m1))\n", | |
"print(type(m2))\n", | |
"print(type(m3))" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"id": "ELiYBtbIrSqZ", | |
"colab_type": "text" | |
}, | |
"cell_type": "markdown", | |
"source": [ | |
"Boom!" | |
] | |
}, | |
{ | |
"metadata": { | |
"id": "IF3E93QzrU8D", | |
"colab_type": "text" | |
}, | |
"cell_type": "markdown", | |
"source": [ | |
"## Lets Add Math" | |
] | |
}, | |
{ | |
"metadata": { | |
"id": "TPbbpSM7sBTq", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"cell_type": "code", | |
"source": [ | |
"x = tf.constant([[1,2]])" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"id": "VoeLoVmxsHDh", | |
"colab_type": "text" | |
}, | |
"cell_type": "markdown", | |
"source": [ | |
"Negate that 1x2 matrix." | |
] | |
}, | |
{ | |
"metadata": { | |
"id": "RTBPtRemsNSJ", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"cell_type": "code", | |
"source": [ | |
"neg_x = tf.negative(x)" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"id": "cL5G51ZNsP6I", | |
"colab_type": "text" | |
}, | |
"cell_type": "markdown", | |
"source": [ | |
"Let's test it" | |
] | |
}, | |
{ | |
"metadata": { | |
"id": "ly9SHLDksR4B", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"cell_type": "code", | |
"source": [ | |
"print(neg_x)" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"id": "CNGfMjz7sUZv", | |
"colab_type": "text" | |
}, | |
"cell_type": "markdown", | |
"source": [ | |
"Wait wut? To actually execute a Tensorflow operation, you will need to create a session and run it." | |
] | |
}, | |
{ | |
"metadata": { | |
"id": "wXmzv8eYsawE", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"cell_type": "code", | |
"source": [ | |
"with tf.Session() as sess:\n", | |
" result = sess.run(neg_x)\n", | |
" print(result)" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"id": "utjj2_6BsiHs", | |
"colab_type": "text" | |
}, | |
"cell_type": "markdown", | |
"source": [ | |
"Happines \n", | |
"" | |
] | |
}, | |
{ | |
"metadata": { | |
"id": "2g8kFJUhtaZY", | |
"colab_type": "text" | |
}, | |
"cell_type": "markdown", | |
"source": [ | |
"## Lets Get Interactive" | |
] | |
}, | |
{ | |
"metadata": { | |
"id": "wveL7QolthaL", | |
"colab_type": "text" | |
}, | |
"cell_type": "markdown", | |
"source": [ | |
"" | |
] | |
}, | |
{ | |
"metadata": { | |
"id": "72rbZrqmtBbP", | |
"colab_type": "text" | |
}, | |
"cell_type": "markdown", | |
"source": [ | |
"# Learn machines some knowledge!" | |
] | |
}, | |
{ | |
"metadata": { | |
"id": "XrErClGWr2x1", | |
"colab_type": "text" | |
}, | |
"cell_type": "markdown", | |
"source": [ | |
"## Linear regression" | |
] | |
}, | |
{ | |
"metadata": { | |
"id": "Oq-MtPaspJgP", | |
"colab_type": "text" | |
}, | |
"cell_type": "markdown", | |
"source": [ | |
"Import TensorFlow for the learning algorithm. We'll need NumPy to set up the initial data. And we'll use matplotlib to visualize our data." | |
] | |
}, | |
{ | |
"metadata": { | |
"id": "Qo4aJob8pJgR", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"cell_type": "code", | |
"source": [ | |
"%matplotlib inline\n", | |
"import tensorflow as tf\n", | |
"import numpy as np\n", | |
"import matplotlib.pyplot as plt" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"id": "UAfSKqNhpJgX", | |
"colab_type": "text" | |
}, | |
"cell_type": "markdown", | |
"source": [ | |
"Define some constants used by the learning algorithm. There are called hyper-parameters." | |
] | |
}, | |
{ | |
"metadata": { | |
"id": "GX2FxwNMpJgZ", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"cell_type": "code", | |
"source": [ | |
"learning_rate = 0.01\n", | |
"training_epochs = 100" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"id": "WLM0m2XgpJge", | |
"colab_type": "text" | |
}, | |
"cell_type": "markdown", | |
"source": [ | |
"Set up fake data that we will use to to find a best fit line" | |
] | |
}, | |
{ | |
"metadata": { | |
"id": "W_r0p5F8pJgg", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"cell_type": "code", | |
"source": [ | |
"x_train = np.linspace(-1, 1, 101)\n", | |
"y_train = 2 * x_train + np.random.randn(*x_train.shape) * 0.33" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"id": "DwDfbPk7pJgm", | |
"colab_type": "text" | |
}, | |
"cell_type": "markdown", | |
"source": [ | |
"Plot the raw data" | |
] | |
}, | |
{ | |
"metadata": { | |
"id": "NcwwP57qpJgo", | |
"colab_type": "code", | |
"colab": {}, | |
"outputId": "fe49addb-eac8-44ac-dddf-677dff489ade" | |
}, | |
"cell_type": "code", | |
"source": [ | |
"plt.scatter(x_train, y_train)" | |
], | |
"execution_count": 0, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"<matplotlib.collections.PathCollection at 0x7f12c005b8d0>" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 4 | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAEACAYAAABI5zaHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAHotJREFUeJzt3XuQnOV15/HvGZjLa41npIknGK+JBoNtlMQOM9TExKaW\nFpa8xJWUKPBGO1W7a6OpgIwTp8iur6SCWLALu5IisROVxK7s2C7rEuwsmNgYpKAORWzcKkkgvJK4\nGM3gGMJ0NiBqzFxY69k/unvUPdOX99a3t3+fqi5mRu+8FxpOPzrPec5jzjlERCRZupp9AyIiEj8F\ndxGRBFJwFxFJIAV3EZEEUnAXEUkgBXcRkQQ6N+oJzKwXeAToyZ/vW86526KeV0REwrM46tzN7A3O\nudfM7Bzgn4CPO+cykU8sIiKhxJKWcc69lv+yl9zoXSujRESaKJbgbmZdZnYU+Bdgv3PuUBznFRGR\ncOIauZ9xzo0CbwXeY2a/Gsd5RUQknMgTqsWcc6+a2UHgauB48Z+ZmVI1IiIhOOcs6O9EHrmb2ZvM\nbDD/tQdsBE6WO9Y5l9jXrbfe2vR70PPp2fR8yXuFFcfI/Xzga2bWRe7DYp9z7nsxnFdEREKKHNyd\nc08CYzHci4iIxEQrVGOSSqWafQt1leTnS/KzgZ6vU8WyiMnXhcxco64lIpIUZoZrxoSqiIi0HgV3\nEZEEUnAXEUkgBXcRkQRScBcRSSAFdxGRBFJwFxFJIAV3EZEEUnAXEUkgBXcRaQnZbJZDhw6RzWab\nfSuJoOAuIk23Z88+1q69hI0bt7J27SXs2bOv2bfU9tRbRkSaKpvNsnbtJczNHQTeDRzD89YzPX2S\n4eHhZt9e06m3jIi0pampKXp6RsgFdoB30929lqmpqebdVAIouItIU42MjLC4OAUcy//kGK+/Ps3I\nyEjzbioBFNxFpKmGh4fZtWs7nreegYExPG89u3ZtV0omIuXcRaQlZLNZpqamGBkZUWAvEjbnruAu\nItLCNKEqIiJLFNxFRBJIwV1EJIEU3EVEEkjBXUQkgRTcRUQSSMFdRCSBFNxFRBJIwV1EJIEiB3cz\ne6uZPWxm/8fMnjSzj8dxYyIitWiDj8riGLn/P+CPnXO/BvwW8DEzuySG84qIVKQNPqqLvbeMmd0L\nfNk59w/Lfq7eMiIdpJ6NwDppg4+W6C1jZiPApcCP4jyviLSXeoyqi1Mw2uCjttiCu5n1A98C/sg5\nNxvXeUWkvWSzWSYnb2Ju7iCnTx9mbu4gk5M3RcqLL/+wOHLkcW3wUcO5cZzEzM4lF9i/4Zy7r9Jx\n27ZtW/o6lUqRSqXiuLyItJDCqHpubuWoOkjKpDBC7+/vX/qwyJ3zGDffvJ677rqTm29eT3f3Wl5/\nfToxG3yk02nS6XTk88SSczezrwP/6pz74yrHKOcu0gHiyIfv2bOPycmb8h8ST2O2loWFHy/9+cDA\nGAcO7GRkZCTxG3w0bbMOM3sf8AjwJODyr886576/7DgFd5GEqDVZWgjOxaPqiYnNvs999sPhBHAj\n8DrwQ5I+eVpO2OAeOS3jnPsn4Jyo5xGR9lA8ql5cnCobuCcmNrNhw1WhRtVn0zrnA+vJjR1PAClg\nCM97OTEpmHrSNnsi4lsjShDPXuPLwJ8Dhwt/wqpVV/B3f/dlRkdHE5+OKWiJUkgRSba4ShCrrSwd\nHh5m167t9PV9DDjJ2YqYFzlz5l85dWpai5f8cM415JW7lIi0s5mZGed5Qw6ecOAcPOE8b8jNzMyU\nHJPJZEp+Vmz37r3O84bc4OCY87wht3v33orXuv32zznPG3IDA6PO84bcjh1317x+0uRjZ/CYG+aX\nQl1IwV0kEQrBuRBwi4NzrcDt58NhueIPi0wm4wYHx/K/m3sNDIy6TCZTt+dttrDBXTl3EQmsXLWM\nn3z8Qw89xLXXfpKf//zxpXMVyhrHx8d9XbdT2g4UNK1aRkQ6z/DwcElQn5qa4uWXX666eGnPnn1s\n2bKV+flFcnn0XHAOsrK0kI+fnEze4qW4aeQuIqEVl0UuLDzHmTOOxcVHWD6qBpbVrn+U4rJGvzXw\nBfVsStZqmraIyfeFFNxFEqVciqS7+32ce27PisVLhw4dYuPGrZw+vbKs8QMf+EATn6L1KS0jIqGE\nHQWX6yHjeW/nnnvuZM2aNSXnGxkZKWr09W4KZY2jo6MxP40UqM5dpINFac1bGrChkD8fHR1lfHy8\n5IOikCv3vPUMDIzheesr5sq1u1JMwpTYhHmhUkiRlhKmLHG5amWRla4ZRw18J0GlkCISxMo8eLCy\nxIK4Jjc7sczRD7UfEJFAKqVVgm54MTw8vPRhECWdot2V4qXgLtKhguTBa4ljW724PmwkR2kZkQ4X\nNa0SZzolSh/4pFKdu4g0RVy5+4JOWqDkh+rcRaRuqgXclTXs0dIpxa0NJDzl3EWkqlr59Ci5e9W0\n14/SMiJSUZB8etB0ip/t+kQ5dxGJUSFQnzp1ii1bPh+6RW+186um3R/l3EUkFoURNaxmbu4Fctnb\nePLpBeX60hS3B5boFNxFZEk2m2Vy8ibm5r4NXAf8iFyL3hTFLXqjBuC4J2FlJU2oisiSs6tEVwEj\n5ALvZuApVq06h3vv3RMqL7584jTOBVRSnnLuIgkWdJLzbC68MHKPb2FSuYlT1bTXFjbnrq6QIm2i\nVkfF5cJ2WCz8Xl/fiAPPed6vh+7QGEfnyU6HukKKJFfQssGo1SiFEXV/fz+zs7NLI+ugI+24V692\nIlXLiCTU2UnOg/nqkmNMTq5nw4arKtaa19qsupZyq0TD1KVr4rR5NKEq0uL8tsItXkm6adNm5uZ+\nQlwdFos/YE6fPszc3EEmJ2+qubJUE6fNo5G7SIvzM/otN7rv7n4fnre+pMNi2KAapS59YmIzGzZc\npYnTBosluJvZLuB3gJecc++udbyI+FcY/U5OVg7UK4Pv+fT0vIWvfOV2LrzwwshBNWp6Rc3AGi+W\nCVUzuwKYBb5eKbhrQlUkmmqTmaUTqCeAjwK/hOf9G7t2bfc1cq41Wape683R9N4yZrYWuF/BXaQ5\n9uzZx5YtW5mfXwR+SGGE3d19Beee2111ItTvZKnq0htPwV1EeOihh7j22k8WNfrKkltpejbYLy+J\nVBOv1tYWpZDbtm1b+jqVSpFKpRp5eZHEGx0d5cyZn3I2N74feAvlKm0KgVtNvFpLOp0mnU5HPo9G\n7iIJU5wbX1w8xZkzjsXFR9DIvT2FHbnHWedu+ZeI1FGt3YsmJjYzPX2SAwd28vzzT/M3f7Ozap25\natGTKa5qmd3keoL+EvAScKtz7qvLjtHIXSSisLsXFU+EAmUnRTVZ2pqaPqFa80IK7tIBapUrRgme\ncaRPtLVd+2mFtIxIR1u+kfTOnf9zKX1Sa5NpP1a2ITifrq43cfToUV+/v7KFwLe5/vobOHHiROB7\nkTYQppVkmBdq+SsJVGjDe/z48WWtbb/gwHNvfOOo6+tb7Xp6BiO3vS1tn7vXwRoHF/tux5vJZNzg\n4Fj+HvY6GHLwDtfbuzpUO19pDEK2/FVwFwmpuF96b++A87x35QPnTD5wFoL5Nx1cnP869xoYGF3q\nzR60R3tf32oHbwj8YXH2w+HgsvtTj/VWFja4Ky0jEsLyFMfCwn3MzT1Lrr58CriAs+mTjcALLO/Q\neOTI44FTNRMTm7nvvn2sWvV2gqZnClUxvb2bgDdRq8uktLkwnwhhXmjkLglSmuLIvfr6Rlxv72rX\n3//rDrySkXF3d7/zvCE3MDDqPG/I7dhxd+gdiqKmZ44fP+56e1dr5N4m0MhdpHFKuyQCHMPsVY4e\n/QEPP/wVduz4y6W68b6+K/nTP/0Mhw8/yoEDO5mePsnY2KW+erSXUxiB9/VdCWwB0sAzvnusr1u3\njq9+dYfq2pMuzCdCmBcauUvCFHLuhdH48lHzzMyMu/32z5XdxzSOvUUffPBBt2rVb5TN5fsRNN8v\nzYH2UBVpPP9teFfWpUdtoau2AZ2hLRqHiSRNtU0oajXkirpDkZ9NPKRzaeQuUieNGlmrbUCyaeQu\n0mLCjKzDBGptYSflaOQuUmd+A7b6vkg5ahwm0ibKBXtNjkolahwm0gYqNRBb2RRMq0YlGo3cRRqk\n2ugc0MhdytLIXaTFVRudV9sNqdbOSyLlaOQu0iB+8urL8/GaZBVNqIq0gSCrUjXJKqA6d5G2EGRV\naq0VriLVKLiLNJjfRUelnSdzI/fXX59e2uRapBpNqEpHa+XJymqTrCK1KOcuHSvOycp69ndR75jO\npglVkQDinKxURYvUk+rcRQKIa0Xo8r1U/e6GJFJvCu6SOH7y6OW2yQszWVmvtgGtPBcg7UHBXRKl\nUu+W5eKarIzrQyLMM4hUo5y7JEaQPHphkrK/v5/Z2dlIk5VRt8tbfj+XXXaFFi7JEi1iko7nd9FP\nuQnQ8fHx0NeNul1e8f3Mzz9LV9daKvWfEfErlpG7mV0N/AW5NM8u59wXyhyjkbvEJmxP9LiqZOIq\nT1x5P2ngg8Bjke5PkqNp1TJm1gX8FfAfgF8DJszskqjnFamkUk7aTx692gSon0nMbDbLHXd8Prac\n+Mr7SdHXdx69vVdq4ZJE45yL9AIuBx4o+v7TwKfKHOdEopqZmXGeN+TgCQfOwRPO84bczMxMyTGZ\nTKbsz44fP17293fsuNt53pAbHBxznjfkdu/eu+Lau3fvdX19qx28oer143ie48ePr3gG6Uz52Bk8\nNof5pZITwHXA3UXf/2fgS2WOq++/AekImUzGDQ6O5QNh7jUwMOoymUzF39m9e29J4P6DP/i487wh\nNzAwWhLYa31g5I75poNg16+lcH+F+yn3wSKdK2xwb+iE6rZt25a+TqVSpFKpRl5eEiBoM63iRUa5\nidZj7Nq1nsOHH12qkvEzEXv2mI3AH/q+vh9RJ2QlWdLpNOl0OvqJwnwiFL/IpWW+X/S90jJSV0FG\nun5G+rVSPTMzM+7BBx8sOmavgzUOLtJIW+qOJqZlzgGeBdYCPcDjwLoyx9X734F0kHJ59XLHlAbl\nyjnySh8YxSmd7u5+19Mz6AYGRl1f32p3++2fU05c6i5scI+zFPIvOVsKeWeZY1wc1xJZrlxZYnHt\n+GuvPY3ZOfT1va3qIqPl5ylXNtnXdyX33beP0dFRpU+kIZq6iMk5933gnXGcSySIcguSNmy4akWe\nva/vSu65586qQXn5JhrlcvE9PReyZs0aBXZpeeotI22rUkfGo0ePrqhlDxOU+/v7mZ9/jjj7xog0\nioK7tK1KC5KAyM289uzZx2WXXUFX1xrgcjzvXVpQJG1FwV3a1sqOjGkWFn7CBRdcEKnjY2n55HPA\n9zhz5nkOH35Um3BI21Bwl5YRtId5cbuBvr63AR+kq2stl112BQDT0yc5cGAn09MnAwXlci0Bensv\nYnZ2NtDziDSTWv5KS1g+MXrXXXcyNnapr0U9J06cYHT0vSws/CNxNNuKcws+kai0zZ60JL/NuEon\nRj/F1q1/xPvff6Ovxlyzs7P5kXs8uyHFtZGHSDNp5C5143fj6EOHDrFx41ZOnz4MZIFLAP+j5nqN\ntONq6ysShUbu0lKCbBxdOjE6BVxApVF4ub8J1GukPTw8zPj4uAK7tCUFd6mLIBtHFwfn/v4twNOU\nK2OstrfoxMTm0BOoIkmktIzURZhUSSENcuTI49x886dL9iTdsOEqTXJKR9IeqtJSCqPxycn1JUG6\nWiAuLP8fHx/n2muvKcl3Hzp0yNf+qCKSo5G71FX99hpt7t6nIo2iCVVpSXFNSsYxaVotZy+SNBq5\nS1sJO/LWwiRpV8q5S9sJE6iXt+X1y89WeiJJorSMNEWjUyQrm4ypfa8km9Iy0nDNSpEUVswWV++o\nHl5andIy0jaalSKZmNjMhg1XqVpGOoKCu0QWNHdemiLJjdxrpUjiKmH0k7NXuaQkgXLuElhxf5cw\nufMgZY3ZbJY77vh8w/LzKpeUpFDOXQIp7vS4sPAcZ844FhcfIUzuvNYIec+efWzZspX5+UXgh6Gu\nEYTKJaUVaRGT1N3yTo/z83/N4uIwYfuoV1vgVLjW/Pxfk2sBHE+v9mqCNDsTaXUK7h0uyNZ2K4Pf\nRuAFgpYX+rnm2WttJNcGuP4ljCqXlCRRcO9g5fLLhcB74sSJFQF4ZfB7ke7urkAtAfzmtM9e60Vg\nO5ACLq7rrkjagUkSxTnXkFfuUtIqZmZmnOcNOXjCgXPwhOvufqPzvCHneW9z4DnPe5fzvCG3e/fe\npd/bvXuv87whNzAwuvRnMzMzLpPJuJmZmcDX9Lyhir9XfK2+vtXu9ts/V/MacfD7PCKNkI+dgWOu\nJlQ7VOnWdpDb3m4E+C5wHdW2uQtbKrjymjAwMMaBAzsZHx8v+zsqS5ROp0VMEsjKWvP9wFuAVeSC\nfOUFRmH7u4Spbw97LZFOp5x7h1qeX+7r+xg9PVng59RrAlM5bZHGiZSWMbMPAduAdcC4c+5IlWOV\nlmlBxWmPAwceZnLyJpwbYH7+JTzvIuCF2HuwKNUi4l/YtEzU4P5O4AywE/jvCu7trxB4+/v7mZ2d\nVQAWabKm5Nydc0/lLx74wtKa4spxBxmdayQvEj/l3MU3vwuegvRnUS8XkfqomZYxs/3AecU/Ahxw\ni3Pu/vwxB4H/Vistc+utty59n0qlSKVS4e9cGqq4p8zi4lTFPHyQ/izq5SKyUjqdJp1OL31/2223\nNT7nvnQSn8FdOff2FCQIV6plv+eeO1mzZk1J6iVM3btIp2mFxmHKu7exaimXIA21yvVnmZt7lmuu\nmViRelEvF5H6iRTczewaM/spcDnw92b2QDy3JY1UK+8dJAivrJ+/ErOupU6Sc3MHmZy8iWw2q7p3\nkTpS+4E2FVeFid+US9D9Rwv39/LLL/N7v/eZqqkXVcuIVKb2Ax3E7+SmH373M/W7/2hxoB4fHyeb\nzdZsOaAWAyJ1EKbbWJgX6goZiyCdFf10NwzaqbGaQhfHwcGxkm6S5TpJiog/hOwKqeDeZjKZjBsc\nHMsH4txrYGDUZTKZkuMqBdpy4gi+tT4k1EZXJJywwV059zbjJ0cepn48TN67+HempqZU1ihSB61Q\nCikN4KfCJMxeoNX2My1neYXNkSOPq6xRpIVo5N6mqo20673ys9L577rrTm6++dO+K2pEpDZVyyRY\nuUBercKkMLqfnFxfEmjjqkipVGEzNnYp09MnVdYo0gI0cm9xUcoe61U/rp4wIo3TlH7ugS6k4O5b\ncU/1yy67IrYgGmewD7qoSUTCUXBPiOKR+vz8s3R1rWVu7tjSn4dd3Vl83oWF57jllk9w442/H3l1\nq1IwIvUVNrirzr2FrKwVP+jAq1g77reW/fjx4663d3X+PHsdrHFwsRYUibQBVOfe/sq1wO3ruxDn\nXqG398KS9EeQnjDXX38DCwtvBh4FLgGUKxdpF6qWSYD+/n7m55+juA+L2ascOfKDFfuZ+ukJk81m\nmZy8iYWF+4DrgP3ACOXq3xXcRZJFwb1FFHLiXV1rgMvxvIuAF9i1azvr1q1bcXxpG97yDbnOfgCk\ngO3AVmCx6u+ISDIouLeAwgj7bIolzZkzmzh69LGygR1W1rIvLp7is5/9RMkxpR8Am4HzOOecD9Ld\nnaKnZ8R3/bsmTkXaj9oPtICV7QJS9PZexOzsbNXfm5jYzPT0ST7xiQ9h1sWf/dm3SzbbWNmq4Dq+\n8Y2v8vzzT3HgwE6mp0/WLF/UBtYi7UkTqi0gyqIgv43Ewoy8tVhJpPnUOKyNRdluzk+TsKBNwYKc\nW0Rak0buLcTPCHv5MfUcXWvkLtJ8GrknQK0Rdrn8dz03mdYG1iLtSyP3NlFrFF3PihZVy4g0jxYx\nNVGYdEpQtRYt1XOTaW1gLdJ+lJaJyE+pYBzlhKU161BpAVI2m+XQoUNks9nA1xCRBAnTkCbMiwQ2\nDqu1KbTfY6qdv3hT6VobWQfZFFtE2gMhG4cpuEeQyWTc4OBYPmjnXgMDoy6TyQQ6ppxKgXp5wC+I\n8iEiIq0rbHBXWiYCP6kSv+mUYsXtCE6fPszc3EEmJ28im81WrKhRTbqIFFNwj8BPqWCYcsIwgTrM\nh4iIJJdKIWMQd7VM2MVD2vpOJHmass2emX0R+F1gAfgJcL1z7tUKxyY2uNdD2ECtmnSRZGlWcN8A\nPOycO2Nmd5JL/H+mwrEK7gEpUItI0zfINrNrgOucc/+lwp8nPriHCcYK4CJSTSv0ltkCPBDj+dpK\nmIVK6pUuIvVSc+RuZvuB84p/BDjgFufc/fljbgHGnHPXVTlPYkfuYSZAT5w4wejoe1lY+EffvyMi\nnaduvWWccxtrXPgjwAeBq2qda9u2bUtfp1IpUqlUrV9pC342qy62Z88+rr/+BhYW3ow2qxaRYul0\nmnQ6Hfk8USdUrwb+HPj3zrn/W+NYjdxLjv02cB2gXukiUlmzcu5fBvqB/WZ2xMy2RzxfWwqyUOns\nAqUUsB1YD7yD3t4r1StdRGKjRUwx8ruYqXSUn6a3dxNHjz7GunXrGnq/ItL6ml4KWfNCHRDc/dJK\nUhHxS8G9zai+XUT8UHBvIQrcIhKXVljEJGhhkoi0Bo3cYxS2m6OISCUaubcAP33YtcepiDSCgnuM\nam2YoZSNiDSK0jIxq1TmqJSNiIRRt94yEszExGY2bLhqRbVM0P4zIiJRKLjXwfDw8IqAXZqyyY3c\ntcepiNSLcu4NEmajbBGRsJRzbzAtcBKRILRCVUQkgVTn3oJU0y4izaLgXieqaReRZlJapg5U0y4i\ncVFapoX4aUMgIlJPCu51UKsNgYhIvSm414Fq2kWk2ZRzryPVtItIVKpzFxFJIE2oiojIEgV3EZEE\nUnAXEUkgBXcRkQRScBcRSSAFdxGRBFJwFxFJoEjB3cz+h5k9YWZHzez7ZvbmuG5MRETCizpy/6Jz\n7jecc6PAd4FbY7intpROp5t9C3WV5OdL8rOBnq9TRQruzrnZom9XAWei3U77Svp/YEl+viQ/G+j5\nOtW5UU9gZncA/xV4BVgf+Y5ERCSymiN3M9tvZseKXk/m//m7AM65P3HO/QrwTeAP633DIiJSW2yN\nw8zsAuB7zrl3VfhzdQ0TEQkhTOOwSGkZM7vYOfds/ttrgBOVjg1zcyIiEk6kkbuZfQt4B7mJ1Glg\nq3PuxZjuTUREQmpYP3cREWmcuq1QNbMPmdmPzewXZjZW5bipooVQmXrdT9wCPN/VZnbSzJ42s081\n8h6jMLM1ZvaQmT1lZg+a2WCF435hZkfy79+9jb7PIGq9F2bWY2Z7zewZM/uhmf1KM+4zLB/P92Ez\nm8m/X0fMbEsz7jMMM9tlZi+Z2bEqx3wp/949bmaXNvL+oqr1fGZ2pZm9UvTe/UnNkzrn6vIC3gm8\nHXgYGKty3HPAmnrdRzOfj9yH57PAWqAbeBy4pNn37vP5vgB8Mv/1p4A7Kxz3arPv1efz1HwvgI8C\n2/Nfbwb2Nvu+Y36+DwNfava9hny+K4BLgWMV/vy3ge/mv34P8Fiz7znm57sS+E6Qc9Zt5O6ce8o5\n9wxQayLVaMMeNz6f7zeBZ5xz086514G9wKaG3GB0m4Cv5b/+GrkJ83LaZaLcz3tR/MzfAt7fwPuL\nyu9/a+3yfpVwzj0KvFzlkE3A1/PH/ggYNLPzGnFvcfDxfBDwvWuFoOqAB83skJn9frNvJmb/Dvhp\n0ff/nP9ZO/hl59xLAM65fwF+ucJxvWaWMbMfmFkrf3D5eS+WjnHO/QJ4xcyGGnN7kfn9b+3afNri\nb83srY25tYZY/vw/o33+X/Pr8nz687tm9qu1Do5aCrkfKP50NHLB+hbn3P0+T/M+59yLZjYM7Dez\nE/lPsaaL6flaVpXnK5fPqzTzvjb//l0IPGxmx5xzp2K+1WZpy1FuFd8BdjvnXjezG8j9LaWd/nbS\nyQ6T+3/tNTP7beBecpWKFUUK7s65jVF+P3+OF/P/zJrZ/yb318uWCO4xPN/PgOJJubfmf9YSqj1f\nfnLnPOfcS/lunzMVzlF4/06ZWRoYBVoxuPt5L/4ZuAB4wczOAQacc//WoPuLqubzOeeK/9r/v4Av\nNuC+GuVn5N67gpb6fy0qV9THyzn3gJltN7Ohav99NiotU3YEZGZvMLP+/NergA8AP27QPcWp0gjv\nEHCxma01sx7gP5EbPbWD7wAfyX/9YeC+5QeY2er8c2FmbwLeCxxv1A0G5Oe9uJ/cswL8R3KT5e2i\n5vMta8m9idZ9ryoxKv+/9h1yPa4ws8uBVwppxTZS8fmK5w/M7DfJlbFXH3jUcfb3GnI5sDngReCB\n/M/PB/4+//WF5Gb1jwJPAp9u9qx1nM+X//5q4CngmTZ7viHgQP7eHwJW539+GXB3/uvfAo7l378n\ngI80+75rPNOK9wK4Dfid/Ne9wN/m//wxYKTZ9xzz832e3ODpKPAPwDuafc8Bnm038AKwADwPXA/c\nCNxQdMxfkasYeoIqFXqt+Kr1fMDHit67HwDvqXVOLWISEUmgVqiWERGRmCm4i4gkkIK7iEgCKbiL\niCSQgruISAIpuIuIJJCCu4hIAim4i4gk0P8HpLSB2bLWtlIAAAAASUVORK5CYII=\n", | |
"text/plain": [ | |
"<matplotlib.figure.Figure at 0x7f13140335c0>" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
} | |
} | |
] | |
}, | |
{ | |
"metadata": { | |
"id": "D275BGy8pJgy", | |
"colab_type": "text" | |
}, | |
"cell_type": "markdown", | |
"source": [ | |
"Set up the input and output nodes as placeholders since the value will be injected by `x_train` and `y_train`." | |
] | |
}, | |
{ | |
"metadata": { | |
"id": "TddFrlpJpJg0", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"cell_type": "code", | |
"source": [ | |
"X = tf.placeholder(\"float\")\n", | |
"Y = tf.placeholder(\"float\")" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"id": "6tSAsJFNpJg-", | |
"colab_type": "text" | |
}, | |
"cell_type": "markdown", | |
"source": [ | |
"Define the model as `y = w'*x`" | |
] | |
}, | |
{ | |
"metadata": { | |
"id": "b1DBcpfipJg_", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"cell_type": "code", | |
"source": [ | |
"def model(X, w):\n", | |
" return tf.multiply(X, w)" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"id": "ZaiBunCbpJhF", | |
"colab_type": "text" | |
}, | |
"cell_type": "markdown", | |
"source": [ | |
"Set up the weights variable" | |
] | |
}, | |
{ | |
"metadata": { | |
"id": "LXYJwg00pJhH", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"cell_type": "code", | |
"source": [ | |
"w = tf.Variable(0.0, name=\"weights\")" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"id": "ROSu5nNrpJhN", | |
"colab_type": "text" | |
}, | |
"cell_type": "markdown", | |
"source": [ | |
"Define the cost function as the mean squared error" | |
] | |
}, | |
{ | |
"metadata": { | |
"id": "eixcxpiPpJhP", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"cell_type": "code", | |
"source": [ | |
"y_model = model(X, w)\n", | |
"cost = tf.reduce_mean(tf.square(Y-y_model))" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"id": "djwfHYXgpJhU", | |
"colab_type": "text" | |
}, | |
"cell_type": "markdown", | |
"source": [ | |
"Define the operation that will be called on each iteration of the learning algorithm" | |
] | |
}, | |
{ | |
"metadata": { | |
"id": "CXtdjE7zpJhV", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"cell_type": "code", | |
"source": [ | |
"train_op = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)\n" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"id": "WdmZHY7spJhZ", | |
"colab_type": "text" | |
}, | |
"cell_type": "markdown", | |
"source": [ | |
"Initialize all variables" | |
] | |
}, | |
{ | |
"metadata": { | |
"id": "iTTDB_V4pJhb", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"cell_type": "code", | |
"source": [ | |
"sess = tf.Session()\n", | |
"init = tf.global_variables_initializer()\n", | |
"sess.run(init)" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"id": "2GgyThMCpJhh", | |
"colab_type": "text" | |
}, | |
"cell_type": "markdown", | |
"source": [ | |
"Train on each (x, y) pair multiple times" | |
] | |
}, | |
{ | |
"metadata": { | |
"id": "f0IIJP80pJhj", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"cell_type": "code", | |
"source": [ | |
"for epoch in range(training_epochs):\n", | |
" for (x, y) in zip(x_train, y_train):\n", | |
" sess.run(train_op, feed_dict={X: x, Y: y})" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"id": "nCHAsNmOpJhl", | |
"colab_type": "text" | |
}, | |
"cell_type": "markdown", | |
"source": [ | |
"Fetch the value of the learned parameter" | |
] | |
}, | |
{ | |
"metadata": { | |
"id": "Hn20dS10pJhw", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"cell_type": "code", | |
"source": [ | |
"w_val = sess.run(w)" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"id": "6aQwaeLKpJiz", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"cell_type": "code", | |
"source": [ | |
"sess.close()" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"id": "RDi8fBhQpJi3", | |
"colab_type": "text" | |
}, | |
"cell_type": "markdown", | |
"source": [ | |
"Visualize the best fit curve" | |
] | |
}, | |
{ | |
"metadata": { | |
"id": "rMKExwMOpJi4", | |
"colab_type": "code", | |
"colab": {}, | |
"outputId": "13c9b328-7a70-4ccb-c6b9-ae0afd216b29" | |
}, | |
"cell_type": "code", | |
"source": [ | |
"plt.scatter(x_train, y_train)\n", | |
"y_learned = x_train*w_val\n", | |
"plt.plot(x_train, y_learned, 'r')\n", | |
"plt.show()" | |
], | |
"execution_count": 0, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"image/png": "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\nYII=\n", | |
"text/plain": [ | |
"<matplotlib.figure.Figure at 0x7f12bff21b00>" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
} | |
} | |
] | |
} | |
] | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment