{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "\n", " \n", " \n", " \n", " \n", "
3. Variables
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "So far all the tensors that we created were all constants where you can do operations that generate new tensors but you can never change the value of any tensor after creating it. To start doing \"stateful\" programming which keeps and updates values (or state) or tesnors you need to wrap your tensors in an instance of `ft.Varbiable()`.\n", "\n", "As usaul before we start, let's import TensorFlow and start an interactive session." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Python Version: 3.5.2\n", "TensorFlow Version: 1.7.0\n" ] } ], "source": [ "import tensorflow as tf\n", "import sys\n", "\n", "print(\"Python Version:\",sys.version.split(\" \")[0])\n", "print(\"TensorFlow Version:\",tf.VERSION)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Creating Variables\n", "\n", "Let start a new interactive session and create some variables. To create a variables, your this function:\n", "\n", "`tf.Variable(initial_value=None, trainable=True, collections=None, validate_shape=True, caching_device=None, name=None, variable_def=None, dtype=None, expected_shape=None, import_scope=None, constraint=None)`" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sess = tf.InteractiveSession()\n", "\n", "a = tf.Variable(tf.ones((2,2)), name=\"a\")\n", "a" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The first parameter that we passed to when creating an instanse of `tf.Variable()` is `initial_value`. This can accept a tensor that has values or a tensor initilizer method. We will discuss some of these later in this tutorial.\n", "\n", "You can also use `ft.get_variable()` function to create a variable.\n", "\n", "`tf.get_variable(name, shape=None, dtype=None, initializer=None, regularizer=None, trainable=True, collections=None, caching_device=None, partitioner=None, validate_shape=True, use_resource=None, custom_getter=None, constraint=None)`" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "b = tf.get_variable(\"b\", [2,2])\n", "b" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This creates a variable named `b` with shape `(2,2)`.\n", "\n", "To initlize the value of your variable, you could use one of the many inilization method available in TensorFlow.\n", "\n", "`tf.zeros_initializer`" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "c = tf.get_variable(\"c\", [2,2], dtype=tf.float32, initializer=tf.zeros_initializer)\n", "c" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Similar to `tf.zeros_initializer` there is `tf.ones_initializer` which initializes your tensor with ones.\n", "\n", "There are also `tf.random_normal_initializer` and `random_uniform_initializer` that inialize your variables with a normal or uniform distribution. For truncated normal distribution, you can use `tf.truncated_normal_initializer` which will limit your normal distribution to 2 standard diviations from the mean.\n", "\n", "You can also initialize your variables with a constant." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d = tf.get_variable(\"d\", initializer=tf.constant([1,2,3]))\n", "d" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Initialize Variables\n", "\n", "Before you can use any of your variables, you should first run an operation that initializes them. To initialize all the variabes that that created already, you can use `tf.global_variables_initializer` to create the operation this you have to run that operation using your session." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "init_op = tf.global_variables_initializer()\n", "sess.run(init_op)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now that you initlized your variables, you can start executing this and getting their values. To do that, you can just call `eval()` method of the variable." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([1, 2, 3], dtype=int32)" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d.eval()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Manually Initializing Variables\n", "\n", "Sometimes specially in an interactive environment, you would want to initialize some extra variables after you initialized all your variables using `tf.global_variables_initializer`. To do that, you can run one variable initializer which is an operation that can be retrieved for a single variable from the `initializer`." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "e = tf.get_variable(\"e\", initializer=tf.constant([2,2,2]))\n", "sess.run(e.initializer)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If you try to redecalre your variable with the same name, you will get an error message because TensorFlow does't know if you want to resue the same variable or you want a new one.\n", "\n", "To avoid that clarify that you mean to reuse the same variable and you just to reinitize the variable using " ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "ename": "ValueError", "evalue": "Trying to share variable e/e, but specified dtype float32 and found dtype int32_ref.", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\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 1\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mtf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvariable_scope\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mreuse\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mAUTO_REUSE\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname_or_scope\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"e\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0me\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_variable\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"e\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minitializer\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mconstant\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m2\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[0m", "\u001b[0;32m/usr/local/lib/python3.5/dist-packages/tensorflow/python/ops/variable_scope.py\u001b[0m in \u001b[0;36mget_variable\u001b[0;34m(name, shape, dtype, initializer, regularizer, trainable, collections, caching_device, partitioner, validate_shape, use_resource, custom_getter, constraint)\u001b[0m\n\u001b[1;32m 1295\u001b[0m \u001b[0mpartitioner\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mpartitioner\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalidate_shape\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mvalidate_shape\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1296\u001b[0m \u001b[0muse_resource\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0muse_resource\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcustom_getter\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mcustom_getter\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1297\u001b[0;31m constraint=constraint)\n\u001b[0m\u001b[1;32m 1298\u001b[0m get_variable_or_local_docstring = (\n\u001b[1;32m 1299\u001b[0m \"\"\"%s\n", "\u001b[0;32m/usr/local/lib/python3.5/dist-packages/tensorflow/python/ops/variable_scope.py\u001b[0m in \u001b[0;36mget_variable\u001b[0;34m(self, var_store, name, shape, dtype, initializer, regularizer, reuse, trainable, collections, caching_device, partitioner, validate_shape, use_resource, custom_getter, constraint)\u001b[0m\n\u001b[1;32m 1091\u001b[0m \u001b[0mpartitioner\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mpartitioner\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalidate_shape\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mvalidate_shape\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1092\u001b[0m \u001b[0muse_resource\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0muse_resource\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcustom_getter\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mcustom_getter\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1093\u001b[0;31m constraint=constraint)\n\u001b[0m\u001b[1;32m 1094\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1095\u001b[0m def _get_partitioned_variable(self,\n", "\u001b[0;32m/usr/local/lib/python3.5/dist-packages/tensorflow/python/ops/variable_scope.py\u001b[0m in \u001b[0;36mget_variable\u001b[0;34m(self, name, shape, dtype, initializer, regularizer, reuse, trainable, collections, caching_device, partitioner, validate_shape, use_resource, custom_getter, constraint)\u001b[0m\n\u001b[1;32m 437\u001b[0m \u001b[0mcaching_device\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mcaching_device\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpartitioner\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mpartitioner\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 438\u001b[0m \u001b[0mvalidate_shape\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mvalidate_shape\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0muse_resource\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0muse_resource\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 439\u001b[0;31m constraint=constraint)\n\u001b[0m\u001b[1;32m 440\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 441\u001b[0m def _get_partitioned_variable(\n", "\u001b[0;32m/usr/local/lib/python3.5/dist-packages/tensorflow/python/ops/variable_scope.py\u001b[0m in \u001b[0;36m_true_getter\u001b[0;34m(name, shape, dtype, initializer, regularizer, reuse, trainable, collections, caching_device, partitioner, validate_shape, use_resource, constraint)\u001b[0m\n\u001b[1;32m 406\u001b[0m \u001b[0mtrainable\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtrainable\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcollections\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mcollections\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 407\u001b[0m \u001b[0mcaching_device\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mcaching_device\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalidate_shape\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mvalidate_shape\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 408\u001b[0;31m use_resource=use_resource, constraint=constraint)\n\u001b[0m\u001b[1;32m 409\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 410\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mcustom_getter\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/usr/local/lib/python3.5/dist-packages/tensorflow/python/ops/variable_scope.py\u001b[0m in \u001b[0;36m_get_single_variable\u001b[0;34m(self, name, shape, dtype, initializer, regularizer, partition_info, reuse, trainable, collections, caching_device, validate_shape, use_resource, constraint)\u001b[0m\n\u001b[1;32m 756\u001b[0m raise ValueError(\"Trying to share variable %s, but specified dtype %s\"\n\u001b[1;32m 757\u001b[0m \" and found dtype %s.\" % (name, dtype_str,\n\u001b[0;32m--> 758\u001b[0;31m found_type_str))\n\u001b[0m\u001b[1;32m 759\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mfound_var\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 760\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mValueError\u001b[0m: Trying to share variable e/e, but specified dtype float32 and found dtype int32_ref." ] } ], "source": [ "with tf.variable_scope(reuse=tf.AUTO_REUSE, name_or_scope=\"e\"):\n", " e = tf.get_variable(\"e\", initializer=tf.constant([2,2,2]))" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "e" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Assigning Value to Variables\n", "\n", "So far variables are not much different that any constant tensor. Variables get interesting once you can change their values. To do that you can use `tf.assign()` function or the `assign()` method of a variable. These are operation and should be run using a your session for them to perform their assignment." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([2, 3, 4], dtype=int32)" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sess.run(d.assign([2,3,4]))\n", "d.eval()" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([4, 5, 6], dtype=int32)" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sess.run(tf.assign_add(d, [2,2,2]))\n", "d.eval()" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([1, 2, 3], dtype=int32)" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sess.run(tf.assign_sub(d, [3,3,3]))\n", "d.eval()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Variable Scrope\n", "\n", "You can group variables in a few way in TensorFlow and one these methods is Variable Scope" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "with tf.name_scope(\"dense1\"):\n", " a = tf.get_variable(\"a\", (3,))\n" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "with tf.name_scope(\"dense1\"):\n", " b = tf.Variable(tf.ones((2,2)), name=\"b\")\n", "b" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "with tf.name_scope(\"dense1\"):\n", " c = tf.Variable(tf.ones((2,2)), name=\"c\")\n", " w = c+1\n", "w" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "ename": "ValueError", "evalue": "Variable dense1/d already exists, disallowed. Did you mean to set reuse=True or reuse=tf.AUTO_REUSE in VarScope? Originally defined at:\n\n File \"\", line 2, in \n d = tf.get_variable(\"d\", (3,))\n File \"/usr/local/lib/python3.5/dist-packages/IPython/core/interactiveshell.py\", line 2963, in run_code\n exec(code_obj, self.user_global_ns, self.user_ns)\n File \"/usr/local/lib/python3.5/dist-packages/IPython/core/interactiveshell.py\", line 2903, in run_ast_nodes\n if self.run_code(code, result):\n", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\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 1\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mtf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvariable_scope\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"dense1\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0md\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_variable\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"d\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;36m3\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[0m\u001b[1;32m 3\u001b[0m \u001b[0me\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0md\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mc\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/usr/local/lib/python3.5/dist-packages/tensorflow/python/ops/variable_scope.py\u001b[0m in \u001b[0;36mget_variable\u001b[0;34m(name, shape, dtype, initializer, regularizer, trainable, collections, caching_device, partitioner, validate_shape, use_resource, custom_getter, constraint)\u001b[0m\n\u001b[1;32m 1295\u001b[0m \u001b[0mpartitioner\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mpartitioner\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalidate_shape\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mvalidate_shape\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1296\u001b[0m \u001b[0muse_resource\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0muse_resource\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcustom_getter\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mcustom_getter\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1297\u001b[0;31m constraint=constraint)\n\u001b[0m\u001b[1;32m 1298\u001b[0m get_variable_or_local_docstring = (\n\u001b[1;32m 1299\u001b[0m \"\"\"%s\n", "\u001b[0;32m/usr/local/lib/python3.5/dist-packages/tensorflow/python/ops/variable_scope.py\u001b[0m in \u001b[0;36mget_variable\u001b[0;34m(self, var_store, name, shape, dtype, initializer, regularizer, reuse, trainable, collections, caching_device, partitioner, validate_shape, use_resource, custom_getter, constraint)\u001b[0m\n\u001b[1;32m 1091\u001b[0m \u001b[0mpartitioner\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mpartitioner\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalidate_shape\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mvalidate_shape\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1092\u001b[0m \u001b[0muse_resource\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0muse_resource\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcustom_getter\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mcustom_getter\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1093\u001b[0;31m constraint=constraint)\n\u001b[0m\u001b[1;32m 1094\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1095\u001b[0m def _get_partitioned_variable(self,\n", "\u001b[0;32m/usr/local/lib/python3.5/dist-packages/tensorflow/python/ops/variable_scope.py\u001b[0m in \u001b[0;36mget_variable\u001b[0;34m(self, name, shape, dtype, initializer, regularizer, reuse, trainable, collections, caching_device, partitioner, validate_shape, use_resource, custom_getter, constraint)\u001b[0m\n\u001b[1;32m 437\u001b[0m \u001b[0mcaching_device\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mcaching_device\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpartitioner\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mpartitioner\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 438\u001b[0m \u001b[0mvalidate_shape\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mvalidate_shape\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0muse_resource\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0muse_resource\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 439\u001b[0;31m constraint=constraint)\n\u001b[0m\u001b[1;32m 440\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 441\u001b[0m def _get_partitioned_variable(\n", "\u001b[0;32m/usr/local/lib/python3.5/dist-packages/tensorflow/python/ops/variable_scope.py\u001b[0m in \u001b[0;36m_true_getter\u001b[0;34m(name, shape, dtype, initializer, regularizer, reuse, trainable, collections, caching_device, partitioner, validate_shape, use_resource, constraint)\u001b[0m\n\u001b[1;32m 406\u001b[0m \u001b[0mtrainable\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtrainable\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcollections\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mcollections\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 407\u001b[0m \u001b[0mcaching_device\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mcaching_device\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalidate_shape\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mvalidate_shape\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 408\u001b[0;31m use_resource=use_resource, constraint=constraint)\n\u001b[0m\u001b[1;32m 409\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 410\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mcustom_getter\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/usr/local/lib/python3.5/dist-packages/tensorflow/python/ops/variable_scope.py\u001b[0m in \u001b[0;36m_get_single_variable\u001b[0;34m(self, name, shape, dtype, initializer, regularizer, partition_info, reuse, trainable, collections, caching_device, validate_shape, use_resource, constraint)\u001b[0m\n\u001b[1;32m 745\u001b[0m \u001b[0;34m\"reuse=tf.AUTO_REUSE in VarScope? \"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 746\u001b[0m \"Originally defined at:\\n\\n%s\" % (\n\u001b[0;32m--> 747\u001b[0;31m name, \"\".join(traceback.format_list(tb))))\n\u001b[0m\u001b[1;32m 748\u001b[0m \u001b[0mfound_var\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_vars\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 749\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mshape\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mis_compatible_with\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfound_var\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_shape\u001b[0m\u001b[0;34m(\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[0;31mValueError\u001b[0m: Variable dense1/d already exists, disallowed. Did you mean to set reuse=True or reuse=tf.AUTO_REUSE in VarScope? Originally defined at:\n\n File \"\", line 2, in \n d = tf.get_variable(\"d\", (3,))\n File \"/usr/local/lib/python3.5/dist-packages/IPython/core/interactiveshell.py\", line 2963, in run_code\n exec(code_obj, self.user_global_ns, self.user_ns)\n File \"/usr/local/lib/python3.5/dist-packages/IPython/core/interactiveshell.py\", line 2903, in run_ast_nodes\n if self.run_code(code, result):\n" ] } ], "source": [ "with tf.variable_scope(\"dense1\"):\n", " d = tf.get_variable(\"d\", (3,))\n", " e = d + c" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "with tf.variable_scope(\"dense1\", ):\n", " f = tf.get_variable(\"f\", (3,))\n", " g = tf.get_variable(\"g\", (3,))\n", " h = f + g\n", "h" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# The Match Behind It\n", "\n", "Since we are talking about variables we cannot escape the fact that we will use them in the next tutorial for creating a predective model. This means we will have to get a head start start with some basic concepts about calculus. Calculus is branch of math that studies change. It can study the change of a variable as it relates to another variable. So basically it studies the realtionship between two or more variables. There are two main studies in calculus:\n", "\n", "- Diffrentiation\n", "- Integration\n", "\n", "## Diffrentiation\n", "\n", "We will focus for now on diffrentiation because the we will use that to train neural network with an algorithm called \"Back Probagation\". Diffrentiation is the study of the rate of change or the slope.\n", "\n", "We will use numpy and matplotlib for illustration so let's import them" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Slope\n", "\n", "Slope is the mesure of change of a variable as another variables changes. In here we will see the change in $y$ as $x$ changes. The mathematical way of saying that is:\n", "\n", "$$\\frac{dy}{dx} = \\frac{\\Delta y}{\\Delta x}$$\n", "\n", "$\\Delta$ is the capital letter delta and it means the change of. So the change of $y$ as $x$ changes.\n", "\n", "- Slope is __positive__ if numbers are __increasing__.\n", "- Slope is __nagative__ if numbers are __decreasing__.\n", "- Slope is __zero__ if numbers are __not changing__.\n", "\n", "Let's look at three lines to show how slope works." ] }, { "cell_type": "code", "execution_count": 71, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "x = np.arange(5)\n", "fig = plt.figure(figsize=(12,3))\n", "axarr = fig.subplots(1,3)\n", "\n", "axarr[0].plot(x, x*2)\n", "axarr[0].set_title(\"Positive Slope\")\n", "axarr[1].plot(x, x*-2)\n", "axarr[1].set_title(\"Negative Slope\")\n", "axarr[2].plot(x, x*0 + 2)\n", "axarr[2].set_title(\"Zero Slope\")\n", "plt.show();" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Linear Diffrentiation\n", "\n", "Consider this situation where you are driving at a constant speed of 10 $km/h$.\n", "\n", "We can represent this in a mathematical way with a simple function that looks like this:\n", "\n", "$Distance = 10 \\times Time$\n", "\n", "Or to make it more abstract we can call $Distance$ $y$ because it will be represented on the Y axis and call $Time$ $x$ because it will be represented on the X axis. So our function for this relationship will look like this:\n", "\n", "$y = 10x$" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "speed = 10\n", "time = np.arange(0,9)\n", "distance = speed * time\n", "\n", "plt.xlabel(\"Time $Hours$\")\n", "plt.ylabel(\"Distance $km$\")\n", "plt.grid()\n", "plt.plot(time, distance);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "After 1 hour you have travelled 10 $km$ and after 4 hours would have travelled 40 $km$. This realtionship is called linear because it can be represented by a straight line. With linear relationships we can measure the slope using any two points $(x_1,y_1)$ and $(x_2,y_2)$. If we get these two points are 1 hour and 4 hours we get these two points $(1,10)$ and $(4,40)$. To measure the slope (represented by the letter $m$) now we use this function:\n", "\n", "$$m = \\frac{y_2 - y_1}{x_2 - x_1}$$\n", "\n", "If we substitute our points we can measure the slope.\n", "\n", "$$m = \\frac{40 - 10}{4 - 1} = \\frac{30}{3} = 10$$\n", "\n", "There is nothing interesting about this finding! We already knew the speed was 10 $km/h$. This is a linear function and most of calculus is more interested in non-linear functions. So let's see how does that work." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Polynomial Diffrentiation\n", "\n", "Consider a situation where you are not travelling at constant speed but perhapse your speed in increasing over time. So in the begenning you are starting at a low speed and over time your speed increases. We call this acceleration and it is measured in $m/s^2$ but for a unit that we can relate to I'll use $km/h^2$. Let's illustrate this and it would make more sense.\n", "\n", "We can represent this in a mathematical way with a simple function that looks like this:\n", "\n", "$Distance = Acceleration * Time^2$\n", "\n", "Again to abstract this function we can write it like this:\n", "\n", "$y = ax^2$" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "acceleration = 2\n", "time = np.arange(0,9)\n", "distance = acceleration * time**2\n", "\n", "plt.xlabel(\"Time $Hours$\")\n", "plt.ylabel(\"Distance $km$\")\n", "plt.grid()\n", "plt.plot(time, distance);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First, let's look at the distance over time." ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 0, 2, 8, 18, 32, 50, 72, 98, 128])" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "distance" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can notice that we travelled 2 $km$ in the first hour and 8 $km$ after two hours making the distance we travelled for the second hour 6 $km$. This means our speed is changing over time. To measure the slope for this, we will need to specify at what time do we want the speed because it is changing over time.\n", "\n", "To get the slope we derive another function that measure the slope of this function. This function is called __derevative__ and has the notation $f'$ or $\\frac{dy}{dx}$\n", "\n", "There is no standard mthematical way to come up with the the derevative function. It depends of the function type. Let's look a polipomial function and see how to get the derevative of that function:\n", "\n", "$f(x) = ax^n$\n", "\n", "to detive a polinomial function we use this rule:\n", "\n", "$f'(x)=n \\times ax^{n-1}$\n", "\n", "to apply this to our function from before:\n", "\n", "$y = 2x^2$\n", "\n", "$y' = 2 \\times 2x^{2-1} = 4x$\n", "\n", "to to get the speed at any point in time, we can use the derevative function. So the speed after 3 hours is:\n", "\n", "$y' = 4 \\times 3 = 12$\n", "\n", "Now let's visualize both of these functions to see how does they ralate to each other." ] }, { "cell_type": "code", "execution_count": 73, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAawAAAEMCAYAAACY1IJCAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzs3Xd4FGXXx/HvISEkAQRCEwUponQIHcQCNvSx8KjYC1jABnZFHysqKvaKgoCCCiIgiggiYAAF6aH3GkInhEAaKXveP2bxDQgkm2R3Nsn5XNdeyc7uzPwScU9m5p5zi6pijDHGBLtSbgcwxhhj8sIKljHGmCLBCpYxxpgiwQqWMcaYIsEKljHGmCLBCpYxxpgiwQqWMcaYIsEKljHGmCLBCpYxxpgiIdTtAIWhVKlSGhERka91PR4PpUoFX90O1lwQvNksl28sl2+KY67U1FRV1eD7oU5GVYv8IzIyUvMrJiYm3+v6U7DmUg3ebJbLN5bLN8UxF5CiQfAZntdH0amsxhhjSjQrWMYYY4oEK1jGGGOKhGIx6OJEMjMziY+PJz09/ZTvq1ChAmvWrAlQqrxzM1d4eDg1a9akdOnSruzfGGNOpNgWrPj4eMqXL0+dOnUQkZO+7/Dhw5QvXz6AyfLGrVyqSkJCAvHx8dStWzfg+zfGmJMptqcE09PTqVy58imLlfk3EaFy5cq5HpkaY0ygFduCBVixyif7vRljglGxLljGGFNsZWYy576nSFm8yu0kAWMFy49CQkKIjo6mSZMmtGjRgvfeew+PxwPAokWLeOSRR0667rZt2xg1alSgohpjipLYWA40bUmnYe9Retpst9METLEddBEMIiIiWLp0KQB79+7ltttu49ChQ/Tv3582bdrQpk2bk64bFxfHqFGjuO222wIV1xgT7NLT4bXX0IEDyQ4vz6cPvUnj7u3dThUwdoQVINWqVWPIkCF8+umnqCozZ87k6quvBmDWrFlER0cTHR1Ny5YtOXz4MC+//DJ//vkn0dHRfPDBB2zdupULLriAVq1a0apVK+bOnQvAzJkz6dy5M927d6dhw4bcfvvtOB1XYOHChZx33nm0aNGCdu3acfjwYbKzs3n66adp27YtzZs3Z/Dgwa79TowxPpgzB6Kj4Y03+Ln5JdzXbyR3vfckpUrQNecScYTV/5dVrN556ISvZWdnExIS4vM2G59xGi9f08SnderVq0d2djZ79+49Zvm7777LZ599RqdOnUhOTiY8PJz+/fszaNAgJk2aBEBqairTpk0jPDycDRs2cOutt7Jo0SIAYmNjWbVqFWeccQadOnVizpw5tGvXjptvvpkxY8bQtm1bDh06REREBMOGDaNChQosXLiQI0eO0KlTJy6//HIbwm5MsDp8GP73P/jsMzy1zuKF+99l0ulN+fnB8zktvGTdK1kiClaw69SpE0888QS33347119/PTVr1vzXezIzM+nTpw9Lly4lJCSE9evX//Nau3bt/lknOjqarVu3UqFCBWrUqEHbtm0BOO200wD4/fffWb58OePGjQMgKSmJDRs2WMEyJhhNnQq9e8P27WifPjzWrDuTNh9mxO2tqFulrNvpAq5EFKxTHQkF8gbdzZs3ExISQrVq1Y7pYvHss89y1VVXMXnyZDp16sTUqVP/te4HH3xA9erVWbZsGR6Ph/Dw8H9eK1OmzD/fh4SEkJWVddIMqsonn3xC165dC+mnMsYUugMH4IknYMQIaNgQ/vyTD1KqMPGPjbx0dWMuOKeq2wldYdewAmTfvn088MAD9OnT51/3OW3atIlmzZrRr18/2rZty9q1aylXrhyHDx/+5z1JSUnUqFGDUqVK8c0335CdnX3K/TVo0IBdu3axcOFCwCnMWVlZdO3alc8//5zMzEwA1q9fT0pKSiH/tMaYfBs/Hho3hu++g+efh9hYJpWvy8d/bOSmNjW5u1MdtxO6pkQcYbklLS2N6OhoMjMzCQ0N5c477+SJJ5741/s+/PBDYmJiKFWqFE2aNOHKK68kJSWFkJAQWrRoQc+ePXnooYe44YYbGDlyJFdccQVly576dEBYWBhjxoyhb9++pKWlERERwfTp07nvvvvYunUrrVq1QlWpWrUqP/30k79+BcaYvNq1C/r0gR9/hFat4LffIDqalTuSeGrsMlrXrsRr/21asm/sd3tCrsJ4nGgCx9WrV/97trITOHToUJ7eF2hu5zrV7684TmTnT5bLNyUul8ejOny4asWKqmXKqL71lmpmpqqq7j2Urh3fmK4d35iuew+lF3oubALHY4nIcBHZKyIrcyx7R0TWishyEZkgIhVzvPaciGwUkXUiYhdajDHF19at0LUr3HMPNGsGy5dDv34QGsqRrGwe+HYx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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "acceleration = 2\n", "time = np.arange(0,9)\n", "distance = acceleration * time**2\n", "speed = 4 * time\n", "\n", "plt.xlabel(\"Time $Hours$\")\n", "plt.ylabel(\"Distance $km$\")\n", "plt.grid()\n", "l1 = plt.plot(time, distance, label=\"Distance\")\n", "plt.twinx()\n", "plt.ylabel(\"Speed $km/h$\")\n", "l2 = plt.plot(time, speed, \"r\", label=\"Speed\")\n", "plt.legend(l1+l2, (\"Distance\", \"Speed\"));" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Since you know the rule now, let's try to apply it to out first example\n", "\n", "$y = 10x = 10x^1$\n", "\n", "$y' = 1 \\times 10x^{1-1} = 10x^0 = 10 \\times 1 = 10$\n", "\n", "Anything to the power 0 is equal to 1. It might be weird, but that's just math!\n", "\n", "### Complex Ploynominal Functions\n", "\n", "The same rule applies for any polynominal function. Let's try some examples:\n", "\n", "$f(x) = 2x^2 + 4x + 10$\n", "\n", "$f'(x) = 2 \\times 2x^{2-1} + 1 \\times 4x{1-1} + 0 = 4x + 4$\n", "\n", "Notice that we can apply the rule to each part of the function seperatly. Any part of the functiona that's not muliplied by x will give you a derevative of 0." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Trigonometry\n", "\n", "Derevatives of trigonometric functions can be derived to some level straight forward out of a lookup table. This is an incomlete table of functions and their derevatives:\n", "\n", "| Function $f(x)$ | Deravative $f'(x)$|\n", "| --------------- | ------------------ |\n", "| $sin(x)$ | $cos(x)$ |\n", "| $cos(x)$ | $-sin(x)$ |\n", "| $tan(x)$ | $sec^2(x)$ |\n", "| $cot(x)$ | $-csc^2(x)$ |\n", "| $sec(x)$ | $sec(x)tan(x)$ |\n", "| $csc(x)$ | $-csc(x)cost(x)$ |\n", "\n", "You don't have to memorize this. This is available everywhere!\n", "\n", "Just for fun let's visualize one of them as see if it makes sense.\n", "\n", "$f(x) = sin(x)$\n", "\n", "$f'(x) = cos(x)$" ] }, { "cell_type": "code", "execution_count": 57, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "x = np.arange(0,10, 0.1)\n", "sin_x = np.sin(x)\n", "cos_x = np.cos(x)\n", "\n", "plt.xlabel(\"x\")\n", "plt.ylabel(\"y\")\n", "plt.grid()\n", "plt.plot(x, sin_x, label=\"sin(x)\")\n", "plt.plot(x, cos_x, \"r\", label=\"cos(x)\")\n", "plt.legend();" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Next\n", "\n", "Did I get existed about calculus yet? well you will love the next part where we get into some more interesting derevativesa dn a more intuative understanding of why do we need that whole derevative in the first place." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
This work in open sourced and licensed under GNU General Public License v2.0
\n", "\n", "Copyright © 2018 Abdullah Alrasheed and other contributes

Roshan Logo is not open sourced and is not covered by the GNU license
" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 2 }