From 67363a08687db43c21e4a83cd864515e45681814 Mon Sep 17 00:00:00 2001 From: iamgauti Date: Wed, 30 Jan 2019 17:34:24 +0530 Subject: [PATCH 1/2] Delete earlier work --- iamgauti.ipynb | 610 ------------------------------------------------- 1 file changed, 610 deletions(-) delete mode 100644 iamgauti.ipynb diff --git a/iamgauti.ipynb b/iamgauti.ipynb deleted file mode 100644 index 0a721fb..0000000 --- a/iamgauti.ipynb +++ /dev/null @@ -1,610 +0,0 @@ -{ - "nbformat": 4, - "nbformat_minor": 0, - "metadata": { - "colab": { - "name": "First_Date_with_TensorFlow.ipynb", - "version": "0.3.2", - "provenance": [] - }, - "kernelspec": { - "name": "python3", - "display_name": "Python 3" - } - }, - "cells": [ - { - "metadata": { - "id": "2XXfXed5YLbe", - "colab_type": "text" - }, - "cell_type": "markdown", - "source": [ - "# First Date with TensorFlow\n", - "\n", - "Hi all,
\n", - "\n", - "You know what's important for understanding Deep Learning / Machine Learning?
\n", - "Intuition. Period.\n", - "\n", - "And Intuition comes when you run the code multiple times.\n", - "\n", - "So, today I can write a couple of defination and say this is this, this is that.
\n", - "You Google half of the things up. You find answers which you need to Google further.
\n", - "In the process, you probably won't even remember what's the first thing you started out with!\n", - "\n", - "So?\n", - "\n", - "Hence on, I will execute cells with code.
\n", - "The neurons in your brain will optimize a function to get a hold of what each function is doing.
\n", - "**No Theory Just Code.**\n", - "\n", - "I will at max give a defination that extends for a line. That's it.
\n", - "Let's get started!\n", - "\n", - "
\n", - "\n", - "**RECOMMENDED!**
\n", - "Write the code in the cells using the signals sent by your brain to your fingers!
\n", - "Don't just `shift+enter` the cells.\n", - "\n", - "[Source](https://github.com/iArunava/TensorFlow-NoteBooks)" - ] - }, - { - "metadata": { - "id": "gYWUpE-bYKWP", - "colab_type": "code", - "colab": {} - }, - "cell_type": "code", - "source": [ - "# Essential imports\n", - "import numpy as np\n", - "import tensorflow as tf\n", - "import matplotlib.pyplot as plt" - ], - "execution_count": 0, - "outputs": [] - }, - { - "metadata": { - "id": "eKpz5NCIYMdi", - "colab_type": "code", - "colab": {} - }, - "cell_type": "code", - "source": [ - "# Let's define some tensors\n", - "t1 = tf.constant(2.0, dtype=tf.float32)\n", - "t2 = tf.constant([1.0, 2.0], dtype=tf.float32)\n", - "t3 = tf.constant([[[1.0, 9.0], [2.0, 3.0], [4.0, 5.0]], \n", - " [[1.0, 9.0], [2.0, 3.0], [4.0, 5.0]]])" - ], - "execution_count": 0, - "outputs": [] - }, - { - "metadata": { - "id": "vmMcjzTxbWzw", - "colab_type": "code", - "colab": {} - }, - "cell_type": "code", - "source": [ - "# Let's print them out!\n", - "print (t1)\n", - "print (t2)\n", - "print (t3)" - ], - "execution_count": 0, - "outputs": [] - }, - { - "metadata": { - "id": "10ahnfjYbcop", - "colab_type": "text" - }, - "cell_type": "markdown", - "source": [ - "Where's Waldo?
\n", - "I mean, the value?
\n", - "\n", - "So, the thing is you can't print the value of tensors directly.
\n", - "You have to use `session`, so let's do that!" - ] - }, - { - "metadata": { - "id": "ol6O5I7Tb2nb", - "colab_type": "code", - "colab": {} - }, - "cell_type": "code", - "source": [ - "sess = tf.Session()\n", - "print (sess.run(t1))\n", - "print (\"=======================\")\n", - "print (sess.run(t2))\n", - "print (\"=======================\")\n", - "print (sess.run(t3))\n", - "sess.close()" - ], - "execution_count": 0, - "outputs": [] - }, - { - "metadata": { - "id": "rXKfVs_zb-kU", - "colab_type": "text" - }, - "cell_type": "markdown", - "source": [ - "Aaahaa!! Just printed those tensors!!!
\n", - "Feels good!
\n", - "\n", - "For some of you, who are like, dude you got \"No Theory Just Code\" in bold
\n", - "And you are still using the markdown cells for the theory ?!\n", - "\n", - "I am just gonna say I am a unreasonable man.
\n", - "\n", - "\n", - "So, you are programming with tf.
\n", - "What ever you do is broken down to 2 basic steps:\n", - "- Building the computational Graph!\n", - "- Execute that graph using `session`!\n", - "\n", - "That's all!\n", - "\n", - "
\n", - "\n", - "Let's compare this 2 steps with what we did above!
\n", - "So, I defined 3 `tensor`s and these 3 `tensor`s formed my computational Graph.
\n", - "And then I executed each tensor in this graph using a `session`.\n", - "\n", - "That simple!\n", - "\n", - "
\n", - "\n", - "Now, let's define a few more computational graphs and execute them with sessions.\n", - "\n", - "Okay, to start with let's build this computational graph!\n", - "\n", - "![Comp Graph 1](https://raw.githubusercontent.com/iArunava/TensorFlow-NoteBooks/master/assets/comp_graph_1.jpg)" - ] - }, - { - "metadata": { - "id": "FyVz0GNqgreZ", - "colab_type": "code", - "colab": {} - }, - "cell_type": "code", - "source": [ - "# Let's define the graph\n", - "comp_graph_1 = tf.multiply(tf.add(78, 19), 79)\n", - "\n", - "# Alternatively\n", - "comp_graph_1_alt = (tf.constant(78) + tf.constant(19)) * tf.constant(79)\n", - "\n", - "# Let's execute using session\n", - "sess = tf.Session()\n", - "print ('Comp Graph 1 : ', sess.run(comp_graph_1))\n", - "print ('Comp Graph 1 Alt: ', sess.run(comp_graph_1_alt))\n", - "sess.close()" - ], - "execution_count": 0, - "outputs": [] - }, - { - "metadata": { - "id": "SVMMtuFYhaQB", - "colab_type": "text" - }, - "cell_type": "markdown", - "source": [ - "Let's define a sligtly more involved graph!\n", - "\n", - "![alt text](https://raw.githubusercontent.com/iArunava/TensorFlow-NoteBooks/master/assets/comp_graph_2.jpg)" - ] - }, - { - "metadata": { - "id": "4856BTvRhiBb", - "colab_type": "code", - "colab": {} - }, - "cell_type": "code", - "source": [ - "# Let build the graph\n", - "# We need to cast cause the tensors operated on should be of the same type\n", - "comp_graph_part_1 = tf.cast(tf.subtract(tf.add(7, 8), tf.add(9, 10)), \n", - " dtype=tf.float32)\n", - "comp_graph_part_2 = tf.divide(tf.cast(tf.multiply(7, 10), dtype=tf.float32), tf.constant(19.5))\n", - "comp_graph_complete = tf.maximum(comp_graph_part_1, comp_graph_part_2)\n", - "\n", - "# Let's execute\n", - "sess = tf.Session()\n", - "part1_res, part2_res, total_res = sess.run([comp_graph_part_1, comp_graph_part_2, comp_graph_complete])\n", - "print ('Complete Result: ', total_res)\n", - "print ('Part 1 Result: ', part1_res)\n", - "print ('Part 2 Result: ', part2_res)\n", - "sess.close()" - ], - "execution_count": 0, - "outputs": [] - }, - { - "metadata": { - "id": "B-_ZDtEbj4N0", - "colab_type": "text" - }, - "cell_type": "markdown", - "source": [ - "Cool! Let's go! Build another graph and execute it with sessions.
\n", - "\n", - "But this time, it's all you!\n", - "\n", - "Build this graph and execute it with `session`!\n", - "\n", - "![alt text](https://raw.githubusercontent.com/iArunava/TensorFlow-NoteBooks/master/assets/comp_graph_3.jpg)\n", - "\n", - "_Remember that `tensors` operated on should be of the same type!_
\n", - "_Search up errors and other help you need on Google_" - ] - }, - { - "metadata": { - "id": "-uHNe1BolJY0", - "colab_type": "code", - "colab": {} - }, - "cell_type": "code", - "source": [ - "# Build the graph\n", - "# YOUR CODE HERE\n", - "\n", - "# Execute \n", - "# YOUR CODE HERE" - ], - "execution_count": 0, - "outputs": [] - }, - { - "metadata": { - "id": "qmap38WelREN", - "colab_type": "text" - }, - "cell_type": "markdown", - "source": [ - "Let's do another!
\n", - "It's fun! Isn't it?!\n", - "\n", - "Build and execute this one!\n", - "\n", - "![alt text](https://raw.githubusercontent.com/iArunava/TensorFlow-NoteBooks/master/assets/comp_graph_4.jpg)" - ] - }, - { - "metadata": { - "id": "0ZhYwAlLmEvB", - "colab_type": "code", - "colab": {} - }, - "cell_type": "code", - "source": [ - "# Build the graph\n", - "# YOUR CODE HERE\n", - "\n", - "# Execute \n", - "# YOUR CODE HERE" - ], - "execution_count": 0, - "outputs": [] - }, - { - "metadata": { - "id": "BnB0b6qCmGmg", - "colab_type": "text" - }, - "cell_type": "markdown", - "source": [ - "And a final one, before we move on to the next part!\n", - "\n", - "![alt text](https://raw.githubusercontent.com/iArunava/TensorFlow-NoteBooks/master/assets/comp_graph_5.jpg)" - ] - }, - { - "metadata": { - "id": "GQWyCvsQmMcL", - "colab_type": "code", - "colab": {} - }, - "cell_type": "code", - "source": [ - "# Build the graph\n", - "# YOUR CODE HERE\n", - "\n", - "# Execute \n", - "# YOUR CODE HERE" - ], - "execution_count": 0, - "outputs": [] - }, - { - "metadata": { - "id": "12NC7XTPsJw7", - "colab_type": "text" - }, - "cell_type": "markdown", - "source": [ - "# Linear Regression\n", - "\n", - "Okay, now we will create a dummy dataset and perform linear regression on this dataset!\n", - "\n", - "\n", - "To get you in the habit of looking up for the documentation, I am not providing what some of the following functions does, Google them up!" - ] - }, - { - "metadata": { - "id": "hW31RZkjtNwI", - "colab_type": "code", - "colab": {} - }, - "cell_type": "code", - "source": [ - "# Create the dataset\n", - "X = np.linspace(-30.0, 300.0, 300)\n", - "Y = 2 * np.linspace(-30.0, 250.0, 300) + np.random.randn(*X.shape)\n", - "\n", - "# Divide it into train and test\n", - "train_X = X[:250]\n", - "train_Y = Y[:250]\n", - "\n", - "test_X = X[250:]\n", - "test_Y = Y[250:]" - ], - "execution_count": 0, - "outputs": [] - }, - { - "metadata": { - "id": "LQKy6U33y4lt", - "colab_type": "code", - "colab": {} - }, - "cell_type": "code", - "source": [ - "# Let's define the hyperparameters\n", - "learning_rate = 0.000005\n", - "n_epochs = 1000\n", - "interval = 50" - ], - "execution_count": 0, - "outputs": [] - }, - { - "metadata": { - "id": "1h1-D8K1uT48", - "colab_type": "code", - "colab": {} - }, - "cell_type": "code", - "source": [ - "# let's viz the first 10 datapoints of the dataset\n", - "plt.plot(train_X[:10], train_Y[:10], 'g')\n", - "plt.show()" - ], - "execution_count": 0, - "outputs": [] - }, - { - "metadata": { - "id": "jrsUps0nu8vj", - "colab_type": "text" - }, - "cell_type": "markdown", - "source": [ - "** Question **
\n", - "Why did I created a session to plot the graph?
\n", - "[Ans]" - ] - }, - { - "metadata": { - "id": "P3-iuxE4sjAf", - "colab_type": "code", - "colab": {} - }, - "cell_type": "code", - "source": [ - "# Let's define the placeholders\n", - "\n", - "# Placeholders?\n", - "# The input to the model changes on iteration\n", - "# So we cannot have a constant in the input as we did before\n", - "# And thus we need placeholders which we can change on each \n", - "# iteration of the training\n", - "\n", - "x = tf.placeholder(tf.float32, name='x')\n", - "y = tf.placeholder(tf.float32, name='y')" - ], - "execution_count": 0, - "outputs": [] - }, - { - "metadata": { - "id": "8hPRkaoxvRyV", - "colab_type": "code", - "colab": {} - }, - "cell_type": "code", - "source": [ - "# Let's define the linear regression model\n", - "\n", - "# tf.Variable?\n", - "# We define the model parameters as tf.Variables\n", - "# as they get updated throghout the training.\n", - "# And variables denotes something which changes overtime.\n", - "\n", - "W = tf.Variable(0.0, name='weight_1')\n", - "b = tf.Variable(0.0, name='bias_1')\n", - "\n", - "pred_y = (W*x) + b" - ], - "execution_count": 0, - "outputs": [] - }, - { - "metadata": { - "id": "cSw1P8bkv96r", - "colab_type": "code", - "colab": {} - }, - "cell_type": "code", - "source": [ - "# Let's define the loss function\n", - "# We are going to use the mean squared loss\n", - "loss = tf.reduce_mean(tf.square(y - pred_y))" - ], - "execution_count": 0, - "outputs": [] - }, - { - "metadata": { - "id": "5G4uQqjsygNj", - "colab_type": "code", - "colab": {} - }, - "cell_type": "code", - "source": [ - "# Let's define the optimizer\n", - "# And specify the which value (i.e. loss) it has to minimize\n", - "optimizer = tf.train.GradientDescentOptimizer(learning_rate=learning_rate).minimize(loss)" - ], - "execution_count": 0, - "outputs": [] - }, - { - "metadata": { - "id": "ttI7ZT-ozAm1", - "colab_type": "code", - "colab": {} - }, - "cell_type": "code", - "source": [ - "# So the graph is now built\n", - "# Now let's execute the graph using session\n", - "# i.e. lets train the model\n", - "\n", - "# What it is to train a model?\n", - "# To update the paramters in the graph (i.e. tf.Variables)\n", - "# So that the loss is minimized\n", - "\n", - "# Okay let's start!\n", - "with tf.Session() as sess:\n", - " # We need to initialize the variables in our graph\n", - " sess.run(tf.global_variables_initializer())\n", - " \n", - " for epoch in range(n_epochs):\n", - " _, curr_loss = sess.run([optimizer, loss], feed_dict={x:train_X, y:train_Y})\n", - " \n", - " if epoch % interval == 0:\n", - " print ('Loss after epoch', epoch, ' is ', curr_loss)\n", - " \n", - " print ('Now testing the model in the test set')\n", - " final_preds, final_loss = sess.run([pred_y, loss], feed_dict={x:test_X, y:test_Y})\n", - " \n", - " print ('The final loss is: ', final_loss)\n", - " \n", - " # Plotting the final predictions against the true predictions\n", - " plt.plot(test_X[:10], test_Y[:10], 'g', label='True Function')\n", - " plt.plot(test_X[:10], final_preds[:10], 'r', label='Predicted Function')\n", - " plt.legend()\n", - " plt.show()" - ], - "execution_count": 0, - "outputs": [] - }, - { - "metadata": { - "id": "jgmH3wwt1src", - "colab_type": "text" - }, - "cell_type": "markdown", - "source": [ - "Okay, so we are doing good!
\n", - "\n", - "Now, let me just put everything here into one function so that you can tweak the hyperparameters easily!\n", - "\n", - "Or better, do it yourself!" - ] - }, - { - "metadata": { - "id": "OZ5TY7B_4E_v", - "colab_type": "code", - "colab": {} - }, - "cell_type": "code", - "source": [ - "def linear_regression(learning_rate=0.000005, n_epochs=100, interval=50):\n", - " # YOUR CODE HERE\n", - " pass" - ], - "execution_count": 0, - "outputs": [] - }, - { - "metadata": { - "id": "A6MaclhK4rc6", - "colab_type": "code", - "colab": {} - }, - "cell_type": "code", - "source": [ - "# Okay! Now let's tweak!\n", - "linear_regression(learning_rate=0.000034, n_epochs=500)" - ], - "execution_count": 0, - "outputs": [] - }, - { - "metadata": { - "id": "peoHmV2M40uU", - "colab_type": "code", - "colab": {} - }, - "cell_type": "code", - "source": [ - "linear_regression(learning_rate=0.0000006, n_epochs=1000)" - ], - "execution_count": 0, - "outputs": [] - }, - { - "metadata": { - "id": "KjY_KnlE5ClG", - "colab_type": "text" - }, - "cell_type": "markdown", - "source": [ - "## Drive the loss to a minimum." - ] - }, - { - "metadata": { - "id": "JKiHjGN15HPX", - "colab_type": "code", - "colab": {} - }, - "cell_type": "code", - "source": [ - "# YOUR CODE HERE" - ], - "execution_count": 0, - "outputs": [] - } - ] -} \ No newline at end of file From fa2677e12631ab0c7bd938b400767f575ceb6477 Mon Sep 17 00:00:00 2001 From: iamgauti Date: Wed, 30 Jan 2019 23:33:00 +0530 Subject: [PATCH 2/2] Created using Colaboratory --- First_Date_with_TensorFlow.ipynb | 938 +++++++++++++++++++++++++++++++ 1 file changed, 938 insertions(+) create mode 100644 First_Date_with_TensorFlow.ipynb diff --git a/First_Date_with_TensorFlow.ipynb b/First_Date_with_TensorFlow.ipynb new file mode 100644 index 0000000..7bc9750 --- /dev/null +++ b/First_Date_with_TensorFlow.ipynb @@ -0,0 +1,938 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "name": "First_Date_with_TensorFlow.ipynb", + "version": "0.3.2", + "provenance": [], + "include_colab_link": true + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + } + }, + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "view-in-github", + "colab_type": "text" + }, + "source": [ + "\"Open" + ] + }, + { + "metadata": { + "id": "2XXfXed5YLbe", + "colab_type": "text" + }, + "cell_type": "markdown", + "source": [ + "# First Date with TensorFlow\n", + "\n", + "Hi all,
\n", + "\n", + "You know what's important for understanding Deep Learning / Machine Learning?
\n", + "Intuition. Period.\n", + "\n", + "And Intuition comes when you run the code multiple times.\n", + "\n", + "So, today I can write a couple of defination and say this is this, this is that.
\n", + "You Google half of the things up. You find answers which you need to Google further.
\n", + "In the process, you probably won't even remember what's the first thing you started out with!\n", + "\n", + "So?\n", + "\n", + "Hence on, I will execute cells with code.
\n", + "The neurons in your brain will optimize a function to get a hold of what each function is doing.
\n", + "**No Theory Just Code.**\n", + "\n", + "I will at max give a defination that extends for a line. That's it.
\n", + "Let's get started!\n", + "\n", + "
\n", + "\n", + "**RECOMMENDED!**
\n", + "Write the code in the cells using the signals sent by your brain to your fingers!
\n", + "Don't just `shift+enter` the cells.\n", + "\n", + "[Source](https://github.com/iArunava/TensorFlow-NoteBooks)" + ] + }, + { + "metadata": { + "id": "gYWUpE-bYKWP", + "colab_type": "code", + "colab": {} + }, + "cell_type": "code", + "source": [ + "# Essential imports\n", + "import numpy as np\n", + "import tensorflow as tf\n", + "import matplotlib.pyplot as plt" + ], + "execution_count": 0, + "outputs": [] + }, + { + "metadata": { + "id": "eKpz5NCIYMdi", + "colab_type": "code", + "colab": {} + }, + "cell_type": "code", + "source": [ + "# Let's define some tensors\n", + "t1 = tf.constant(2.0, dtype=tf.float32)\n", + "t2 = tf.constant([1.0, 2.0], dtype=tf.float32)\n", + "t3 = tf.constant([[[1.0, 9.0], [2.0, 3.0], [4.0, 5.0]], \n", + " [[1.0, 9.0], [2.0, 3.0], [4.0, 5.0]]])" + ], + "execution_count": 0, + "outputs": [] + }, + { + "metadata": { + "id": "vmMcjzTxbWzw", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 68 + }, + "outputId": "74b7b087-f07a-4c0e-9c85-d742caad9ba0" + }, + "cell_type": "code", + "source": [ + "# Let's print them out!\n", + "print (t1)\n", + "print (t2)\n", + "print (t3)" + ], + "execution_count": 3, + "outputs": [ + { + "output_type": "stream", + "text": [ + "Tensor(\"Const:0\", shape=(), dtype=float32)\n", + "Tensor(\"Const_1:0\", shape=(2,), dtype=float32)\n", + "Tensor(\"Const_2:0\", shape=(2, 3, 2), dtype=float32)\n" + ], + "name": "stdout" + } + ] + }, + { + "metadata": { + "id": "10ahnfjYbcop", + "colab_type": "text" + }, + "cell_type": "markdown", + "source": [ + "Where's Waldo?
\n", + "I mean, the value?
\n", + "\n", + "So, the thing is you can't print the value of tensors directly.
\n", + "You have to use `session`, so let's do that!" + ] + }, + { + "metadata": { + "id": "ol6O5I7Tb2nb", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 204 + }, + "outputId": "8cdbb353-9046-43c3-d4b2-61968f5b6ad2" + }, + "cell_type": "code", + "source": [ + "sess = tf.Session()\n", + "print (sess.run(t1))\n", + "print (\"=======================\")\n", + "print (sess.run(t2))\n", + "print (\"=======================\")\n", + "print (sess.run(t3))\n", + "sess.close()" + ], + "execution_count": 4, + "outputs": [ + { + "output_type": "stream", + "text": [ + "2.0\n", + "=======================\n", + "[1. 2.]\n", + "=======================\n", + "[[[1. 9.]\n", + " [2. 3.]\n", + " [4. 5.]]\n", + "\n", + " [[1. 9.]\n", + " [2. 3.]\n", + " [4. 5.]]]\n" + ], + "name": "stdout" + } + ] + }, + { + "metadata": { + "id": "rXKfVs_zb-kU", + "colab_type": "text" + }, + "cell_type": "markdown", + "source": [ + "Aaahaa!! Just printed those tensors!!!
\n", + "Feels good!
\n", + "\n", + "For some of you, who are like, dude you got \"No Theory Just Code\" in bold
\n", + "And you are still using the markdown cells for the theory ?!\n", + "\n", + "I am just gonna say I am a unreasonable man.
\n", + "\n", + "\n", + "So, you are programming with tf.
\n", + "What ever you do is broken down to 2 basic steps:\n", + "- Building the computational Graph!\n", + "- Execute that graph using `session`!\n", + "\n", + "That's all!\n", + "\n", + "
\n", + "\n", + "Let's compare this 2 steps with what we did above!
\n", + "So, I defined 3 `tensor`s and these 3 `tensor`s formed my computational Graph.
\n", + "And then I executed each tensor in this graph using a `session`.\n", + "\n", + "That simple!\n", + "\n", + "
\n", + "\n", + "Now, let's define a few more computational graphs and execute them with sessions.\n", + "\n", + "Okay, to start with let's build this computational graph!\n", + "\n", + "![Comp Graph 1](https://raw.githubusercontent.com/iArunava/TensorFlow-NoteBooks/master/assets/comp_graph_1.jpg)" + ] + }, + { + "metadata": { + "id": "FyVz0GNqgreZ", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 51 + }, + "outputId": "3d7e2ec9-9dda-47ef-ae3f-3f96e1e4bd7b" + }, + "cell_type": "code", + "source": [ + "# Let's define the graph\n", + "comp_graph_1 = tf.multiply(tf.add(78, 19), 79)\n", + "\n", + "# Alternatively\n", + "comp_graph_1_alt = (tf.constant(78) + tf.constant(19)) * tf.constant(79)\n", + "\n", + "# Let's execute using session\n", + "sess = tf.Session()\n", + "print ('Comp Graph 1 : ', sess.run(comp_graph_1))\n", + "print ('Comp Graph 1 Alt: ', sess.run(comp_graph_1_alt))\n", + "sess.close()" + ], + "execution_count": 5, + "outputs": [ + { + "output_type": "stream", + "text": [ + "Comp Graph 1 : 7663\n", + "Comp Graph 1 Alt: 7663\n" + ], + "name": "stdout" + } + ] + }, + { + "metadata": { + "id": "SVMMtuFYhaQB", + "colab_type": "text" + }, + "cell_type": "markdown", + "source": [ + "Let's define a sligtly more involved graph!\n", + "\n", + "![alt text](https://raw.githubusercontent.com/iArunava/TensorFlow-NoteBooks/master/assets/comp_graph_2.jpg)" + ] + }, + { + "metadata": { + "id": "4856BTvRhiBb", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 68 + }, + "outputId": "78bbe94b-efe5-4882-ed3e-da5967968227" + }, + "cell_type": "code", + "source": [ + "# Let build the graph\n", + "# We need to cast cause the tensors operated on should be of the same type\n", + "comp_graph_part_1 = tf.cast(tf.subtract(tf.add(7, 8), tf.add(9, 10)), \n", + " dtype=tf.float32)\n", + "comp_graph_part_2 = tf.divide(tf.cast(tf.multiply(7, 10), dtype=tf.float32), tf.constant(19.5))\n", + "comp_graph_complete = tf.maximum(comp_graph_part_1, comp_graph_part_2)\n", + "\n", + "# Let's execute\n", + "sess = tf.Session()\n", + "part1_res, part2_res, total_res = sess.run([comp_graph_part_1, comp_graph_part_2, comp_graph_complete])\n", + "print ('Complete Result: ', total_res)\n", + "print ('Part 1 Result: ', part1_res)\n", + "print ('Part 2 Result: ', part2_res)\n", + "sess.close()" + ], + "execution_count": 6, + "outputs": [ + { + "output_type": "stream", + "text": [ + "Complete Result: 3.5897436\n", + "Part 1 Result: -4.0\n", + "Part 2 Result: 3.5897436\n" + ], + "name": "stdout" + } + ] + }, + { + "metadata": { + "id": "B-_ZDtEbj4N0", + "colab_type": "text" + }, + "cell_type": "markdown", + "source": [ + "Cool! Let's go! Build another graph and execute it with sessions.
\n", + "\n", + "But this time, it's all you!\n", + "\n", + "Build this graph and execute it with `session`!\n", + "\n", + "![alt text](https://raw.githubusercontent.com/iArunava/TensorFlow-NoteBooks/master/assets/comp_graph_3.jpg)\n", + "\n", + "_Remember that `tensors` operated on should be of the same type!_
\n", + "_Search up errors and other help you need on Google_" + ] + }, + { + "metadata": { + "id": "-uHNe1BolJY0", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 68 + }, + "outputId": "f252712a-ae41-41c2-b157-8d99c98b1379" + }, + "cell_type": "code", + "source": [ + "t1=tf.constant([9, 10])\n", + "t2=tf.constant([7, 8.65],dtype=tf.float32)\n", + "part_1 = tf.cast(tf.multiply(tf.cast(t1,dtype=tf.float32),t2), \n", + " dtype=tf.float32)\n", + "t3=tf.constant(5.6,dtype=tf.float32)\n", + "part_2 = tf.divide(part_1,t3)\n", + "t4=tf.constant([7.65, 9],dtype=tf.float32)\n", + "t5=tf.constant([13.5, 7.18],dtype=tf.float32)\n", + "part_3=tf.add(t4,t5)\n", + "ans=tf.minimum(part_2,part_3)\n", + "sess = tf.Session()\n", + "print ('Left subtree : ', sess.run(part_2))\n", + "print ('Right subtree : ', sess.run(part_3))\n", + "print ('Answer : ', sess.run(ans))\n", + "sess.close()" + ], + "execution_count": 7, + "outputs": [ + { + "output_type": "stream", + "text": [ + "Left subtree : [11.25 15.446429]\n", + "Right subtree : [21.15 16.18]\n", + "Answer : [11.25 15.446429]\n" + ], + "name": "stdout" + } + ] + }, + { + "metadata": { + "id": "qmap38WelREN", + "colab_type": "text" + }, + "cell_type": "markdown", + "source": [ + "Let's do another!
\n", + "It's fun! Isn't it?!\n", + "\n", + "Build and execute this one!\n", + "\n", + "![alt text](https://raw.githubusercontent.com/iArunava/TensorFlow-NoteBooks/master/assets/comp_graph_4.jpg)" + ] + }, + { + "metadata": { + "id": "0ZhYwAlLmEvB", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 153 + }, + "outputId": "8ff98964-a419-4bb8-cd3d-e66b48a10db0" + }, + "cell_type": "code", + "source": [ + "t1 = tf.constant([[1.2, 3.4], [7.5, 8.6]], dtype = tf.float32)\n", + "t2 = tf.constant([[7.0, 9.0], [8.0, 6.0]], dtype = tf.float32)\n", + "t3 = tf.constant([[2.79, 3.81, 5.6], [7.3, 5.67, 8.9]], dtype = tf.float32)\n", + "t4 = tf.constant([[2.6, 18.1], [7.86, 9.81], [9.36,10.91]], dtype = tf.float32)\n", + "\n", + "left = tf.multiply(tf.cast(tf.reduce_mean(t1, axis = 1), dtype = tf.float32), t2)\n", + "right = tf.reduce_sum(tf.multiply(tf.cast(tf.matrix_transpose(t4), dtype = tf.float32 ), t3))\n", + "ans = tf.math.add(right,left)\n", + "\n", + "sess = tf.Session()\n", + "print ('Left subtree Result:\\n', sess.run(left))\n", + "print ('Right subtree Result:\\n', sess.run(right))\n", + "print ('Complete Result:\\n', sess.run(ans))\n", + "sess.close()" + ], + "execution_count": 8, + "outputs": [ + { + "output_type": "stream", + "text": [ + "Left subtree Result:\n", + " [[16.100002 72.450005]\n", + " [18.400002 48.300003]]\n", + "Right subtree Result:\n", + " 374.4683\n", + "Complete Result:\n", + " [[390.5683 446.9183]\n", + " [392.8683 422.7683]]\n" + ], + "name": "stdout" + } + ] + }, + { + "metadata": { + "id": "BnB0b6qCmGmg", + "colab_type": "text" + }, + "cell_type": "markdown", + "source": [ + "And a final one, before we move on to the next part!\n", + "\n", + "![alt text](https://raw.githubusercontent.com/iArunava/TensorFlow-NoteBooks/master/assets/comp_graph_5.jpg)" + ] + }, + { + "metadata": { + "id": "GQWyCvsQmMcL", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 85 + }, + "outputId": "c9fa65c6-05ab-4579-fbc5-28f1d9fb0687" + }, + "cell_type": "code", + "source": [ + "t1 = tf.constant([[7.36, 8.91, 10.41], [5.31, 9.38, 7.99]] , dtype = tf.float32)\n", + "t2 = tf.constant([[7.99, 10.36], [5.36, 7.98], [8.91, 5.67]] , dtype = tf.float32)\n", + "t3 = tf.constant([[1.0, 5.6, 6.1, 8.0], [0, 0, 7.98, 9.0], [0, 0, 7.6, 7], [0, 0, 0, 8.98]] , dtype = tf.float32)\n", + "\n", + "left = tf.divide(tf.add(tf.reduce_sum(t1 * tf.transpose(t2)), 7.0),19.6)\n", + "ans = tf.divide(left,t3)\n", + "\n", + "sess = tf.Session()\n", + "print ('Result: ', sess.run(ans))\n", + "sess.close()" + ], + "execution_count": 9, + "outputs": [ + { + "output_type": "stream", + "text": [ + "Result: [[19.463488 3.475623 3.1907358 2.432936 ]\n", + " [ inf inf 2.4390335 2.1626098]\n", + " [ inf inf 2.5609853 2.7804983]\n", + " [ inf inf inf 2.1674263]]\n" + ], + "name": "stdout" + } + ] + }, + { + "metadata": { + "id": "12NC7XTPsJw7", + "colab_type": "text" + }, + "cell_type": "markdown", + "source": [ + "# Linear Regression\n", + "\n", + "Okay, now we will create a dummy dataset and perform linear regression on this dataset!\n", + "\n", + "\n", + "To get you in the habit of looking up for the documentation, I am not providing what some of the following functions does, Google them up!" + ] + }, + { + "metadata": { + "id": "hW31RZkjtNwI", + "colab_type": "code", + "colab": {} + }, + "cell_type": "code", + "source": [ + "# Create the dataset\n", + "X = np.linspace(-30.0, 300.0, 300)\n", + "Y = 2 * np.linspace(-30.0, 250.0, 300) + np.random.randn(*X.shape)\n", + "\n", + "# Normalize the dataset\n", + "X = X / np.max(X)\n", + "Y = Y / np.max(Y)\n", + "\n", + "# Divide it into train and test\n", + "train_X = X[:250]\n", + "train_Y = Y[:250]\n", + "\n", + "test_X = X[250:]\n", + "test_Y = Y[250:]" + ], + "execution_count": 0, + "outputs": [] + }, + { + "metadata": { + "id": "LQKy6U33y4lt", + "colab_type": "code", + "colab": {} + }, + "cell_type": "code", + "source": [ + "# Let's define the hyperparameters\n", + "learning_rate = 0.00001\n", + "n_epochs = 60\n", + "interval = 20" + ], + "execution_count": 0, + "outputs": [] + }, + { + "metadata": { + "id": "1h1-D8K1uT48", + "colab_type": "code", + "outputId": "6461cb09-b1d8-4074-9d51-3e1590628e07", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 350 + } + }, + "cell_type": "code", + "source": [ + "# let's viz the first 10 datapoints of the dataset\n", + "plt.plot(train_X[:10], train_Y[:10], 'g')\n", + "plt.show()" + ], + "execution_count": 12, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\nC5HmuB6kFjpLAAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [] + } + } + ] + }, + { + "metadata": { + "id": "jrsUps0nu8vj", + "colab_type": "text" + }, + "cell_type": "markdown", + "source": [ + "** Question **
\n", + "Why did I created a session to plot the graph?
\n", + "[Ans]" + ] + }, + { + "metadata": { + "id": "P3-iuxE4sjAf", + "colab_type": "code", + "colab": {} + }, + "cell_type": "code", + "source": [ + "# Let's define the placeholders\n", + "\n", + "# Placeholders?\n", + "# The input to the model changes on iteration\n", + "# So we cannot have a constant in the input as we did before\n", + "# And thus we need placeholders which we can change on each \n", + "# iteration of the training\n", + "\n", + "x = tf.placeholder(tf.float32, name='x')\n", + "y = tf.placeholder(tf.float32, name='y')" + ], + "execution_count": 0, + "outputs": [] + }, + { + "metadata": { + "id": "8hPRkaoxvRyV", + "colab_type": "code", + "colab": {} + }, + "cell_type": "code", + "source": [ + "# Let's define the linear regression model\n", + "\n", + "# tf.Variable?\n", + "# We define the model parameters as tf.Variables\n", + "# as they get updated throghout the training.\n", + "# And variables denotes something which changes overtime.\n", + "\n", + "W = tf.Variable(np.random.random_sample(), name='weight_1')\n", + "b = tf.Variable(np.random.random_sample(), name='bias_1')\n", + "\n", + "pred_y = (W*x) + b" + ], + "execution_count": 0, + "outputs": [] + }, + { + "metadata": { + "id": "cSw1P8bkv96r", + "colab_type": "code", + "colab": {} + }, + "cell_type": "code", + "source": [ + "# Let's define the loss function\n", + "# We are going to use the mean squared loss\n", + "loss = tf.reduce_mean(tf.square(y - pred_y))" + ], + "execution_count": 0, + "outputs": [] + }, + { + "metadata": { + "id": "5G4uQqjsygNj", + "colab_type": "code", + "colab": {} + }, + "cell_type": "code", + "source": [ + "# Let's define the optimizer\n", + "# And specify the which value (i.e. loss) it has to minimize\n", + "optimizer = tf.train.GradientDescentOptimizer(learning_rate=learning_rate).minimize(loss)" + ], + "execution_count": 0, + "outputs": [] + }, + { + "metadata": { + "id": "ttI7ZT-ozAm1", + "colab_type": "code", + "outputId": "70283fc2-72ab-4bc6-ec13-b39fb20dd95a", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 432 + } + }, + "cell_type": "code", + "source": [ + "# So the graph is now built\n", + "# Now let's execute the graph using session\n", + "# i.e. lets train the model\n", + "\n", + "# What it is to train a model?\n", + "# To update the paramters in the graph (i.e. tf.Variables)\n", + "# So that the loss is minimized\n", + "\n", + "# Okay let's start!\n", + "with tf.Session() as sess:\n", + " # We need to initialize the variables in our graph\n", + " sess.run(tf.global_variables_initializer())\n", + " \n", + " for epoch in range(n_epochs):\n", + " _, curr_loss = sess.run([optimizer, loss], feed_dict={x:train_X, y:train_Y})\n", + " \n", + " if epoch % interval == 0:\n", + " print ('Loss after epoch', epoch, ' is ', curr_loss)\n", + " \n", + " print ('Now testing the model in the test set')\n", + " final_preds, final_loss = sess.run([pred_y, loss], feed_dict={x:test_X, y:test_Y})\n", + " \n", + " \n", + " print ('The final loss is: ', final_loss)\n", + " \n", + " # Plotting the final predictions against the true predictions\n", + " plt.plot(test_X, test_Y, 'g', label='True Function')\n", + " plt.plot(test_X, final_preds, 'r', label='Predicted Function')\n", + " plt.legend()\n", + " plt.show()" + ], + "execution_count": 20, + "outputs": [ + { + "output_type": "stream", + "text": [ + "Loss after epoch 0 is 0.46643233\n", + "Loss after epoch 20 is 0.4660203\n", + "Loss after epoch 40 is 0.46560854\n", + "Now testing the model in the test set\n", + "The final loss is: 0.31859702\n" + ], + "name": "stdout" + }, + { + "output_type": "display_data", + "data": { + "image/png": "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\nsGABAKCwsBDPPPOM6wKYiIhokOs2hNPT07F582YUFRVBLpcjLS0N8+bNQ0REBObPn++KNhIREbml\nbkM4ISHhqt77GxERMTjeI0xERDRASMVuABER0VDFECYiIhIJQ5iIiEgkDGEiIiKRMISJiIhEwhAm\nIiISCUOYiIhIJAxhIiIikTCEiYiIRMIQJiIiEglDmIiISCQMYSIiIpEwhImIiETCECYiIhIJQ5iI\niEgkDGEiIiKRMISJiIhEwhAmIiISCUOYiIhIJAxhIiIikTCEiYiIRMIQJiIiEglDmIiISCQMYSIi\nIpEwhImIiETCECYiIhIJQ5iIiEgkDGEiIiKRXFUIZ2RkICUlBTt27Oiw7e9//zsWL16MpUuXYsOG\nDRAEoc8bSURE5I66DWGTyYSNGzciKSmpw7aGhgbs3bsXO3fuxIcffojs7GycOnWqXxpKRETkbroN\nYaVSidTUVOh0ug7bvLy8sG3bNigUCjQ0NMBgMECr1fZLQ4mIiNyNvNsd5HLI5V3v9u677+Kvf/0r\nli9fjsjIyC73DQjwhlwuu7ZW9jGtVi3q47uCu9fI+gY3d68PcP8aWV/f6DaEr8YDDzyA5cuX4+c/\n/zkmT56MyZMnd7pvdbWpLx6yx7RaNfT6elHb0N/cvUbWN7i5e32A+9fI+np2Tmd6dXd0TU0NTpw4\nAQDw9PREcnIyTp482ZtTEhERDRm9CmGLxYKnn34aRqMRAPD9998jNja2TxpGRETk7rq9HJ2eno7N\nmzejqKgIcrkcaWlpmDdvHiIiIjB//nysXr0ay5cvh1wux8iRI3HDDTe4ot1ERESDXrchnJCQgO3b\nt3e6fdGiRVi0aFGfNoqIiGgo4IxZREREImEIExERiYQhTEREJBKGMBERkUgYwkRERCJhCBMREYmE\nIUxERCQShjAREZFIGMJEREQiYQgTERGJhCFMREQkEoYwERGRSBjCREREImEIExERiYQhTEREJBKG\nMBERkUgYwkRERCJhCBMREYmEIUxERCQShjAREZFIGMJEREQiYQgTERGJhCFMREQkEoYwERGRSBjC\nREREImEIExERiYQhTEREJBKGMBERkUiuKoQzMjKQkpKCHTt2dNh27NgxLF68GEuXLsUzzzwDm83W\n540kIiJyR92GsMlkwsaNG5GUlOR0+wsvvIA33ngDH374IYxGI7766qs+byQREZE76jaElUolUlNT\nodPpnG7fs2cPQkJCAAAajQbV1dV920IiIiI31W0Iy+VyeHp6drpdpVIBAMrLy3H48GHMnj2771pH\nRETkxuR9cZLKyko89NBDWL9+PQICArrcNyDAG3K5rC8etse0WrWoj+8K7l4j6xvc3L0+wP1rZH19\no9chbDAY8POf/xxr1qzBzJkzu92/utrU24fsFa1WDb2+XtQ29Dd3r5H1DW7uXh/g/jWyvp6d05le\nv0Vp06ZNWLFiBZKTk3t7KiIioiGl255weno6Nm/ejKKiIsjlcqSlpWHevHmIiIjAzJkz8dFHHyEv\nLw+7d+8GACxcuBBLlizp94YTERENdt2GcEJCArZv397p9vT09D5tEBER0VDBGbOIiIhEwhAmIiIS\nCUOYiIhIJAxhIiIikTCEiYiIRMIQJiIiEglDmIiISCQMYSIiIpEwhImIiETCECYiIhIJQ5iIiEgk\nDGEiIiKRMISJiIhEwhAmIiISCUOYiIhIJAxhIiIikTCEiYiIRMIQJiIiEglDmIiISCQMYSIiIpEw\nhImIiETCECYiIhIJQ5iIiEgkDGEiIiKRMISJiIhEwhAmIiISCUOYiIhIJAxhIiIikVxVCGdkZCAl\nJQU7duzosK2pqQlr167FokWL+rxxRERE7qzbEDaZTNi4cSOSkpKcbn/llVcwevToPm8YERGRu+s2\nhJVKJVJTU6HT6Zxuf/zxx5GSktLnDSMiInJ33YawXC6Hp6dnp9tVKlWfNoiIiGiokLv6AQMCvCGX\ny1z9sO1otWpRH98V3L1G1je4uXt9gPvXyPr6hstDuLra5OqHbEerVUOvrxe1Df3N3WtkfYObu9cH\nuH+NrK9n53SGb1EiIiISSbc94fT0dGzevBlFRUWQy+VIS0vDvHnzEBERgfnz5+Oxxx5DaWkpcnJy\n8LOf/QyLFy/Grbfe6oq2ExERDWrdhnBCQgK2b9/e6fY33nijTxtEREQ0VPByNBERkUgYwkRERCJh\nCBMREYmEIUxERCQShjAREZFIGMJEREQiYQgTERGJhCFMREQkEoYwERGRSBjCREREImEIExERiYQh\nTEREJBKGMBERkUgYwkRERCJhCBMREYmEIUxERCQShjAREZFIGMJEREQiYQgTERGJhCFMREQkEoYw\nERGRSBjCREREImEIExERiYQhTEREJBKGMBERkUgYwkRERCJhCBMREYmEIUxERCSSqwrhjIwMpKSk\n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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [] + } + } + ] + }, + { + "metadata": { + "id": "jgmH3wwt1src", + "colab_type": "text" + }, + "cell_type": "markdown", + "source": [ + "Okay, so we are doing good!
\n", + "\n", + "Now, let me just put everything here into one function so that you can tweak the hyperparameters easily!\n", + "\n", + "Or better, do it yourself!" + ] + }, + { + "metadata": { + "id": "OZ5TY7B_4E_v", + "colab_type": "code", + "colab": {} + }, + "cell_type": "code", + "source": [ + "def linear_regression(learning_rate=0.000005, n_epochs=100, interval=50):\n", + " x = tf.placeholder(tf.float32, name='x')\n", + " y = tf.placeholder(tf.float32, name='y')\n", + " W = tf.Variable(np.random.random_sample(), name='weight_1')\n", + " b = tf.Variable(np.random.random_sample(), name='bias_1')\n", + "\n", + " pred_y = (W*x) + b \n", + " loss = tf.reduce_mean(tf.square(y - pred_y))\n", + " optimizer = tf.train.GradientDescentOptimizer(learning_rate=learning_rate).minimize(loss)\n", + " with tf.Session() as sess:\n", + " # We need to initialize the variables in our graph\n", + " sess.run(tf.global_variables_initializer())\n", + "\n", + " for epoch in range(n_epochs):\n", + " _, curr_loss = sess.run([optimizer, loss], feed_dict={x:train_X, y:train_Y})\n", + "\n", + " if epoch % interval == 0:\n", + " print ('Loss after epoch', epoch, ' is ', curr_loss)\n", + "\n", + " print ('Now testing the model in the test set')\n", + " final_preds, final_loss = sess.run([pred_y, loss], feed_dict={x:test_X, y:test_Y})\n", + "\n", + " print ('The final loss is: ', final_loss)\n", + "\n", + " # Plotting the final predictions against the true predictions\n", + " plt.plot(test_X, test_Y, 'g', label='Actual Function')\n", + " plt.plot(test_X, final_preds, 'r', label='Predicted Function')\n", + " plt.legend()\n", + " plt.show()" + ], + "execution_count": 0, + "outputs": [] + }, + { + "metadata": { + "id": "A6MaclhK4rc6", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 551 + }, + "outputId": "05cc0e45-c52d-4c89-b776-7cb2680e5467" + }, + "cell_type": "code", + "source": [ + "# Okay! Now let's tweak!\n", + "linear_regression(learning_rate=0.000034, n_epochs=500)" + ], + "execution_count": 31, + "outputs": [ + { + "output_type": "stream", + "text": [ + "Loss after epoch 0 is 0.5518539\n", + "Loss after epoch 50 is 0.54790604\n", + "Loss after epoch 100 is 0.5439884\n", + "Loss after epoch 150 is 0.54010105\n", + "Loss after epoch 200 is 0.53624314\n", + "Loss after epoch 250 is 0.5324149\n", + "Loss after epoch 300 is 0.528616\n", + "Loss after epoch 350 is 0.52484626\n", + "Loss after epoch 400 is 0.52110535\n", + "Loss after epoch 450 is 0.51739323\n", + "Now testing the model in the test set\n", + "The final loss is: 0.16818291\n" + ], + "name": "stdout" + }, + { + "output_type": "display_data", + "data": { + "image/png": "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\naVjz8+rfhbc3zugYys8aVTlbuJ7Zw56erViYiEjb02gIJycnM3/+fFJTU7HZbKxatYpJkyYRFxfH\n1KlTmT17NjNmzMBms5GUlMTkyZNbY9zSFHZ7tdnD6dVu8l/zEp0G28NBwThjYrAPHVZ7YlPV7OGT\naQ+LiIjWE3YbVe3h9HSCC49SWN/sYaezzqcbFgvOiMjKew1XHbnWDtm2MHvYbd/DSqqv/XP3GlVf\n0/ZZF91NoK0zDCy5R2seuVZvD1edh807VuNp1WcPG97eOKOiKR9xVkXI1nWJjtrDIiKtTiFsJru9\nYvZw1Uo59SxPZyktrXcXzsCgivbw4CGuUK05ezgGI1TtYRGRtkgh3FKKi09u9nAj7WF77z6/3nu4\n+h2comNwREWDv3+t52r2sIhI+6AQPlWNtYerZg+f0B6usQsvL5xRMdiHn1ljSTpHZbg6o2Nwdo5S\ne1hExM0phKur3h5uIGQbbQ9HR2M/Y3BlqJ54iU4MRliY2sMiItKBQriyPcz2PLx37KoZslVt45Np\nDyf1qTxardYejo7BGRNbb3tYRESkLu0/hA0Dy7Hc+ic2VX0c+7U9HHjiLupqD584e1jtYRERaWbt\nOoRt27YSdNlFWHNz632MMyCwYvbwoME4o2Pw6ZFAQWBY5fWwMTiiYytmD1utrThyERGRdh7CTv8A\n7APOwPDt5DpirXH0Gh2N4V/zAmmfiABKNXNYRETagPYdwgndyVv+gdnDEBERaRL1YEVEREyiEBYR\nETGJQlhERMQkCmERERGTKIRFRERMohAWERExiUJYRETEJAphERERkyiERURETKIQFhERMYlCWERE\nxCQKYREREZMohEVEREyiEBYRETGJQlhERMQkCmERERGTKIRFRERMohAWERExiUJYRETEJAphERER\nkyiERURETKIQFhERMYlCWERExCQKYREREZMohEVEREyiEBYRETGJQlhERMQkCmERERGTKIRFRERM\nohAWERExyUmFcEpKClOmTGHJkiW1tn333XdMmzaN6dOnc8899+B0Opt9kCIiIu6o0RAuLi7m4Ycf\nZuTIkXVuf+CBB3j++ed5++23KSoq4uuvv272QYqIiLijRkPYy8uLRYsWERkZWef2FStWEBUVBUBo\naCi5ubnNO0IRERE31WgI22w2fHx86t3u7+8PQGZmJt9++y3jx49vvtGJiIi4MVtz7CQnJ4ebbrqJ\nefPmERIS0uBjQ0J8sdk8muNlmywiIsDU128N7l6j6mvf3L0+cP8aVV/zOO0QLiws5IYbbuBPf/oT\nY8aMafTxubnFp/uSpyUiIoCsrAJTx9DS3L1G1de+uXt94P41qr6m7bMup32J0hNPPMHVV1/NuHHj\nTndXIiIiHUqjR8LJycnMnz+f1NRUbDYbq1atYtKkScTFxTFmzBjef/99Dhw4wPLlywG44IILuPzy\ny1t84CIiIu1doyHcv39/3njjjXq3JycnN+uAREREOgrdMUtERMQkCmERERGTKIRFRERMohAWEREx\niUJYRETEJAphERERkyiERURETKIQFhERMYlCWERExCQKYREREZMohEVEREyiEBYRETGJQlhERMQk\nCmERERGTKIRFRERMohAWERExiUJYRETEJAphERERkyiERURETKIQFhERMYlCWERExCQKYREREZMo\nhEVEREyiEBYRETGJQlhERMQkCmERERGTKIRFRERMohAWERExiUJYRETEJAphERERkyiERURETKIQ\nFhERMYlCWERExCQKYREREZMohEVEREyiEBYRETGJQlhERMQkCmERERGTKIRFRERMohAWERExiUJY\nRETEJCcVwikpKUyZMoUlS5bU2nb8+HHmzJnD7373u2YfnIiIiDtrNISLi4t5+OGHGTlyZJ3bn3zy\nSfr06dPsAxMREXF3jYawl5cXixYtIjIyss7td9xxB1OmTGn2gYmIiLi7RkPYZrPh4+NT73Z/f/9m\nHZCIiEhHYWvtFwwJ8cVm82jtl60hIiLA1NdvDe5eo+pr39y9PnD/GlVf82j1EM7NLW7tl6whIiKA\nrKwCU8fQ0ty9RtXXvrl7feD+Naq+pu2zLrpESURExCSNHgknJyczf/58UlNTsdlsrFq1ikmTJhEX\nF8fUqVO5/fbbycjIYN++fVx11VVMmzaNCy+8sDXGLiIi0q41GsL9+/fnjTfeqHf7888/36wDEhER\n6SjUjhYRETGJQlhERMQkCmERERGTKIRFRERMohAWERExiUJYRETEJAphERERkyiERURETKIQFhER\nMYlCWERExCQKYREREZMohEVEREyiEBYRETGJQlhERMQkCmERERGTKIRFRERMohAWERExiUJYRETE\nJAphERERkyiERURETKIQFhERMYlCWERExCQKYREREZMohEVEREyiEBYRETGJQlhERMQkCmERERGT\n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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [] + } + } + ] + }, + { + "metadata": { + "id": "peoHmV2M40uU", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 721 + }, + "outputId": "ef37d81c-65e3-4760-91bf-16b9db755575" + }, + "cell_type": "code", + "source": [ + "linear_regression(learning_rate=0.0000006, n_epochs=1000)" + ], + "execution_count": 32, + "outputs": [ + { + "output_type": "stream", + "text": [ + "Loss after epoch 0 is 0.017615855\n", + "Loss after epoch 50 is 0.017614668\n", + "Loss after epoch 100 is 0.017613485\n", + "Loss after epoch 150 is 0.017612299\n", + "Loss after epoch 200 is 0.01761111\n", + "Loss after epoch 250 is 0.017609926\n", + "Loss after epoch 300 is 0.017608741\n", + "Loss after epoch 350 is 0.017607555\n", + "Loss after epoch 400 is 0.017606372\n", + "Loss after epoch 450 is 0.017605184\n", + "Loss after epoch 500 is 0.017604005\n", + "Loss after epoch 550 is 0.017602814\n", + "Loss after epoch 600 is 0.017601632\n", + "Loss after epoch 650 is 0.017600443\n", + "Loss after epoch 700 is 0.017599259\n", + "Loss after epoch 750 is 0.017598074\n", + "Loss after epoch 800 is 0.01759689\n", + "Loss after epoch 850 is 0.017595707\n", + "Loss after epoch 900 is 0.017594522\n", + "Loss after epoch 950 is 0.017593335\n", + "Now testing the model in the test set\n", + "The final loss is: 0.0072684507\n" + ], + "name": "stdout" + }, + { + "output_type": "display_data", + "data": { + "image/png": "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\nA04BpggxjbNeAAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [] + } + } + ] + }, + { + "metadata": { + "id": "KjY_KnlE5ClG", + "colab_type": "text" + }, + "cell_type": "markdown", + "source": [ + "## Drive the loss to a minimum." + ] + }, + { + "metadata": { + "id": "JKiHjGN15HPX", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 398 + }, + "outputId": "d787261a-914c-40b2-a0c9-e972369f5069" + }, + "cell_type": "code", + "source": [ + "linear_regression(learning_rate=0.000034, n_epochs=1000, interval=1000)" + ], + "execution_count": 47, + "outputs": [ + { + "output_type": "stream", + "text": [ + "Loss after epoch 0 is 0.16986255\n", + "Now testing the model in the test set\n", + "The final loss is: 0.001274912\n" + ], + "name": "stdout" + }, + { + "output_type": "display_data", + "data": { + "image/png": "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\nAAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [] + } + } + ] + } + ] +} \ No newline at end of file