From fef95e555383916c4f0a229311c59eb57d661858 Mon Sep 17 00:00:00 2001 From: Jaideep Prasad Date: Thu, 4 Oct 2018 23:40:41 +0530 Subject: [PATCH 1/3] Initial commit of tensorflow assn --- First_Date_with_TensorFlow.ipynb | 750 +++++++++++++++++++++++++++++++ 1 file changed, 750 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..926d9c3 --- /dev/null +++ b/First_Date_with_TensorFlow.ipynb @@ -0,0 +1,750 @@ +{ + "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": [ + "[View in Colaboratory](https://colab.research.google.com/github/jddeep/Assignment-4/blob/jddeep/First_Date_with_TensorFlow.ipynb)" + ] + }, + { + "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": "c439206c-e314-406a-c4c9-3588f45f3529" + }, + "cell_type": "code", + "source": [ + "# Let's print them out!\n", + "print (t1)\n", + "print (t2)\n", + "print (t3)" + ], + "execution_count": 4, + "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": "414c732a-6561-4a30-c28d-744740e384cd" + }, + "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": 5, + "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": "f5e3b19c-e5f3-4cff-c267-dfaf1ba77cbf" + }, + "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": 6, + "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": "bbc7d2dd-3732-49b6-d95e-f57a3e6f1fe1" + }, + "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": 7, + "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": 34 + }, + "outputId": "1636b735-17da-484f-ccb8-0833ac79e938" + }, + "cell_type": "code", + "source": [ + "# Build the graph\n", + "# YOUR CODE HERE\n", + "node_1=tf.constant([9, 10],dtype = tf.float32)\n", + "node_2=tf.constant([7, 8.65],dtype = tf.float32)\n", + "node_4=tf.constant([13.5, 7.18],dtype = tf.float32)\n", + "node_3=tf.constant([7.65, 9],dtype = tf.float32)\n", + "node_5=tf.constant(5.6,dtype = tf.float32)\n", + "\n", + "cmp_g1 = tf.multiply(node_1, node_2)\n", + "cmp_g2 = tf.divide(tf.cast(cmp_g1,dtype =tf.float32), node_5)\n", + "cmp_g3 = tf.add(node_3, node_4)\n", + "\n", + "cmp_g4 = tf.minimum(cmp_g2, cmp_g3)\n", + "\n", + "# Execute \n", + "# YOUR CODE HERE\n", + "sess = tf.Session()\n", + "print(sess.run(cmp_g4))\n", + "sess.close()" + ], + "execution_count": 10, + "outputs": [ + { + "output_type": "stream", + "text": [ + "[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": 1135 + }, + "outputId": "2a9b1244-fdf6-4e4b-c85d-1bf2c14934a3" + }, + "cell_type": "code", + "source": [ + "# Build the graph\n", + "# YOUR CODE HERE\n", + "node_1 = tf.constant([[1.2, 3.4], [7.5, 8.6]], dtype = tf.float32)\n", + "node_2 = tf.constant([[7, 9], [8, 6]], dtype = tf.float32)\n", + "node_3 = tf.constant([[2.79, 3.81, 5.6], [7.3, 5.67, 8.9]], dtype = tf.float32)\n", + "node_4 = tf.constant([[2.6, 18.1], [7.86, 9.21], [9.36, 10.91]], dtype = tf.float32)\n", + "\n", + "cmp_g1 = tf.reduce_mean(node_1, axis = 1)\n", + "cmp_g2 = tf.multiply(tf.cast(cmp_g1,dtype=tf.float32), node_2)\n", + "cmp_g3 = tf.matrix_transpose(node_4)\n", + "cmp_g4 = tf.multiply(tf.cast(cmp_g3, dtype=tf.float32), node_3)\n", + "\n", + "cmp_g5 = tf.add(cmp_g2, cmp_g4)\n", + "\n", + "# Execute \n", + "# YOUR CODE HERE\n", + "with tf.Session() as sess:\n", + " print(sess.run(cmp_g5))" + ], + "execution_count": 11, + "outputs": [ + { + "output_type": "error", + "ename": "ValueError", + "evalue": "ignored", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mInvalidArgumentError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/ops.py\u001b[0m in \u001b[0;36m_create_c_op\u001b[0;34m(graph, node_def, inputs, control_inputs)\u001b[0m\n\u001b[1;32m 1625\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1626\u001b[0;31m \u001b[0mc_op\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mc_api\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mTF_FinishOperation\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mop_desc\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1627\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0merrors\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mInvalidArgumentError\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mInvalidArgumentError\u001b[0m: Dimensions must be equal, but are 2 and 3 for 'Add_5' (op: 'Add') with input shapes: [2,2], [2,3].", + "\nDuring handling of the above exception, another exception occurred:\n", + "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 9\u001b[0m \u001b[0mcmp_g4\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmultiply\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcast\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcmp_g3\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdtype\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfloat32\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnode_3\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 10\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 11\u001b[0;31m \u001b[0mcmp_g5\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0madd\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcmp_g2\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcmp_g4\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 12\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 13\u001b[0m \u001b[0;31m# Execute\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/gen_math_ops.py\u001b[0m in \u001b[0;36madd\u001b[0;34m(x, y, name)\u001b[0m\n\u001b[1;32m 299\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0m_ctx\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0m_ctx\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_eager_context\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mis_eager\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 300\u001b[0m _, _, _op = _op_def_lib._apply_op_helper(\n\u001b[0;32m--> 301\u001b[0;31m \"Add\", x=x, y=y, name=name)\n\u001b[0m\u001b[1;32m 302\u001b[0m \u001b[0m_result\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_op\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0moutputs\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 303\u001b[0m \u001b[0m_inputs_flat\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_op\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0minputs\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/op_def_library.py\u001b[0m in \u001b[0;36m_apply_op_helper\u001b[0;34m(self, op_type_name, name, **keywords)\u001b[0m\n\u001b[1;32m 785\u001b[0m op = g.create_op(op_type_name, inputs, output_types, name=scope,\n\u001b[1;32m 786\u001b[0m \u001b[0minput_types\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0minput_types\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mattrs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mattr_protos\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 787\u001b[0;31m op_def=op_def)\n\u001b[0m\u001b[1;32m 788\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0moutput_structure\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mop_def\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mis_stateful\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mop\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 789\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.6/dist-packages/tensorflow/python/util/deprecation.py\u001b[0m in \u001b[0;36mnew_func\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 486\u001b[0m \u001b[0;34m'in a future version'\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mdate\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m \u001b[0;32melse\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;34m'after %s'\u001b[0m \u001b[0;34m%\u001b[0m \u001b[0mdate\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 487\u001b[0m instructions)\n\u001b[0;32m--> 488\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 489\u001b[0m return tf_decorator.make_decorator(func, new_func, 'deprecated',\n\u001b[1;32m 490\u001b[0m _add_deprecated_arg_notice_to_docstring(\n", + "\u001b[0;32m/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/ops.py\u001b[0m in \u001b[0;36mcreate_op\u001b[0;34m(***failed resolving arguments***)\u001b[0m\n\u001b[1;32m 3270\u001b[0m \u001b[0minput_types\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0minput_types\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3271\u001b[0m \u001b[0moriginal_op\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_default_original_op\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 3272\u001b[0;31m op_def=op_def)\n\u001b[0m\u001b[1;32m 3273\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_create_op_helper\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mret\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcompute_device\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mcompute_device\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3274\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mret\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/ops.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, node_def, g, inputs, output_types, control_inputs, input_types, original_op, op_def)\u001b[0m\n\u001b[1;32m 1788\u001b[0m op_def, inputs, node_def.attr)\n\u001b[1;32m 1789\u001b[0m self._c_op = _create_c_op(self._graph, node_def, grouped_inputs,\n\u001b[0;32m-> 1790\u001b[0;31m control_input_ops)\n\u001b[0m\u001b[1;32m 1791\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1792\u001b[0m \u001b[0;31m# Initialize self._outputs.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/ops.py\u001b[0m in \u001b[0;36m_create_c_op\u001b[0;34m(graph, node_def, inputs, control_inputs)\u001b[0m\n\u001b[1;32m 1627\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0merrors\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mInvalidArgumentError\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1628\u001b[0m \u001b[0;31m# Convert to ValueError for backwards compatibility.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1629\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0me\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1630\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1631\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mc_op\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mValueError\u001b[0m: Dimensions must be equal, but are 2 and 3 for 'Add_5' (op: 'Add') with input shapes: [2,2], [2,3]." + ] + } + ] + }, + { + "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", + "\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 d1ed37f03d1bb83b75cc658d4b2a6c731cbccbe7 Mon Sep 17 00:00:00 2001 From: Jaideep Prasad Date: Fri, 5 Oct 2018 10:11:39 +0530 Subject: [PATCH 2/3] Next Commit completed all comp graphs --- First_Date_with_TensorFlow.ipynb | 165 +++++++++++++++++++++++-------- 1 file changed, 122 insertions(+), 43 deletions(-) diff --git a/First_Date_with_TensorFlow.ipynb b/First_Date_with_TensorFlow.ipynb index 926d9c3..fa56bbf 100644 --- a/First_Date_with_TensorFlow.ipynb +++ b/First_Date_with_TensorFlow.ipynb @@ -3,7 +3,7 @@ "nbformat_minor": 0, "metadata": { "colab": { - "name": "First_Date_with_TensorFlow.ipynb", + "name": "Copy of First_Date_with_TensorFlow.ipynb", "version": "0.3.2", "provenance": [], "include_colab_link": true @@ -103,7 +103,7 @@ "base_uri": "https://localhost:8080/", "height": 68 }, - "outputId": "c439206c-e314-406a-c4c9-3588f45f3529" + "outputId": "7db3d7e7-5ca9-4f81-a7ae-ee98952b3f01" }, "cell_type": "code", "source": [ @@ -147,7 +147,7 @@ "base_uri": "https://localhost:8080/", "height": 204 }, - "outputId": "414c732a-6561-4a30-c28d-744740e384cd" + "outputId": "fa53297a-bf4a-489e-f5ca-d070effb2536" }, "cell_type": "code", "source": [ @@ -228,7 +228,7 @@ "base_uri": "https://localhost:8080/", "height": 51 }, - "outputId": "f5e3b19c-e5f3-4cff-c267-dfaf1ba77cbf" + "outputId": "48813734-9384-4473-da97-9bac1ceb66c3" }, "cell_type": "code", "source": [ @@ -276,7 +276,7 @@ "base_uri": "https://localhost:8080/", "height": 68 }, - "outputId": "bbc7d2dd-3732-49b6-d95e-f57a3e6f1fe1" + "outputId": "f7c37ddf-7d01-4a55-bcc9-762e3d4b2676" }, "cell_type": "code", "source": [ @@ -335,7 +335,7 @@ "base_uri": "https://localhost:8080/", "height": 34 }, - "outputId": "1636b735-17da-484f-ccb8-0833ac79e938" + "outputId": "cc2d695b-bc2c-4601-9cc5-7dbce5349484" }, "cell_type": "code", "source": [ @@ -359,7 +359,7 @@ "print(sess.run(cmp_g4))\n", "sess.close()" ], - "execution_count": 10, + "execution_count": 8, "outputs": [ { "output_type": "stream", @@ -391,9 +391,9 @@ "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", - "height": 1135 + "height": 51 }, - "outputId": "2a9b1244-fdf6-4e4b-c85d-1bf2c14934a3" + "outputId": "f547ecbb-745f-4553-fb4e-c820f7105f29" }, "cell_type": "code", "source": [ @@ -408,36 +408,25 @@ "cmp_g2 = tf.multiply(tf.cast(cmp_g1,dtype=tf.float32), node_2)\n", "cmp_g3 = tf.matrix_transpose(node_4)\n", "cmp_g4 = tf.multiply(tf.cast(cmp_g3, dtype=tf.float32), node_3)\n", + "cmp_g5 = tf.reduce_sum(cmp_g4)\n", + "cmp_g6 = tf.math.add(cmp_g5, cmp_g4)\n", + "\n", "\n", - "cmp_g5 = tf.add(cmp_g2, cmp_g4)\n", "\n", "# Execute \n", "# YOUR CODE HERE\n", "with tf.Session() as sess:\n", - " print(sess.run(cmp_g5))" + " print(sess.run(cmp_g6))" ], - "execution_count": 11, + "execution_count": 9, "outputs": [ { - "output_type": "error", - "ename": "ValueError", - "evalue": "ignored", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mInvalidArgumentError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/ops.py\u001b[0m in \u001b[0;36m_create_c_op\u001b[0;34m(graph, node_def, inputs, control_inputs)\u001b[0m\n\u001b[1;32m 1625\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1626\u001b[0;31m \u001b[0mc_op\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mc_api\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mTF_FinishOperation\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mop_desc\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1627\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0merrors\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mInvalidArgumentError\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mInvalidArgumentError\u001b[0m: Dimensions must be equal, but are 2 and 3 for 'Add_5' (op: 'Add') with input shapes: [2,2], [2,3].", - "\nDuring handling of the above exception, another exception occurred:\n", - "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 9\u001b[0m \u001b[0mcmp_g4\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmultiply\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcast\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcmp_g3\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdtype\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfloat32\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnode_3\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 10\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 11\u001b[0;31m \u001b[0mcmp_g5\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0madd\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcmp_g2\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcmp_g4\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 12\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 13\u001b[0m \u001b[0;31m# Execute\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/gen_math_ops.py\u001b[0m in \u001b[0;36madd\u001b[0;34m(x, y, name)\u001b[0m\n\u001b[1;32m 299\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0m_ctx\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0m_ctx\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_eager_context\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mis_eager\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 300\u001b[0m _, _, _op = _op_def_lib._apply_op_helper(\n\u001b[0;32m--> 301\u001b[0;31m \"Add\", x=x, y=y, name=name)\n\u001b[0m\u001b[1;32m 302\u001b[0m \u001b[0m_result\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_op\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0moutputs\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 303\u001b[0m \u001b[0m_inputs_flat\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_op\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0minputs\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/op_def_library.py\u001b[0m in \u001b[0;36m_apply_op_helper\u001b[0;34m(self, op_type_name, name, **keywords)\u001b[0m\n\u001b[1;32m 785\u001b[0m op = g.create_op(op_type_name, inputs, output_types, name=scope,\n\u001b[1;32m 786\u001b[0m \u001b[0minput_types\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0minput_types\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mattrs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mattr_protos\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 787\u001b[0;31m op_def=op_def)\n\u001b[0m\u001b[1;32m 788\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0moutput_structure\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mop_def\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mis_stateful\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mop\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 789\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/usr/local/lib/python3.6/dist-packages/tensorflow/python/util/deprecation.py\u001b[0m in \u001b[0;36mnew_func\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 486\u001b[0m \u001b[0;34m'in a future version'\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mdate\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m \u001b[0;32melse\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;34m'after %s'\u001b[0m \u001b[0;34m%\u001b[0m \u001b[0mdate\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 487\u001b[0m instructions)\n\u001b[0;32m--> 488\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 489\u001b[0m return tf_decorator.make_decorator(func, new_func, 'deprecated',\n\u001b[1;32m 490\u001b[0m _add_deprecated_arg_notice_to_docstring(\n", - "\u001b[0;32m/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/ops.py\u001b[0m in \u001b[0;36mcreate_op\u001b[0;34m(***failed resolving arguments***)\u001b[0m\n\u001b[1;32m 3270\u001b[0m \u001b[0minput_types\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0minput_types\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3271\u001b[0m \u001b[0moriginal_op\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_default_original_op\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 3272\u001b[0;31m op_def=op_def)\n\u001b[0m\u001b[1;32m 3273\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_create_op_helper\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mret\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcompute_device\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mcompute_device\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3274\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mret\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/ops.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, node_def, g, inputs, output_types, control_inputs, input_types, original_op, op_def)\u001b[0m\n\u001b[1;32m 1788\u001b[0m op_def, inputs, node_def.attr)\n\u001b[1;32m 1789\u001b[0m self._c_op = _create_c_op(self._graph, node_def, grouped_inputs,\n\u001b[0;32m-> 1790\u001b[0;31m control_input_ops)\n\u001b[0m\u001b[1;32m 1791\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1792\u001b[0m \u001b[0;31m# Initialize self._outputs.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/ops.py\u001b[0m in \u001b[0;36m_create_c_op\u001b[0;34m(graph, node_def, inputs, control_inputs)\u001b[0m\n\u001b[1;32m 1627\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0merrors\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mInvalidArgumentError\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1628\u001b[0m \u001b[0;31m# Convert to ValueError for backwards compatibility.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1629\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0me\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1630\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1631\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mc_op\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mValueError\u001b[0m: Dimensions must be equal, but are 2 and 3 for 'Add_5' (op: 'Add') with input shapes: [2,2], [2,3]." - ] + "output_type": "stream", + "text": [ + "[[378.32028 401.01288 423.48227]\n", + " [503.1963 423.287 468.16528]]\n" + ], + "name": "stdout" } ] }, @@ -457,19 +446,47 @@ "metadata": { "id": "GQWyCvsQmMcL", "colab_type": "code", - "colab": {} + "colab": { + "base_uri": "https://localhost:8080/", + "height": 85 + }, + "outputId": "a0400607-9ff4-4517-a1a6-5e417d43c1e5" }, "cell_type": "code", "source": [ "# Build the graph\n", "# YOUR CODE HERE\n", - "\n", + "node_1 = tf.constant([[7.36, 8.91, 10.41], [5.31, 9.38, 7.99]], dtype = tf.float32)\n", + "node_2 = tf.constant([[7.99, 10.36], [5.36, 7.98], [8.91, 5.67]], dtype = tf.float32)\n", + "node_3 = tf.constant([[1, 5.6, 6.1, 8], [0, 0, 7.98, 9], [0, 0, 7.6, 7], [0, 0, 0, 8.98]], dtype = tf.float32)\n", + "node_4 = tf.constant(19.6, dtype = tf.float32)\n", + "node_5 = tf.constant(7.0, dtype = tf.float32)\n", + "\n", + "cmp_g1 = tf.transpose(node_2)\n", + "cmp_g2 = tf.multiply(node_1, tf.cast(cmp_g1, dtype=tf.float32))\n", + "cmp_g3 = tf.reduce_sum(tf.cast(cmp_g2, dtype = tf.float32))\n", + "cmp_g4 = tf.add(node_5, tf.cast(cmp_g3, dtype = tf.float32))\n", + "cmp_g5 = tf.divide(node_4, tf.cast(cmp_g4, dtype= tf.float32))\n", + "cmp_g6 = tf.divide(tf.cast(cmp_g5, dtype = tf.float32), node_3)\n", "\n", "# Execute \n", - "# YOUR CODE HERE" + "# YOUR CODE HERE\n", + "with tf.Session() as sess:\n", + " print(sess.run(cmp_g6))" ], - "execution_count": 0, - "outputs": [] + "execution_count": 11, + "outputs": [ + { + "output_type": "stream", + "text": [ + "[[0.05137825 0.00917469 0.00842266 0.00642228]\n", + " [ inf inf 0.00643838 0.00570869]\n", + " [ inf inf 0.0067603 0.00733975]\n", + " [ inf inf inf 0.00572141]]\n" + ], + "name": "stdout" + } + ] }, { "metadata": { @@ -528,7 +545,11 @@ "metadata": { "id": "1h1-D8K1uT48", "colab_type": "code", - "colab": {} + "colab": { + "base_uri": "https://localhost:8080/", + "height": 347 + }, + "outputId": "43588e85-2565-4ad1-8217-31ac0f370c5f" }, "cell_type": "code", "source": [ @@ -536,8 +557,21 @@ "plt.plot(train_X[:10], train_Y[:10], 'g')\n", "plt.show()" ], - "execution_count": 0, - "outputs": [] + "execution_count": 14, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\nq6++YtOmTUyePJlZs2bleoyhs7nmcqs5rlixggMHDrB06VKys7OZMWMGq1evpmbNmrz88sts2LCB\nRx991KTktuN2ZwiQnp5OmzZtGD16NFOmTCEiIoL+/fubEdvm3O4cMzIyWLhwIe+//75JSW3bnbwe\n4XphBwUFMWzYMHx8fIo7rk263RleuHAh12Os2i9WWWS3cdu2bTOSk5Nz/t66dWsjIyPD6NChQ85t\na9asMWbPnm1COvuyatUqY9iwYUZaWpphGIaRmJhodOvWLef+L7/80liwYIFZ8ezC/87QMAzj8ccf\nz/nzunXrct4jk7z97xx/++034/HHHzcCAwONwMBAo2nTpsbLL79sckrbd7PXY2ZmpjF48GBj1apV\nJiazH/87w6LsF4f4ytcPP/zA119/DcCRI0eoVq0abm5u1KtXj507d+Y8pl27dmbGtHknTpwgPDyc\nxYsXU6pUKQA8PT25dOlSzr8s9+3bR+3atc2MadNuNkMAX19ffv31VwAOHDhA3bp1zYpoF242xxYt\nWvD999+zatUqVq1aRZUqVZg/f77JSW1bXq/H5cuX07p1awIDA01MZx9uNsOi7BeHuMrXhQsXmDRp\nElevXiUjI4PXXnuN+++/nz/++IOpU6eSnZ1NixYtmDx5stlRbdq8efP49ttvqV69es5tH330EZs3\nb+aDDz7A3d2dGjVq8NZbb+V6n0f+v7xmeOXKFV599VXS0tKoXLkys2fPpmzZsiYmtW15zfG/PwfQ\nqVMnfeUrH3nNsVOnTtSoUSPn/2NfX199QDIPec0wISGhSPrFIUpbRESkJHCI5XEREZGSQKUtIiJi\nJ1TaIiIidkKlLSIiYidU2iIiInZCpS0iImInVNoiIiJ2QqUtIiJiJ/4fj9G9SaxszVIAAAAASUVO\nRK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": { + "tags": [] + } + } + ] }, { "metadata": { @@ -548,7 +582,7 @@ "source": [ "** Question **
\n", "Why did I created a session to plot the graph?
\n", - "[Ans]" + "[Ans] " ] }, { @@ -630,7 +664,11 @@ "metadata": { "id": "ttI7ZT-ozAm1", "colab_type": "code", - "colab": {} + "colab": { + "base_uri": "https://localhost:8080/", + "height": 721 + }, + "outputId": "89ec4625-f95a-410a-c237-02415dd16dfb" }, "cell_type": "code", "source": [ @@ -664,8 +702,49 @@ " plt.legend()\n", " plt.show()" ], - "execution_count": 0, - "outputs": [] + "execution_count": 19, + "outputs": [ + { + "output_type": "stream", + "text": [ + "Loss after epoch 0 is 48276.336\n", + "Loss after epoch 50 is 30.788372\n", + "Loss after epoch 100 is 30.777712\n", + "Loss after epoch 150 is 30.767174\n", + "Loss after epoch 200 is 30.756615\n", + "Loss after epoch 250 is 30.746136\n", + "Loss after epoch 300 is 30.735617\n", + "Loss after epoch 350 is 30.725077\n", + "Loss after epoch 400 is 30.714561\n", + "Loss after epoch 450 is 30.704063\n", + "Loss after epoch 500 is 30.693548\n", + "Loss after epoch 550 is 30.683027\n", + "Loss after epoch 600 is 30.67253\n", + "Loss after epoch 650 is 30.662031\n", + "Loss after epoch 700 is 30.651543\n", + "Loss after epoch 750 is 30.641098\n", + "Loss after epoch 800 is 30.630608\n", + "Loss after epoch 850 is 30.620127\n", + "Loss after epoch 900 is 30.609652\n", + "Loss after epoch 950 is 30.599173\n", + "Now testing the model in the test set\n", + "The final loss is: 35.77099\n" + ], + "name": "stdout" + }, + { + "output_type": "display_data", + "data": { + "image/png": "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\nQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": { + "tags": [] + } + } + ] }, { "metadata": { From 7a0723480def41070a5a955286ae49951cabb68b Mon Sep 17 00:00:00 2001 From: Jaideep Prasad Date: Fri, 11 Jan 2019 16:36:48 +0530 Subject: [PATCH 3/3] Completed Assignment_4 --- First_Date_with_Tensorflow.ipynb | 1044 ++++++++++++++++++++++++++++++ 1 file changed, 1044 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..51070f4 --- /dev/null +++ b/First_Date_with_Tensorflow.ipynb @@ -0,0 +1,1044 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "name": "First_Date_with_Tensorflow.ipynb", + "version": "0.3.2", + "provenance": [], + "collapsed_sections": [], + "include_colab_link": true + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "accelerator": "GPU" + }, + "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", + "outputId": "85842e77-6292-4485-d0cd-bcc4f6b069c3", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 68 + } + }, + "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", + "outputId": "721b2901-6434-490e-af7d-82f5debf45be", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 204 + } + }, + "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", + "outputId": "5f602b60-17bc-49c5-d2cd-49aee425870c", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 51 + } + }, + "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", + "outputId": "7fc618a4-1b75-4cb4-f4c5-139f61bbcc31", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 68 + } + }, + "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", + "outputId": "771aa2e7-07d4-414c-827f-b95db773a14a", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + } + }, + "cell_type": "code", + "source": [ + "# Build the graph\n", + "# YOUR CODE HERE\n", + "node_1=tf.constant([9, 10],dtype = tf.float32)\n", + "node_2=tf.constant([7, 8.65],dtype = tf.float32)\n", + "node_4=tf.constant([13.5, 7.18],dtype = tf.float32)\n", + "node_3=tf.constant([7.65, 9],dtype = tf.float32)\n", + "node_5=tf.constant(5.6,dtype = tf.float32)\n", + "\n", + "cmp_g1 = tf.multiply(node_1, node_2)\n", + "cmp_g2 = tf.divide(tf.cast(cmp_g1,dtype =tf.float32), node_5)\n", + "cmp_g3 = tf.add(node_3, node_4)\n", + "\n", + "cmp_g4 = tf.minimum(cmp_g2, cmp_g3)\n", + "\n", + "# Execute \n", + "# YOUR CODE HERE\n", + "sess = tf.Session()\n", + "print(sess.run(cmp_g4))\n", + "sess.close()" + ], + "execution_count": 7, + "outputs": [ + { + "output_type": "stream", + "text": [ + "[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", + "outputId": "633d43b9-7a3a-4e84-888c-2a39405d2d2e", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 51 + } + }, + "cell_type": "code", + "source": [ + "# Build the graph\n", + "# YOUR CODE HERE\n", + "node_1 = tf.constant([[1.2, 3.4], [7.5, 8.6]], dtype = tf.float32)\n", + "node_2 = tf.constant([[7, 9], [8, 6]], dtype = tf.float32)\n", + "node_3 = tf.constant([[2.79, 3.81, 5.6], [7.3, 5.67, 8.9]], dtype = tf.float32)\n", + "node_4 = tf.constant([[2.6, 18.1], [7.86, 9.21], [9.36, 10.91]], dtype = tf.float32)\n", + "\n", + "cmp_g1 = tf.reduce_mean(node_1, axis = 1)\n", + "cmp_g2 = tf.multiply(tf.cast(cmp_g1,dtype=tf.float32), node_2)\n", + "cmp_g3 = tf.matrix_transpose(node_4)\n", + "cmp_g4 = tf.multiply(tf.cast(cmp_g3, dtype=tf.float32), node_3)\n", + "cmp_g5 = tf.reduce_sum(cmp_g4)\n", + "cmp_g6 = tf.math.add(cmp_g5, cmp_g4)\n", + "\n", + "\n", + "\n", + "# Execute \n", + "# YOUR CODE HERE\n", + "with tf.Session() as sess:\n", + " print(sess.run(cmp_g6))" + ], + "execution_count": 8, + "outputs": [ + { + "output_type": "stream", + "text": [ + "[[378.32028 401.01288 423.48227]\n", + " [503.1963 423.287 468.16528]]\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", + "outputId": "23487e94-00b3-404d-ce7f-3ebf140b80c5", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 85 + } + }, + "cell_type": "code", + "source": [ + "# Build the graph\n", + "# YOUR CODE HERE\n", + "node0 = tf.constant([[7.36 , 8.91 , 10.41],\n", + " [5.31 , 9.38 , 7.99]] , dtype = tf.float32)\n", + "node1 = tf.constant([[7.99 , 10.36],\n", + " [5.36 , 7.98],\n", + " [8.91 , 5.67]] , dtype = tf.float32)\n", + "node2 = tf.constant([[1.0 , 5.6 , 6.1 , 8.0],\n", + " [0 , 0 , 7.98 , 9.0],\n", + " [0 , 0 , 7.6 , 7],\n", + " [0 , 0 , 0 , 8.98]] , dtype = tf.float32,)\n", + "\n", + "cmp_graph1 = tf.transpose(node1)\n", + "cmp_graph2 = (node0 * cmp_graph1)\n", + "cmp_graph3 = tf.reduce_sum(cmp_graph2)\n", + "cmp_graph4 = tf.add(cmp_graph3 , 7.0)\n", + "cmp_graph5 = tf.divide(cmp_graph4 , 19.6)\n", + "cmp_graph_Final = tf.divide(cmp_graph5 , node2)\n", + "\n", + "# cmp_graph_direct = (((tf.reduce_sum(node0 * tf.transpose(node1))) + 7.0) / 19.6/node2)\n", + "# Execute \n", + "# YOUR CODE HERE\n", + "with tf.Session() as sess:\n", + " print(sess.run(cmp_graph_Final))" + ], + "execution_count": 9, + "outputs": [ + { + "output_type": "stream", + "text": [ + "[[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", + "# 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", + "outputId": "5cb069cd-5563-4488-8fbb-7f2c11aac35f", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 347 + } + }, + "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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\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] Because Tensorflow uses dataflow graphs and sessions are required to run parts of the graph. " + ] + }, + { + "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", + "outputId": "ffe8ee80-ef9f-457e-e2da-f24bb68a9a2b", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 721 + } + }, + "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": 17, + "outputs": [ + { + "output_type": "stream", + "text": [ + "Loss after epoch 0 is 48247.67\n", + "Loss after epoch 50 is 31.50641\n", + "Loss after epoch 100 is 31.495468\n", + "Loss after epoch 150 is 31.484732\n", + "Loss after epoch 200 is 31.473972\n", + "Loss after epoch 250 is 31.4632\n", + "Loss after epoch 300 is 31.452477\n", + "Loss after epoch 350 is 31.441725\n", + "Loss after epoch 400 is 31.431017\n", + "Loss after epoch 450 is 31.42024\n", + "Loss after epoch 500 is 31.409525\n", + "Loss after epoch 550 is 31.398817\n", + "Loss after epoch 600 is 31.388079\n", + "Loss after epoch 650 is 31.377348\n", + "Loss after epoch 700 is 31.366657\n", + "Loss after epoch 750 is 31.355919\n", + "Loss after epoch 800 is 31.345217\n", + "Loss after epoch 850 is 31.334494\n", + "Loss after epoch 900 is 31.3238\n", + "Loss after epoch 950 is 31.313137\n", + "Now testing the model in the test set\n", + "The final loss is: 33.696278\n" + ], + "name": "stdout" + }, + { + "output_type": "display_data", + "data": { + "image/png": "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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": { + "base_uri": "https://localhost:8080/", + "height": 415 + }, + "outputId": "a46bb8ed-12fd-4c61-faf8-ee86986d3c0e" + }, + "cell_type": "code", + "source": [ + "def linear_regression(learning_rate=0.000005, n_epochs=100, interval=50):\n", + " # YOUR CODE HERE\n", + " x = tf.placeholder(tf.float32 , name = 'x')\n", + " y = tf.placeholder(tf.float32 , name = 'y')\n", + " W = tf.Variable(0.0 , name = 'Weight1')\n", + " b = tf.Variable(0.0 , name = 'bias1')\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", + " sess.run(tf.global_variables_initializer())\n", + " for epoch in range(n_epochs):\n", + " _, curr_loss = sess.run([optimizer, loss], feed_dict={x:train_X, y:train_Y})\n", + " if epoch % interval == 0:\n", + " print ('Loss after epoch', epoch, ' is ', curr_loss)\n", + " print ('Model is getting tested in 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", + " plt.plot(test_X[:10], test_Y[:10], 'g', label='Real Function')\n", + " plt.plot(test_X[:10], final_preds[:10], 'r', label='Predicted Function')\n", + " plt.legend()\n", + " plt.show()\n", + "pass\n", + "linear_regression()" + ], + "execution_count": 18, + "outputs": [ + { + "output_type": "stream", + "text": [ + "Loss after epoch 0 is 48247.67\n", + "Loss after epoch 50 is 31.50641\n", + "Model is getting tested in test set\n", + "The final loss is: 33.914543\n" + ], + "name": "stdout" + }, + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": { + "tags": [] + } + } + ] + }, + { + "metadata": { + "id": "A6MaclhK4rc6", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 551 + }, + "outputId": "7cfde22f-cad0-4cda-cb86-f1ca30ed3ba1" + }, + "cell_type": "code", + "source": [ + "# Okay! Now let's tweak!\n", + "linear_regression(learning_rate=0.000034, n_epochs=500)" + ], + "execution_count": 19, + "outputs": [ + { + "output_type": "stream", + "text": [ + "Loss after epoch 0 is 48247.67\n", + "Loss after epoch 50 is 31.443874\n", + "Loss after epoch 100 is 31.370922\n", + "Loss after epoch 150 is 31.298157\n", + "Loss after epoch 200 is 31.225557\n", + "Loss after epoch 250 is 31.15309\n", + "Loss after epoch 300 is 31.080816\n", + "Loss after epoch 350 is 31.00875\n", + "Loss after epoch 400 is 30.936825\n", + "Loss after epoch 450 is 30.865091\n", + "Model is getting tested in test set\n", + "The final loss is: 33.12104\n" + ], + "name": "stdout" + }, + { + "output_type": "display_data", + "data": { + "image/png": "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\nTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": { + "tags": [] + } + } + ] + }, + { + "metadata": { + "id": "peoHmV2M40uU", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 721 + }, + "outputId": "7d7671df-522f-4ab1-efd2-a09d1a924831" + }, + "cell_type": "code", + "source": [ + "linear_regression(learning_rate=0.0000006, n_epochs=1000)" + ], + "execution_count": 20, + "outputs": [ + { + "output_type": "stream", + "text": [ + "Loss after epoch 0 is 48247.67\n", + "Loss after epoch 50 is 5541.588\n", + "Loss after epoch 100 is 661.1985\n", + "Loss after epoch 150 is 103.47264\n", + "Loss after epoch 200 is 39.735233\n", + "Loss after epoch 250 is 32.45033\n", + "Loss after epoch 300 is 31.616653\n", + "Loss after epoch 350 is 31.52025\n", + "Loss after epoch 400 is 31.508057\n", + "Loss after epoch 450 is 31.505552\n", + "Loss after epoch 500 is 31.504099\n", + "Loss after epoch 550 is 31.502827\n", + "Loss after epoch 600 is 31.501513\n", + "Loss after epoch 650 is 31.500235\n", + "Loss after epoch 700 is 31.498936\n", + "Loss after epoch 750 is 31.497662\n", + "Loss after epoch 800 is 31.496347\n", + "Loss after epoch 850 is 31.495039\n", + "Loss after epoch 900 is 31.493757\n", + "Loss after epoch 950 is 31.49246\n", + "Model is getting tested in test set\n", + "The final loss is: 33.9151\n" + ], + "name": "stdout" + }, + { + "output_type": "display_data", + "data": { + "image/png": "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\nG0OcZAAAAABJRU5ErkJggg==\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": 1061 + }, + "outputId": "a17a7a88-319c-400a-f230-92e9b0bc2595" + }, + "cell_type": "code", + "source": [ + "# YOUR CODE HERE\n", + "linear_regression(learning_rate=0.0000556, n_epochs=200000, interval=5000)" + ], + "execution_count": 21, + "outputs": [ + { + "output_type": "stream", + "text": [ + "Loss after epoch 0 is 48247.67\n", + "Loss after epoch 5000 is 21.622578\n", + "Loss after epoch 10000 is 14.953834\n", + "Loss after epoch 15000 is 10.459201\n", + "Loss after epoch 20000 is 7.429837\n", + "Loss after epoch 25000 is 5.388071\n", + "Loss after epoch 30000 is 4.0119495\n", + "Loss after epoch 35000 is 3.0844557\n", + "Loss after epoch 40000 is 2.4593337\n", + "Loss after epoch 45000 is 2.038002\n", + "Loss after epoch 50000 is 1.7540323\n", + "Loss after epoch 55000 is 1.56264\n", + "Loss after epoch 60000 is 1.4336627\n", + "Loss after epoch 65000 is 1.3466885\n", + "Loss after epoch 70000 is 1.2881243\n", + "Loss after epoch 75000 is 1.2486323\n", + "Loss after epoch 80000 is 1.2220032\n", + "Loss after epoch 85000 is 1.204051\n", + "Loss after epoch 90000 is 1.1919901\n", + "Loss after epoch 95000 is 1.1838403\n", + "Loss after epoch 100000 is 1.1783147\n", + "Loss after epoch 105000 is 1.1746414\n", + "Loss after epoch 110000 is 1.1721481\n", + "Loss after epoch 115000 is 1.1704655\n", + "Loss after epoch 120000 is 1.1693094\n", + "Loss after epoch 125000 is 1.1685537\n", + "Loss after epoch 130000 is 1.1680433\n", + "Loss after epoch 135000 is 1.1677003\n", + "Loss after epoch 140000 is 1.1674234\n", + "Loss after epoch 145000 is 1.1673067\n", + "Loss after epoch 150000 is 1.1672081\n", + "Loss after epoch 155000 is 1.167126\n", + "Loss after epoch 160000 is 1.1670605\n", + "Loss after epoch 165000 is 1.1670088\n", + "Loss after epoch 170000 is 1.1670058\n", + "Loss after epoch 175000 is 1.1670058\n", + "Loss after epoch 180000 is 1.1670058\n", + "Loss after epoch 185000 is 1.1670058\n", + "Loss after epoch 190000 is 1.1670058\n", + "Loss after epoch 195000 is 1.1670058\n", + "Model is getting tested in test set\n", + "The final loss is: 1.0397785\n" + ], + "name": "stdout" + }, + { + "output_type": "display_data", + "data": { + "image/png": "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\nm4iIyEb8P38jUnJnymbVAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": { + "tags": [] + } + } + ] + }, + { + "metadata": { + "id": "W2Lbn2LHgRyp", + "colab_type": "code", + "colab": {} + }, + "cell_type": "code", + "source": [ + "" + ], + "execution_count": 0, + "outputs": [] + } + ] +} \ No newline at end of file