DeepLearningAI/Course2/Week 3/TensorFlow_Tutorial_v3b.ipynb

1873 lines
210 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "zVtw6n7bT110"
},
"source": [
"# TensorFlow Tutorial\n",
"\n",
"Welcome to this week's programming assignment. Until now, you've always used numpy to build neural networks. Now we will step you through a deep learning framework that will allow you to build neural networks more easily. Machine learning frameworks like TensorFlow, PaddlePaddle, Torch, Caffe, Keras, and many others can speed up your machine learning development significantly. All of these frameworks also have a lot of documentation, which you should feel free to read. In this assignment, you will learn to do the following in TensorFlow: \n",
"\n",
"- Initialize variables\n",
"- Start your own session\n",
"- Train algorithms \n",
"- Implement a Neural Network\n",
"\n",
"Programing frameworks can not only shorten your coding time, but sometimes also perform optimizations that speed up your code. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## <font color='darkblue'>Updates</font>\n",
"\n",
"#### If you were working on the notebook before this update...\n",
"* The current notebook is version \"v3b\".\n",
"* You can find your original work saved in the notebook with the previous version name (it may be either TensorFlow Tutorial version 3\" or \"TensorFlow Tutorial version 3a.) \n",
"* To view the file directory, click on the \"Coursera\" icon in the top left of this notebook.\n",
"\n",
"#### List of updates\n",
"* forward_propagation instruction now says 'A1' instead of 'a1' in the formula for Z2; \n",
" and are updated to say 'A2' instead of 'Z2' in the formula for Z3.\n",
"* create_placeholders instruction refer to the data type \"tf.float32\" instead of float.\n",
"* in the model function, the x axis of the plot now says \"iterations (per fives)\" instead of iterations(per tens)\n",
"* In the linear_function, comments remind students to create the variables in the order suggested by the starter code. The comments are updated to reflect this order.\n",
"* The test of the cost function now creates the logits without passing them through a sigmoid function (since the cost function will include the sigmoid in the built-in tensorflow function).\n",
"* Updated print statements and 'expected output that are used to check functions, for easier visual comparison.\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 1 - Exploring the Tensorflow Library\n",
"\n",
"To start, you will import the library:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"colab": {},
"colab_type": "code",
"collapsed": true,
"id": "rhZ0RUw8T111"
},
"outputs": [],
"source": [
"import math\n",
"import numpy as np\n",
"import h5py\n",
"import matplotlib.pyplot as plt\n",
"import tensorflow as tf\n",
"from tensorflow.python.framework import ops\n",
"from tf_utils import load_dataset, random_mini_batches, convert_to_one_hot, predict\n",
"\n",
"%matplotlib inline\n",
"np.random.seed(1)"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "A1vVKBCQT114"
},
"source": [
"Now that you have imported the library, we will walk you through its different applications. You will start with an example, where we compute for you the loss of one training example. \n",
"$$loss = \\mathcal{L}(\\hat{y}, y) = (\\hat y^{(i)} - y^{(i)})^2 \\tag{1}$$"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "JKAjoAbjT115"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"9\n"
]
}
],
"source": [
"y_hat = tf.constant(36, name='y_hat') # Define y_hat constant. Set to 36.\n",
"y = tf.constant(39, name='y') # Define y. Set to 39\n",
"\n",
"loss = tf.Variable((y - y_hat)**2, name='loss') # Create a variable for the loss\n",
"\n",
"init = tf.global_variables_initializer() # When init is run later (session.run(init)),\n",
" # the loss variable will be initialized and ready to be computed\n",
"with tf.Session() as session: # Create a session and print the output\n",
" session.run(init) # Initializes the variables\n",
" print(session.run(loss)) # Prints the loss"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "iz5l0YacT117"
},
"source": [
"Writing and running programs in TensorFlow has the following steps:\n",
"\n",
"1. Create Tensors (variables) that are not yet executed/evaluated. \n",
"2. Write operations between those Tensors.\n",
"3. Initialize your Tensors. \n",
"4. Create a Session. \n",
"5. Run the Session. This will run the operations you'd written above. \n",
"\n",
"Therefore, when we created a variable for the loss, we simply defined the loss as a function of other quantities, but did not evaluate its value. To evaluate it, we had to run `init=tf.global_variables_initializer()`. That initialized the loss variable, and in the last line we were finally able to evaluate the value of `loss` and print its value.\n",
"\n",
"Now let us look at an easy example. Run the cell below:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "Ni74wj7IT117"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Tensor(\"Mul:0\", shape=(), dtype=int32)\n"
]
}
],
"source": [
"a = tf.constant(2)\n",
"b = tf.constant(10)\n",
"c = tf.multiply(a,b)\n",
"print(c)"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "dKAqwc2VT119"
},
"source": [
"As expected, you will not see 20! You got a tensor saying that the result is a tensor that does not have the shape attribute, and is of type \"int32\". All you did was put in the 'computation graph', but you have not run this computation yet. In order to actually multiply the two numbers, you will have to create a session and run it."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "txF_DuCkT11-",
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"20\n"
]
}
],
"source": [
"sess = tf.Session()\n",
"print(sess.run(c))"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "xADCVaq4T12A"
},
"source": [
"Great! To summarize, **remember to initialize your variables, create a session and run the operations inside the session**. \n",
"\n",
"Next, you'll also have to know about placeholders. A placeholder is an object whose value you can specify only later. \n",
"To specify values for a placeholder, you can pass in values by using a \"feed dictionary\" (`feed_dict` variable). Below, we created a placeholder for x. This allows us to pass in a number later when we run the session. "
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "Pn_-PPqvT12A"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"6\n"
]
}
],
"source": [
"# Change the value of x in the feed_dict\n",
"\n",
"x = tf.placeholder(tf.int64, name = 'x')\n",
"print(sess.run(2 * x, feed_dict = {x: 3}))\n",
"sess.close()"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "QrVJFYCpT12C"
},
"source": [
"When you first defined `x` you did not have to specify a value for it. A placeholder is simply a variable that you will assign data to only later, when running the session. We say that you **feed data** to these placeholders when running the session. \n",
"\n",
"Here's what's happening: When you specify the operations needed for a computation, you are telling TensorFlow how to construct a computation graph. The computation graph can have some placeholders whose values you will specify only later. Finally, when you run the session, you are telling TensorFlow to execute the computation graph."
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "X15wlMDUT12D"
},
"source": [
"### 1.1 - Linear function\n",
"\n",
"Lets start this programming exercise by computing the following equation: $Y = WX + b$, where $W$ and $X$ are random matrices and b is a random vector. \n",
"\n",
"**Exercise**: Compute $WX + b$ where $W, X$, and $b$ are drawn from a random normal distribution. W is of shape (4, 3), X is (3,1) and b is (4,1). As an example, here is how you would define a constant X that has shape (3,1):\n",
"```python\n",
"X = tf.constant(np.random.randn(3,1), name = \"X\")\n",
"\n",
"```\n",
"You might find the following functions helpful: \n",
"- tf.matmul(..., ...) to do a matrix multiplication\n",
"- tf.add(..., ...) to do an addition\n",
"- np.random.randn(...) to initialize randomly\n"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"colab": {},
"colab_type": "code",
"collapsed": true,
"id": "ww5sBoFbT12D"
},
"outputs": [],
"source": [
"# GRADED FUNCTION: linear_function\n",
"\n",
"def linear_function():\n",
" \"\"\"\n",
" Implements a linear function: \n",
" Initializes X to be a random tensor of shape (3,1)\n",
" Initializes W to be a random tensor of shape (4,3)\n",
" Initializes b to be a random tensor of shape (4,1)\n",
" Returns: \n",
" result -- runs the session for Y = WX + b \n",
" \"\"\"\n",
" \n",
" np.random.seed(1)\n",
" \n",
" \"\"\"\n",
" Note, to ensure that the \"random\" numbers generated match the expected results,\n",
" please create the variables in the order given in the starting code below.\n",
" (Do not re-arrange the order).\n",
" \"\"\"\n",
" ### START CODE HERE ### (4 lines of code)\n",
" X = tf.constant(np.random.randn(3,1), name = \"X\")\n",
" W = tf.constant(np.random.randn(4,3), name = \"W\")\n",
" b = tf.constant(np.random.randn(4,1), name = \"b\")\n",
" Y = tf.matmul(W,X) + b\n",
" ### END CODE HERE ### \n",
" \n",
" # Create the session using tf.Session() and run it with sess.run(...) on the variable you want to calculate\n",
" \n",
" ### START CODE HERE ###\n",
" sess = tf.Session()\n",
" result = sess.run(Y)\n",
" ### END CODE HERE ### \n",
" \n",
" # close the session \n",
" sess.close()\n",
"\n",
" return result"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "P3gOryVQT12G"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"result = \n",
"[[-2.15657382]\n",
" [ 2.95891446]\n",
" [-1.08926781]\n",
" [-0.84538042]]\n"
]
}
],
"source": [
"print( \"result = \\n\" + str(linear_function()))"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "R5netQ9IT12J"
},
"source": [
"*** Expected Output ***: \n",
"\n",
"```\n",
"result = \n",
"[[-2.15657382]\n",
" [ 2.95891446]\n",
" [-1.08926781]\n",
" [-0.84538042]]\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "DUBum-E4T12K"
},
"source": [
"### 1.2 - Computing the sigmoid \n",
"Great! You just implemented a linear function. Tensorflow offers a variety of commonly used neural network functions like `tf.sigmoid` and `tf.softmax`. For this exercise lets compute the sigmoid function of an input. \n",
"\n",
"You will do this exercise using a placeholder variable `x`. When running the session, you should use the feed dictionary to pass in the input `z`. In this exercise, you will have to (i) create a placeholder `x`, (ii) define the operations needed to compute the sigmoid using `tf.sigmoid`, and then (iii) run the session. \n",
"\n",
"** Exercise **: Implement the sigmoid function below. You should use the following: \n",
"\n",
"- `tf.placeholder(tf.float32, name = \"...\")`\n",
"- `tf.sigmoid(...)`\n",
"- `sess.run(..., feed_dict = {x: z})`\n",
"\n",
"\n",
"Note that there are two typical ways to create and use sessions in tensorflow: \n",
"\n",
"**Method 1:**\n",
"```python\n",
"sess = tf.Session()\n",
"# Run the variables initialization (if needed), run the operations\n",
"result = sess.run(..., feed_dict = {...})\n",
"sess.close() # Close the session\n",
"```\n",
"**Method 2:**\n",
"```python\n",
"with tf.Session() as sess: \n",
" # run the variables initialization (if needed), run the operations\n",
" result = sess.run(..., feed_dict = {...})\n",
" # This takes care of closing the session for you :)\n",
"```\n"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"colab": {},
"colab_type": "code",
"collapsed": true,
"id": "APv9bW9rT12K"
},
"outputs": [],
"source": [
"# GRADED FUNCTION: sigmoid\n",
"\n",
"def sigmoid(z):\n",
" \"\"\"\n",
" Computes the sigmoid of z\n",
" \n",
" Arguments:\n",
" z -- input value, scalar or vector\n",
" \n",
" Returns: \n",
" results -- the sigmoid of z\n",
" \"\"\"\n",
" \n",
" ### START CODE HERE ### ( approx. 4 lines of code)\n",
" # Create a placeholder for x. Name it 'x'.\n",
" x = tf.placeholder(tf.float32, name='X')\n",
"\n",
" # compute sigmoid(x)\n",
" sigmoid = tf.sigmoid(x)\n",
"\n",
" # Create a session, and run it. Please use the method 2 explained above. \n",
" # You should use a feed_dict to pass z's value to x. \n",
" with tf.Session() as sess:\n",
" # Run session and call the output \"result\"\n",
" result = sess.run(sigmoid,feed_dict = {x:z})\n",
"\n",
" ### END CODE HERE ###\n",
" \n",
" return result"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "nLHdJxKVT12M"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"sigmoid(0) = 0.5\n",
"sigmoid(12) = 0.999994\n"
]
}
],
"source": [
"print (\"sigmoid(0) = \" + str(sigmoid(0)))\n",
"print (\"sigmoid(12) = \" + str(sigmoid(12)))"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "4cl8Wgg9T12O"
},
"source": [
"*** Expected Output ***: \n",
"\n",
"<table> \n",
"<tr> \n",
"<td>\n",
"**sigmoid(0)**\n",
"</td>\n",
"<td>\n",
"0.5\n",
"</td>\n",
"</tr>\n",
"<tr> \n",
"<td>\n",
"**sigmoid(12)**\n",
"</td>\n",
"<td>\n",
"0.999994\n",
"</td>\n",
"</tr> \n",
"\n",
"</table> "
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "v-okwynUT12O"
},
"source": [
"<font color='blue'>\n",
"**To summarize, you how know how to**:\n",
"1. Create placeholders\n",
"2. Specify the computation graph corresponding to operations you want to compute\n",
"3. Create the session\n",
"4. Run the session, using a feed dictionary if necessary to specify placeholder variables' values. "
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "ytSt0fgTT12P"
},
"source": [
"### 1.3 - Computing the Cost\n",
"\n",
"You can also use a built-in function to compute the cost of your neural network. So instead of needing to write code to compute this as a function of $a^{[2](i)}$ and $y^{(i)}$ for i=1...m: \n",
"$$ J = - \\frac{1}{m} \\sum_{i = 1}^m \\large ( \\small y^{(i)} \\log a^{ [2] (i)} + (1-y^{(i)})\\log (1-a^{ [2] (i)} )\\large )\\small\\tag{2}$$\n",
"\n",
"you can do it in one line of code in tensorflow!\n",
"\n",
"**Exercise**: Implement the cross entropy loss. The function you will use is: \n",
"\n",
"\n",
"- `tf.nn.sigmoid_cross_entropy_with_logits(logits = ..., labels = ...)`\n",
"\n",
"Your code should input `z`, compute the sigmoid (to get `a`) and then compute the cross entropy cost $J$. All this can be done using one call to `tf.nn.sigmoid_cross_entropy_with_logits`, which computes\n",
"\n",
"$$- \\frac{1}{m} \\sum_{i = 1}^m \\large ( \\small y^{(i)} \\log \\sigma(z^{[2](i)}) + (1-y^{(i)})\\log (1-\\sigma(z^{[2](i)})\\large )\\small\\tag{2}$$\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"colab": {},
"colab_type": "code",
"collapsed": true,
"id": "oIRdDYOLT12P"
},
"outputs": [],
"source": [
"# GRADED FUNCTION: cost\n",
"\n",
"def cost(logits, labels):\n",
" \"\"\"\n",
"    Computes the cost using the sigmoid cross entropy\n",
"    \n",
"    Arguments:\n",
"    logits -- vector containing z, output of the last linear unit (before the final sigmoid activation)\n",
"    labels -- vector of labels y (1 or 0) \n",
" \n",
" Note: What we've been calling \"z\" and \"y\" in this class are respectively called \"logits\" and \"labels\" \n",
" in the TensorFlow documentation. So logits will feed into z, and labels into y. \n",
"    \n",
"    Returns:\n",
"    cost -- runs the session of the cost (formula (2))\n",
" \"\"\"\n",
" \n",
" ### START CODE HERE ### \n",
" \n",
" # Create the placeholders for \"logits\" (z) and \"labels\" (y) (approx. 2 lines)\n",
" z = tf.placeholder(tf.float32, name = 'z')\n",
" y = tf.placeholder(tf.float32, name = 'y')\n",
" \n",
" # Use the loss function (approx. 1 line)\n",
" cost = tf.nn.sigmoid_cross_entropy_with_logits(logits = z, labels = y)\n",
" \n",
" # Create a session (approx. 1 line). See method 1 above.\n",
" sess = tf.Session()\n",
" \n",
" # Run the session (approx. 1 line).\n",
" cost = sess.run(cost, feed_dict={z:logits, y:labels})\n",
" \n",
" # Close the session (approx. 1 line). See method 1 above.\n",
" sess.close()\n",
" \n",
" ### END CODE HERE ###\n",
" \n",
" return cost"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "0nPB-lOYT12R"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"cost = [ 0.79813886 0.91301525 0.40318605 0.34115386]\n"
]
}
],
"source": [
"logits = np.array([0.2,0.4,0.7,0.9])\n",
"\n",
"cost = cost(logits, np.array([0,0,1,1]))\n",
"print (\"cost = \" + str(cost))"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "X8sMySzyT12T"
},
"source": [
"** Expected Output** : \n",
"\n",
"```\n",
"cost = [ 0.79813886 0.91301525 0.40318605 0.34115386]\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "_sK1Rqm6T12U"
},
"source": [
"### 1.4 - Using One Hot encodings\n",
"\n",
"Many times in deep learning you will have a y vector with numbers ranging from 0 to C-1, where C is the number of classes. If C is for example 4, then you might have the following y vector which you will need to convert as follows:\n",
"\n",
"\n",
"<img src=\"images/onehot.png\" style=\"width:600px;height:150px;\">\n",
"\n",
"This is called a \"one hot\" encoding, because in the converted representation exactly one element of each column is \"hot\" (meaning set to 1). To do this conversion in numpy, you might have to write a few lines of code. In tensorflow, you can use one line of code: \n",
"\n",
"- tf.one_hot(labels, depth, axis) \n",
"\n",
"**Exercise:** Implement the function below to take one vector of labels and the total number of classes $C$, and return the one hot encoding. Use `tf.one_hot()` to do this. "
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"colab": {},
"colab_type": "code",
"collapsed": true,
"id": "dlamXLu_T12U"
},
"outputs": [],
"source": [
"# GRADED FUNCTION: one_hot_matrix\n",
"\n",
"def one_hot_matrix(labels, C):\n",
" \"\"\"\n",
" Creates a matrix where the i-th row corresponds to the ith class number and the jth column\n",
" corresponds to the jth training example. So if example j had a label i. Then entry (i,j) \n",
" will be 1. \n",
" \n",
" Arguments:\n",
" labels -- vector containing the labels \n",
" C -- number of classes, the depth of the one hot dimension\n",
" \n",
" Returns: \n",
" one_hot -- one hot matrix\n",
" \"\"\"\n",
" \n",
" ### START CODE HERE ###\n",
" \n",
" # Create a tf.constant equal to C (depth), name it 'C'. (approx. 1 line)\n",
" C = tf.constant(C, name='C')\n",
" \n",
" # Use tf.one_hot, be careful with the axis (approx. 1 line)\n",
" one_hot_matrix = tf.one_hot(indices = labels,depth = C,axis = 0)\n",
" \n",
" # Create the session (approx. 1 line)\n",
" sess = tf.Session()\n",
" \n",
" # Run the session (approx. 1 line)\n",
" one_hot = sess.run(one_hot_matrix)\n",
" \n",
" # Close the session (approx. 1 line). See method 1 above.\n",
" sess.close()\n",
" \n",
" ### END CODE HERE ###\n",
" \n",
" return one_hot"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "8Bi0je2yT12W"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"one_hot = \n",
"[[ 0. 0. 0. 1. 0. 0.]\n",
" [ 1. 0. 0. 0. 0. 1.]\n",
" [ 0. 1. 0. 0. 1. 0.]\n",
" [ 0. 0. 1. 0. 0. 0.]]\n"
]
}
],
"source": [
"labels = np.array([1,2,3,0,2,1])\n",
"one_hot = one_hot_matrix(labels, C = 4)\n",
"print (\"one_hot = \\n\" + str(one_hot))"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "HlT0UczrT12Y"
},
"source": [
"**Expected Output**: \n",
"\n",
"```\n",
"one_hot = \n",
"[[ 0. 0. 0. 1. 0. 0.]\n",
" [ 1. 0. 0. 0. 0. 1.]\n",
" [ 0. 1. 0. 0. 1. 0.]\n",
" [ 0. 0. 1. 0. 0. 0.]]\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "qsu1xyqFT12Z"
},
"source": [
"### 1.5 - Initialize with zeros and ones\n",
"\n",
"Now you will learn how to initialize a vector of zeros and ones. The function you will be calling is `tf.ones()`. To initialize with zeros you could use tf.zeros() instead. These functions take in a shape and return an array of dimension shape full of zeros and ones respectively. \n",
"\n",
"**Exercise:** Implement the function below to take in a shape and to return an array (of the shape's dimension of ones). \n",
"\n",
" - tf.ones(shape)\n"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"colab": {},
"colab_type": "code",
"collapsed": true,
"id": "eOVWrcR2T12Z"
},
"outputs": [],
"source": [
"# GRADED FUNCTION: ones\n",
"\n",
"def ones(shape):\n",
" \"\"\"\n",
" Creates an array of ones of dimension shape\n",
" \n",
" Arguments:\n",
" shape -- shape of the array you want to create\n",
" \n",
" Returns: \n",
" ones -- array containing only ones\n",
" \"\"\"\n",
" \n",
" ### START CODE HERE ###\n",
" \n",
" # Create \"ones\" tensor using tf.ones(...). (approx. 1 line)\n",
" ones = tf.ones(shape, name='ones')\n",
" \n",
" # Create the session (approx. 1 line)\n",
" sess = tf.Session()\n",
" \n",
" # Run the session to compute 'ones' (approx. 1 line)\n",
" ones = sess.run(ones)\n",
" \n",
" # Close the session (approx. 1 line). See method 1 above.\n",
" sess.close()\n",
" \n",
" ### END CODE HERE ###\n",
" return ones"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "WwHEVDv6T12b"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"ones = [ 1. 1. 1.]\n"
]
}
],
"source": [
"print (\"ones = \" + str(ones([3])))"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "hGgM2hSFT12g"
},
"source": [
"**Expected Output:**\n",
"\n",
"<table> \n",
" <tr> \n",
" <td>\n",
" **ones**\n",
" </td>\n",
" <td>\n",
" [ 1. 1. 1.]\n",
" </td>\n",
" </tr>\n",
"\n",
"</table>"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "LW8S6sVzT12h"
},
"source": [
"# 2 - Building your first neural network in tensorflow\n",
"\n",
"In this part of the assignment you will build a neural network using tensorflow. Remember that there are two parts to implement a tensorflow model:\n",
"\n",
"- Create the computation graph\n",
"- Run the graph\n",
"\n",
"Let's delve into the problem you'd like to solve!\n",
"\n",
"### 2.0 - Problem statement: SIGNS Dataset\n",
"\n",
"One afternoon, with some friends we decided to teach our computers to decipher sign language. We spent a few hours taking pictures in front of a white wall and came up with the following dataset. It's now your job to build an algorithm that would facilitate communications from a speech-impaired person to someone who doesn't understand sign language.\n",
"\n",
"- **Training set**: 1080 pictures (64 by 64 pixels) of signs representing numbers from 0 to 5 (180 pictures per number).\n",
"- **Test set**: 120 pictures (64 by 64 pixels) of signs representing numbers from 0 to 5 (20 pictures per number).\n",
"\n",
"Note that this is a subset of the SIGNS dataset. The complete dataset contains many more signs.\n",
"\n",
"Here are examples for each number, and how an explanation of how we represent the labels. These are the original pictures, before we lowered the image resolutoion to 64 by 64 pixels.\n",
"<img src=\"images/hands.png\" style=\"width:800px;height:350px;\"><caption><center> <u><font color='purple'> **Figure 1**</u><font color='purple'>: SIGNS dataset <br> <font color='black'> </center>\n",
"\n",
"\n",
"Run the following code to load the dataset."
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"colab": {},
"colab_type": "code",
"collapsed": true,
"id": "wCgjv84yT12i"
},
"outputs": [],
"source": [
"# Loading the dataset\n",
"X_train_orig, Y_train_orig, X_test_orig, Y_test_orig, classes = load_dataset()"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "JYimgnMbT12k"
},
"source": [
"Change the index below and run the cell to visualize some examples in the dataset."
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "wG0QwVtJT12k"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"y = 0\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fd010494240>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Example of a picture\n",
"index = 20\n",
"plt.imshow(X_train_orig[index])\n",
"print (\"y = \" + str(np.squeeze(Y_train_orig[:, index])))"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "2WP4-S2CT12m"
},
"source": [
"As usual you flatten the image dataset, then normalize it by dividing by 255. On top of that, you will convert each label to a one-hot vector as shown in Figure 1. Run the cell below to do so."
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "tn3gF5xLT12m"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"number of training examples = 1080\n",
"number of test examples = 120\n",
"X_train shape: (12288, 1080)\n",
"Y_train shape: (6, 1080)\n",
"X_test shape: (12288, 120)\n",
"Y_test shape: (6, 120)\n"
]
}
],
"source": [
"# Flatten the training and test images\n",
"X_train_flatten = X_train_orig.reshape(X_train_orig.shape[0], -1).T\n",
"X_test_flatten = X_test_orig.reshape(X_test_orig.shape[0], -1).T\n",
"# Normalize image vectors\n",
"X_train = X_train_flatten/255.\n",
"X_test = X_test_flatten/255.\n",
"# Convert training and test labels to one hot matrices\n",
"Y_train = convert_to_one_hot(Y_train_orig, 6)\n",
"Y_test = convert_to_one_hot(Y_test_orig, 6)\n",
"\n",
"print (\"number of training examples = \" + str(X_train.shape[1]))\n",
"print (\"number of test examples = \" + str(X_test.shape[1]))\n",
"print (\"X_train shape: \" + str(X_train.shape))\n",
"print (\"Y_train shape: \" + str(Y_train.shape))\n",
"print (\"X_test shape: \" + str(X_test.shape))\n",
"print (\"Y_test shape: \" + str(Y_test.shape))"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "iN_KPZ0FT12o"
},
"source": [
"**Note** that 12288 comes from $64 \\times 64 \\times 3$. Each image is square, 64 by 64 pixels, and 3 is for the RGB colors. Please make sure all these shapes make sense to you before continuing."
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "_GQMSJTtT12p"
},
"source": [
"**Your goal** is to build an algorithm capable of recognizing a sign with high accuracy. To do so, you are going to build a tensorflow model that is almost the same as one you have previously built in numpy for cat recognition (but now using a softmax output). It is a great occasion to compare your numpy implementation to the tensorflow one. \n",
"\n",
"**The model** is *LINEAR -> RELU -> LINEAR -> RELU -> LINEAR -> SOFTMAX*. The SIGMOID output layer has been converted to a SOFTMAX. A SOFTMAX layer generalizes SIGMOID to when there are more than two classes. "
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "JSNd_DRWT12p"
},
"source": [
"### 2.1 - Create placeholders\n",
"\n",
"Your first task is to create placeholders for `X` and `Y`. This will allow you to later pass your training data in when you run your session. \n",
"\n",
"**Exercise:** Implement the function below to create the placeholders in tensorflow."
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"colab": {},
"colab_type": "code",
"collapsed": true,
"id": "fcAcBRAAT12q"
},
"outputs": [],
"source": [
"# GRADED FUNCTION: create_placeholders\n",
"\n",
"def create_placeholders(n_x, n_y):\n",
" \"\"\"\n",
" Creates the placeholders for the tensorflow session.\n",
" \n",
" Arguments:\n",
" n_x -- scalar, size of an image vector (num_px * num_px = 64 * 64 * 3 = 12288)\n",
" n_y -- scalar, number of classes (from 0 to 5, so -> 6)\n",
" \n",
" Returns:\n",
" X -- placeholder for the data input, of shape [n_x, None] and dtype \"tf.float32\"\n",
" Y -- placeholder for the input labels, of shape [n_y, None] and dtype \"tf.float32\"\n",
" \n",
" Tips:\n",
" - You will use None because it let's us be flexible on the number of examples you will for the placeholders.\n",
" In fact, the number of examples during test/train is different.\n",
" \"\"\"\n",
"\n",
" ### START CODE HERE ### (approx. 2 lines)\n",
" X = tf.placeholder(shape=(n_x,None), dtype=tf.float32, name='Placeholder_1')\n",
" Y = tf.placeholder(shape=(n_y,None), dtype=tf.float32, name='Placeholder_2')\n",
" ### END CODE HERE ###\n",
" \n",
" return X, Y"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "Ve9WOa1LT12r"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"X = Tensor(\"Placeholder_1_1:0\", shape=(12288, ?), dtype=float32)\n",
"Y = Tensor(\"Placeholder_2_1:0\", shape=(6, ?), dtype=float32)\n"
]
}
],
"source": [
"X, Y = create_placeholders(12288, 6)\n",
"print (\"X = \" + str(X))\n",
"print (\"Y = \" + str(Y))"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "-G_UV4xpT12t"
},
"source": [
"**Expected Output**: \n",
"\n",
"<table> \n",
" <tr> \n",
" <td>\n",
" **X**\n",
" </td>\n",
" <td>\n",
" Tensor(\"Placeholder_1:0\", shape=(12288, ?), dtype=float32) (not necessarily Placeholder_1)\n",
" </td>\n",
" </tr>\n",
" <tr> \n",
" <td>\n",
" **Y**\n",
" </td>\n",
" <td>\n",
" Tensor(\"Placeholder_2:0\", shape=(6, ?), dtype=float32) (not necessarily Placeholder_2)\n",
" </td>\n",
" </tr>\n",
"\n",
"</table>"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "eyYz9y1XT12u"
},
"source": [
"### 2.2 - Initializing the parameters\n",
"\n",
"Your second task is to initialize the parameters in tensorflow.\n",
"\n",
"**Exercise:** Implement the function below to initialize the parameters in tensorflow. You are going use Xavier Initialization for weights and Zero Initialization for biases. The shapes are given below. As an example, to help you, for W1 and b1 you could use: \n",
"\n",
"```python\n",
"W1 = tf.get_variable(\"W1\", [25,12288], initializer = tf.contrib.layers.xavier_initializer(seed = 1))\n",
"b1 = tf.get_variable(\"b1\", [25,1], initializer = tf.zeros_initializer())\n",
"```\n",
"Please use `seed = 1` to make sure your results match ours."
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {
"colab": {},
"colab_type": "code",
"collapsed": true,
"id": "gPi-SeuWT12u"
},
"outputs": [],
"source": [
"# GRADED FUNCTION: initialize_parameters\n",
"\n",
"def initialize_parameters():\n",
" \"\"\"\n",
" Initializes parameters to build a neural network with tensorflow. The shapes are:\n",
" W1 : [25, 12288]\n",
" b1 : [25, 1]\n",
" W2 : [12, 25]\n",
" b2 : [12, 1]\n",
" W3 : [6, 12]\n",
" b3 : [6, 1]\n",
" \n",
" Returns:\n",
" parameters -- a dictionary of tensors containing W1, b1, W2, b2, W3, b3\n",
" \"\"\"\n",
" \n",
" tf.set_random_seed(1) # so that your \"random\" numbers match ours\n",
" \n",
" ### START CODE HERE ### (approx. 6 lines of code)\n",
" W1 = tf.get_variable('W1', [25,12288], initializer = tf.contrib.layers.xavier_initializer(seed = 1))\n",
" b1 = tf.get_variable('b1', [25,1], initializer = tf.zeros_initializer())\n",
" W2 = tf.get_variable('W2', [12, 25], initializer = tf.contrib.layers.xavier_initializer(seed = 1))\n",
" b2 = tf.get_variable('b2', [12, 1], initializer = tf.zeros_initializer())\n",
" W3 = tf.get_variable('W3', [6, 12], initializer = tf.contrib.layers.xavier_initializer(seed = 1))\n",
" b3 = tf.get_variable('b3', [6, 1], initializer = tf.zeros_initializer())\n",
" ### END CODE HERE ###\n",
"\n",
" parameters = {\"W1\": W1,\n",
" \"b1\": b1,\n",
" \"W2\": W2,\n",
" \"b2\": b2,\n",
" \"W3\": W3,\n",
" \"b3\": b3}\n",
" \n",
" return parameters"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "CcuKNYinT12x"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"W1 = <tf.Variable 'W1:0' shape=(25, 12288) dtype=float32_ref>\n",
"b1 = <tf.Variable 'b1:0' shape=(25, 1) dtype=float32_ref>\n",
"W2 = <tf.Variable 'W2:0' shape=(12, 25) dtype=float32_ref>\n",
"b2 = <tf.Variable 'b2:0' shape=(12, 1) dtype=float32_ref>\n"
]
}
],
"source": [
"tf.reset_default_graph()\n",
"with tf.Session() as sess:\n",
" parameters = initialize_parameters()\n",
" print(\"W1 = \" + str(parameters[\"W1\"]))\n",
" print(\"b1 = \" + str(parameters[\"b1\"]))\n",
" print(\"W2 = \" + str(parameters[\"W2\"]))\n",
" print(\"b2 = \" + str(parameters[\"b2\"]))"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "kzAVM5y8T12z"
},
"source": [
"**Expected Output**: \n",
"\n",
"<table> \n",
" <tr> \n",
" <td>\n",
" **W1**\n",
" </td>\n",
" <td>\n",
" < tf.Variable 'W1:0' shape=(25, 12288) dtype=float32_ref >\n",
" </td>\n",
" </tr>\n",
" <tr> \n",
" <td>\n",
" **b1**\n",
" </td>\n",
" <td>\n",
" < tf.Variable 'b1:0' shape=(25, 1) dtype=float32_ref >\n",
" </td>\n",
" </tr>\n",
" <tr> \n",
" <td>\n",
" **W2**\n",
" </td>\n",
" <td>\n",
" < tf.Variable 'W2:0' shape=(12, 25) dtype=float32_ref >\n",
" </td>\n",
" </tr>\n",
" <tr> \n",
" <td>\n",
" **b2**\n",
" </td>\n",
" <td>\n",
" < tf.Variable 'b2:0' shape=(12, 1) dtype=float32_ref >\n",
" </td>\n",
" </tr>\n",
"\n",
"</table>"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "IR5UvbGxT12z"
},
"source": [
"As expected, the parameters haven't been evaluated yet."
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "cnuAGFn2T120"
},
"source": [
"### 2.3 - Forward propagation in tensorflow \n",
"\n",
"You will now implement the forward propagation module in tensorflow. The function will take in a dictionary of parameters and it will complete the forward pass. The functions you will be using are: \n",
"\n",
"- `tf.add(...,...)` to do an addition\n",
"- `tf.matmul(...,...)` to do a matrix multiplication\n",
"- `tf.nn.relu(...)` to apply the ReLU activation\n",
"\n",
"**Question:** Implement the forward pass of the neural network. We commented for you the numpy equivalents so that you can compare the tensorflow implementation to numpy. It is important to note that the forward propagation stops at `z3`. The reason is that in tensorflow the last linear layer output is given as input to the function computing the loss. Therefore, you don't need `a3`!\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {
"colab": {},
"colab_type": "code",
"collapsed": true,
"id": "nC7CYNk0T120"
},
"outputs": [],
"source": [
"# GRADED FUNCTION: forward_propagation\n",
"\n",
"def forward_propagation(X, parameters):\n",
" \"\"\"\n",
" Implements the forward propagation for the model: LINEAR -> RELU -> LINEAR -> RELU -> LINEAR -> SOFTMAX\n",
" \n",
" Arguments:\n",
" X -- input dataset placeholder, of shape (input size, number of examples)\n",
" parameters -- python dictionary containing your parameters \"W1\", \"b1\", \"W2\", \"b2\", \"W3\", \"b3\"\n",
" the shapes are given in initialize_parameters\n",
"\n",
" Returns:\n",
" Z3 -- the output of the last LINEAR unit\n",
" \"\"\"\n",
" \n",
" # Retrieve the parameters from the dictionary \"parameters\" \n",
" W1 = parameters['W1']\n",
" b1 = parameters['b1']\n",
" W2 = parameters['W2']\n",
" b2 = parameters['b2']\n",
" W3 = parameters['W3']\n",
" b3 = parameters['b3']\n",
" \n",
" ### START CODE HERE ### (approx. 5 lines) # Numpy Equivalents:\n",
" Z1 = tf.matmul(W1,X) + b1 # Z1 = np.dot(W1, X) + b1\n",
" A1 = tf.nn.relu(Z1) # A1 = relu(Z1)\n",
" Z2 = tf.matmul(W2,A1) + b2 # Z2 = np.dot(W2, A1) + b2\n",
" A2 = tf.nn.relu(Z2) # A2 = relu(Z2)\n",
" Z3 = tf.matmul(W3,A2) + b3 # Z3 = np.dot(W3, A2) + b3\n",
" ### END CODE HERE ###\n",
" \n",
" return Z3"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "hioQQqyxT122",
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Z3 = Tensor(\"add_2:0\", shape=(6, ?), dtype=float32)\n"
]
}
],
"source": [
"tf.reset_default_graph()\n",
"\n",
"with tf.Session() as sess:\n",
" X, Y = create_placeholders(12288, 6)\n",
" parameters = initialize_parameters()\n",
" Z3 = forward_propagation(X, parameters)\n",
" print(\"Z3 = \" + str(Z3))"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "PRrS7RzpT124"
},
"source": [
"**Expected Output**: \n",
"\n",
"<table> \n",
" <tr> \n",
" <td>\n",
" **Z3**\n",
" </td>\n",
" <td>\n",
" Tensor(\"Add_2:0\", shape=(6, ?), dtype=float32)\n",
" </td>\n",
" </tr>\n",
"\n",
"</table>"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "FDjgAHp6T125"
},
"source": [
"You may have noticed that the forward propagation doesn't output any cache. You will understand why below, when we get to brackpropagation."
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "RXqHnAEnT125"
},
"source": [
"### 2.4 Compute cost\n",
"\n",
"As seen before, it is very easy to compute the cost using:\n",
"```python\n",
"tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits = ..., labels = ...))\n",
"```\n",
"**Question**: Implement the cost function below. \n",
"- It is important to know that the \"`logits`\" and \"`labels`\" inputs of `tf.nn.softmax_cross_entropy_with_logits` are expected to be of shape (number of examples, num_classes). We have thus transposed Z3 and Y for you.\n",
"- Besides, `tf.reduce_mean` basically does the summation over the examples."
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {
"colab": {},
"colab_type": "code",
"collapsed": true,
"id": "1_bzQXSJT125"
},
"outputs": [],
"source": [
"# GRADED FUNCTION: compute_cost \n",
"\n",
"def compute_cost(Z3, Y):\n",
" \"\"\"\n",
" Computes the cost\n",
" \n",
" Arguments:\n",
" Z3 -- output of forward propagation (output of the last LINEAR unit), of shape (6, number of examples)\n",
" Y -- \"true\" labels vector placeholder, same shape as Z3\n",
" \n",
" Returns:\n",
" cost - Tensor of the cost function\n",
" \"\"\"\n",
" \n",
" # to fit the tensorflow requirement for tf.nn.softmax_cross_entropy_with_logits(...,...)\n",
" logits = tf.transpose(Z3)\n",
" labels = tf.transpose(Y)\n",
" \n",
" ### START CODE HERE ### (1 line of code)\n",
" cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits = logits, labels = labels))\n",
" ### END CODE HERE ###\n",
" \n",
" return cost"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "4HahBCJVT127"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"cost = Tensor(\"Mean:0\", shape=(), dtype=float32)\n"
]
}
],
"source": [
"tf.reset_default_graph()\n",
"\n",
"with tf.Session() as sess:\n",
" X, Y = create_placeholders(12288, 6)\n",
" parameters = initialize_parameters()\n",
" Z3 = forward_propagation(X, parameters)\n",
" cost = compute_cost(Z3, Y)\n",
" print(\"cost = \" + str(cost))"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "GT7MzPxET12-"
},
"source": [
"**Expected Output**: \n",
"\n",
"<table> \n",
" <tr> \n",
" <td>\n",
" **cost**\n",
" </td>\n",
" <td>\n",
" Tensor(\"Mean:0\", shape=(), dtype=float32)\n",
" </td>\n",
" </tr>\n",
"\n",
"</table>"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "9O9sNnHQT12-"
},
"source": [
"### 2.5 - Backward propagation & parameter updates\n",
"\n",
"This is where you become grateful to programming frameworks. All the backpropagation and the parameters update is taken care of in 1 line of code. It is very easy to incorporate this line in the model.\n",
"\n",
"After you compute the cost function. You will create an \"`optimizer`\" object. You have to call this object along with the cost when running the tf.session. When called, it will perform an optimization on the given cost with the chosen method and learning rate.\n",
"\n",
"For instance, for gradient descent the optimizer would be:\n",
"```python\n",
"optimizer = tf.train.GradientDescentOptimizer(learning_rate = learning_rate).minimize(cost)\n",
"```\n",
"\n",
"To make the optimization you would do:\n",
"```python\n",
"_ , c = sess.run([optimizer, cost], feed_dict={X: minibatch_X, Y: minibatch_Y})\n",
"```\n",
"\n",
"This computes the backpropagation by passing through the tensorflow graph in the reverse order. From cost to inputs.\n",
"\n",
"**Note** When coding, we often use `_` as a \"throwaway\" variable to store values that we won't need to use later. Here, `_` takes on the evaluated value of `optimizer`, which we don't need (and `c` takes the value of the `cost` variable). "
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "SKxhuoN2T12_"
},
"source": [
"### 2.6 - Building the model\n",
"\n",
"Now, you will bring it all together! \n",
"\n",
"**Exercise:** Implement the model. You will be calling the functions you had previously implemented."
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {
"colab": {},
"colab_type": "code",
"collapsed": true,
"id": "siFLpYfkT12_"
},
"outputs": [],
"source": [
"def model(X_train, Y_train, X_test, Y_test, learning_rate = 0.0001,\n",
" num_epochs = 1500, minibatch_size = 32, print_cost = True):\n",
" \"\"\"\n",
" Implements a three-layer tensorflow neural network: LINEAR->RELU->LINEAR->RELU->LINEAR->SOFTMAX.\n",
" \n",
" Arguments:\n",
" X_train -- training set, of shape (input size = 12288, number of training examples = 1080)\n",
" Y_train -- test set, of shape (output size = 6, number of training examples = 1080)\n",
" X_test -- training set, of shape (input size = 12288, number of training examples = 120)\n",
" Y_test -- test set, of shape (output size = 6, number of test examples = 120)\n",
" learning_rate -- learning rate of the optimization\n",
" num_epochs -- number of epochs of the optimization loop\n",
" minibatch_size -- size of a minibatch\n",
" print_cost -- True to print the cost every 100 epochs\n",
" \n",
" Returns:\n",
" parameters -- parameters learnt by the model. They can then be used to predict.\n",
" \"\"\"\n",
" \n",
" ops.reset_default_graph() # to be able to rerun the model without overwriting tf variables\n",
" tf.set_random_seed(1) # to keep consistent results\n",
" seed = 3 # to keep consistent results\n",
" (n_x, m) = X_train.shape # (n_x: input size, m : number of examples in the train set)\n",
" n_y = Y_train.shape[0] # n_y : output size\n",
" costs = [] # To keep track of the cost\n",
" \n",
" # Create Placeholders of shape (n_x, n_y)\n",
" ### START CODE HERE ### (1 line)\n",
" X, Y = create_placeholders(n_x, n_y)\n",
" ### END CODE HERE ###\n",
"\n",
" # Initialize parameters\n",
" ### START CODE HERE ### (1 line)\n",
" parameters = initialize_parameters()\n",
" ### END CODE HERE ###\n",
" \n",
" # Forward propagation: Build the forward propagation in the tensorflow graph\n",
" ### START CODE HERE ### (1 line)\n",
" Z3 = forward_propagation(X, parameters)\n",
" ### END CODE HERE ###\n",
" \n",
" # Cost function: Add cost function to tensorflow graph\n",
" ### START CODE HERE ### (1 line)\n",
" cost = compute_cost(Z3, Y)\n",
" ### END CODE HERE ###\n",
" \n",
" # Backpropagation: Define the tensorflow optimizer. Use an AdamOptimizer.\n",
" ### START CODE HERE ### (1 line)\n",
" optimizer = tf.train.AdamOptimizer(learning_rate = learning_rate).minimize(cost)\n",
" ### END CODE HERE ###\n",
" \n",
" # Initialize all the variables\n",
" init = tf.global_variables_initializer()\n",
"\n",
" # Start the session to compute the tensorflow graph\n",
" with tf.Session() as sess:\n",
" \n",
" # Run the initialization\n",
" sess.run(init)\n",
" \n",
" # Do the training loop\n",
" for epoch in range(num_epochs):\n",
"\n",
" epoch_cost = 0. # Defines a cost related to an epoch\n",
" num_minibatches = int(m / minibatch_size) # number of minibatches of size minibatch_size in the train set\n",
" seed = seed + 1\n",
" minibatches = random_mini_batches(X_train, Y_train, minibatch_size, seed)\n",
"\n",
" for minibatch in minibatches:\n",
"\n",
" # Select a minibatch\n",
" (minibatch_X, minibatch_Y) = minibatch\n",
" \n",
" # IMPORTANT: The line that runs the graph on a minibatch.\n",
" # Run the session to execute the \"optimizer\" and the \"cost\", the feedict should contain a minibatch for (X,Y).\n",
" ### START CODE HERE ### (1 line)\n",
" _ , minibatch_cost = sess.run([optimizer, cost], feed_dict={X: minibatch_X, Y: minibatch_Y})\n",
" ### END CODE HERE ###\n",
" \n",
" epoch_cost += minibatch_cost / num_minibatches\n",
"\n",
" # Print the cost every epoch\n",
" if print_cost == True and epoch % 100 == 0:\n",
" print (\"Cost after epoch %i: %f\" % (epoch, epoch_cost))\n",
" if print_cost == True and epoch % 5 == 0:\n",
" costs.append(epoch_cost)\n",
" \n",
" # plot the cost\n",
" plt.plot(np.squeeze(costs))\n",
" plt.ylabel('cost')\n",
" plt.xlabel('iterations (per fives)')\n",
" plt.title(\"Learning rate =\" + str(learning_rate))\n",
" plt.show()\n",
"\n",
" # lets save the parameters in a variable\n",
" parameters = sess.run(parameters)\n",
" print (\"Parameters have been trained!\")\n",
"\n",
" # Calculate the correct predictions\n",
" correct_prediction = tf.equal(tf.argmax(Z3), tf.argmax(Y))\n",
"\n",
" # Calculate accuracy on the test set\n",
" accuracy = tf.reduce_mean(tf.cast(correct_prediction, \"float\"))\n",
"\n",
" print (\"Train Accuracy:\", accuracy.eval({X: X_train, Y: Y_train}))\n",
" print (\"Test Accuracy:\", accuracy.eval({X: X_test, Y: Y_test}))\n",
" \n",
" return parameters"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "sQ1doxmHT13B"
},
"source": [
"Run the following cell to train your model! On our machine it takes about 5 minutes. Your \"Cost after epoch 100\" should be 1.016458. If it's not, don't waste time; interrupt the training by clicking on the square (⬛) in the upper bar of the notebook, and try to correct your code. If it is the correct cost, take a break and come back in 5 minutes!"
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "AISfljZVT13B",
"scrolled": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Cost after epoch 0: 1.855702\n",
"Cost after epoch 100: 1.016458\n",
"Cost after epoch 200: 0.733102\n",
"Cost after epoch 300: 0.572940\n",
"Cost after epoch 400: 0.468774\n",
"Cost after epoch 500: 0.381021\n",
"Cost after epoch 600: 0.313822\n",
"Cost after epoch 700: 0.254158\n",
"Cost after epoch 800: 0.203829\n",
"Cost after epoch 900: 0.166421\n",
"Cost after epoch 1000: 0.141486\n",
"Cost after epoch 1100: 0.107580\n",
"Cost after epoch 1200: 0.086270\n",
"Cost after epoch 1300: 0.059371\n",
"Cost after epoch 1400: 0.052228\n"
]
},
{
"data": {
"image/png": "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\nT/b2oUAAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fcfbc8759e8>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Parameters have been trained!\n",
"Train Accuracy: 0.999074\n",
"Test Accuracy: 0.716667\n"
]
}
],
"source": [
"parameters = model(X_train, Y_train, X_test, Y_test)"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "ogOoTX2CT13E"
},
"source": [
"**Expected Output**:\n",
"\n",
"<table> \n",
" <tr> \n",
" <td>\n",
" **Train Accuracy**\n",
" </td>\n",
" <td>\n",
" 0.999074\n",
" </td>\n",
" </tr>\n",
" <tr> \n",
" <td>\n",
" **Test Accuracy**\n",
" </td>\n",
" <td>\n",
" 0.716667\n",
" </td>\n",
" </tr>\n",
"\n",
"</table>\n",
"\n",
"Amazing, your algorithm can recognize a sign representing a figure between 0 and 5 with 71.7% accuracy.\n",
"\n",
"**Insights**:\n",
"- Your model seems big enough to fit the training set well. However, given the difference between train and test accuracy, you could try to add L2 or dropout regularization to reduce overfitting. \n",
"- Think about the session as a block of code to train the model. Each time you run the session on a minibatch, it trains the parameters. In total you have run the session a large number of times (1500 epochs) until you obtained well trained parameters."
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "cka8pF8BT13E"
},
"source": [
"### 2.7 - Test with your own image (optional / ungraded exercise)\n",
"\n",
"Congratulations on finishing this assignment. You can now take a picture of your hand and see the output of your model. To do that:\n",
" 1. Click on \"File\" in the upper bar of this notebook, then click \"Open\" to go on your Coursera Hub.\n",
" 2. Add your image to this Jupyter Notebook's directory, in the \"images\" folder\n",
" 3. Write your image's name in the following code\n",
" 4. Run the code and check if the algorithm is right!"
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "EJ8Aft1CT13F",
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Your algorithm predicts: y = 3\n"
]
},
{
"data": {
"image/png": "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\nNwAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fcfbc4c7e48>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import scipy\n",
"from PIL import Image\n",
"from scipy import ndimage\n",
"\n",
"## START CODE HERE ## (PUT YOUR IMAGE NAME) \n",
"my_image = \"thumbs_up.jpg\"\n",
"## END CODE HERE ##\n",
"\n",
"# We preprocess your image to fit your algorithm.\n",
"fname = \"images/\" + my_image\n",
"image = np.array(ndimage.imread(fname, flatten=False))\n",
"image = image/255.\n",
"my_image = scipy.misc.imresize(image, size=(64,64)).reshape((1, 64*64*3)).T\n",
"my_image_prediction = predict(my_image, parameters)\n",
"\n",
"plt.imshow(image)\n",
"print(\"Your algorithm predicts: y = \" + str(np.squeeze(my_image_prediction)))"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "6Q5jJuAqT13G"
},
"source": [
"You indeed deserved a \"thumbs-up\" although as you can see the algorithm seems to classify it incorrectly. The reason is that the training set doesn't contain any \"thumbs-up\", so the model doesn't know how to deal with it! We call that a \"mismatched data distribution\" and it is one of the various of the next course on \"Structuring Machine Learning Projects\"."
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "DMY1FYvOT13H"
},
"source": [
"<font color='blue'>\n",
"**What you should remember**:\n",
"- Tensorflow is a programming framework used in deep learning\n",
"- The two main object classes in tensorflow are Tensors and Operators. \n",
"- When you code in tensorflow you have to take the following steps:\n",
" - Create a graph containing Tensors (Variables, Placeholders ...) and Operations (tf.matmul, tf.add, ...)\n",
" - Create a session\n",
" - Initialize the session\n",
" - Run the session to execute the graph\n",
"- You can execute the graph multiple times as you've seen in model()\n",
"- The backpropagation and optimization is automatically done when running the session on the \"optimizer\" object."
]
}
],
"metadata": {
"coursera": {
"course_slug": "deep-neural-network",
"graded_item_id": "BFd89",
"launcher_item_id": "AH2rK"
},
"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.6.0"
}
},
"nbformat": 4,
"nbformat_minor": 2
}