{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Residual Networks\n", "\n", "Welcome to the second assignment of this week! You will learn how to build very deep convolutional networks, using Residual Networks (ResNets). In theory, very deep networks can represent very complex functions; but in practice, they are hard to train. Residual Networks, introduced by [He et al.](https://arxiv.org/pdf/1512.03385.pdf), allow you to train much deeper networks than were previously practically feasible.\n", "\n", "**In this assignment, you will:**\n", "- Implement the basic building blocks of ResNets. \n", "- Put together these building blocks to implement and train a state-of-the-art neural network for image classification. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Updates\n", "\n", "#### If you were working on the notebook before this update...\n", "* The current notebook is version \"2a\".\n", "* You can find your original work saved in the notebook with the previous version name (\"v2\") \n", "* To view the file directory, go to the menu \"File->Open\", and this will open a new tab that shows the file directory.\n", "\n", "#### List of updates\n", "* For testing on an image, replaced `preprocess_input(x)` with `x=x/255.0` to normalize the input image in the same way that the model's training data was normalized.\n", "* Refers to \"shallower\" layers as those layers closer to the input, and \"deeper\" layers as those closer to the output (Using \"shallower\" layers instead of \"lower\" or \"earlier\").\n", "* Added/updated instructions.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This assignment will be done in Keras. \n", "\n", "Before jumping into the problem, let's run the cell below to load the required packages." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Using TensorFlow backend.\n" ] } ], "source": [ "import numpy as np\n", "from keras import layers\n", "from keras.layers import Input, Add, Dense, Activation, ZeroPadding2D, BatchNormalization, Flatten, Conv2D, AveragePooling2D, MaxPooling2D, GlobalMaxPooling2D\n", "from keras.models import Model, load_model\n", "from keras.preprocessing import image\n", "from keras.utils import layer_utils\n", "from keras.utils.data_utils import get_file\n", "from keras.applications.imagenet_utils import preprocess_input\n", "import pydot\n", "from IPython.display import SVG\n", "from keras.utils.vis_utils import model_to_dot\n", "from keras.utils import plot_model\n", "from resnets_utils import *\n", "from keras.initializers import glorot_uniform\n", "import scipy.misc\n", "from matplotlib.pyplot import imshow\n", "%matplotlib inline\n", "\n", "import keras.backend as K\n", "K.set_image_data_format('channels_last')\n", "K.set_learning_phase(1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1 - The problem of very deep neural networks\n", "\n", "Last week, you built your first convolutional neural network. In recent years, neural networks have become deeper, with state-of-the-art networks going from just a few layers (e.g., AlexNet) to over a hundred layers.\n", "\n", "* The main benefit of a very deep network is that it can represent very complex functions. It can also learn features at many different levels of abstraction, from edges (at the shallower layers, closer to the input) to very complex features (at the deeper layers, closer to the output). \n", "* However, using a deeper network doesn't always help. A huge barrier to training them is vanishing gradients: very deep networks often have a gradient signal that goes to zero quickly, thus making gradient descent prohibitively slow. \n", "* More specifically, during gradient descent, as you backprop from the final layer back to the first layer, you are multiplying by the weight matrix on each step, and thus the gradient can decrease exponentially quickly to zero (or, in rare cases, grow exponentially quickly and \"explode\" to take very large values). \n", "* During training, you might therefore see the magnitude (or norm) of the gradient for the shallower layers decrease to zero very rapidly as training proceeds: " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "
**Figure 1** : **Vanishing gradient**
The speed of learning decreases very rapidly for the shallower layers as the network trains
\n", "\n", "You are now going to solve this problem by building a Residual Network!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2 - Building a Residual Network\n", "\n", "In ResNets, a \"shortcut\" or a \"skip connection\" allows the model to skip layers: \n", "\n", "\n", "
**Figure 2** : A ResNet block showing a **skip-connection**
\n", "\n", "The image on the left shows the \"main path\" through the network. The image on the right adds a shortcut to the main path. By stacking these ResNet blocks on top of each other, you can form a very deep network. \n", "\n", "We also saw in lecture that having ResNet blocks with the shortcut also makes it very easy for one of the blocks to learn an identity function. This means that you can stack on additional ResNet blocks with little risk of harming training set performance. \n", " \n", "(There is also some evidence that the ease of learning an identity function accounts for ResNets' remarkable performance even more so than skip connections helping with vanishing gradients).\n", "\n", "Two main types of blocks are used in a ResNet, depending mainly on whether the input/output dimensions are same or different. You are going to implement both of them: the \"identity block\" and the \"convolutional block.\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2.1 - The identity block\n", "\n", "The identity block is the standard block used in ResNets, and corresponds to the case where the input activation (say $a^{[l]}$) has the same dimension as the output activation (say $a^{[l+2]}$). To flesh out the different steps of what happens in a ResNet's identity block, here is an alternative diagram showing the individual steps:\n", "\n", "\n", "
**Figure 3** : **Identity block.** Skip connection \"skips over\" 2 layers.
\n", "\n", "The upper path is the \"shortcut path.\" The lower path is the \"main path.\" In this diagram, we have also made explicit the CONV2D and ReLU steps in each layer. To speed up training we have also added a BatchNorm step. Don't worry about this being complicated to implement--you'll see that BatchNorm is just one line of code in Keras! \n", "\n", "In this exercise, you'll actually implement a slightly more powerful version of this identity block, in which the skip connection \"skips over\" 3 hidden layers rather than 2 layers. It looks like this: \n", "\n", "\n", "
**Figure 4** : **Identity block.** Skip connection \"skips over\" 3 layers.
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here are the individual steps.\n", "\n", "First component of main path: \n", "- The first CONV2D has $F_1$ filters of shape (1,1) and a stride of (1,1). Its padding is \"valid\" and its name should be `conv_name_base + '2a'`. Use 0 as the seed for the random initialization. \n", "- The first BatchNorm is normalizing the 'channels' axis. Its name should be `bn_name_base + '2a'`.\n", "- Then apply the ReLU activation function. This has no name and no hyperparameters. \n", "\n", "Second component of main path:\n", "- The second CONV2D has $F_2$ filters of shape $(f,f)$ and a stride of (1,1). Its padding is \"same\" and its name should be `conv_name_base + '2b'`. Use 0 as the seed for the random initialization. \n", "- The second BatchNorm is normalizing the 'channels' axis. Its name should be `bn_name_base + '2b'`.\n", "- Then apply the ReLU activation function. This has no name and no hyperparameters. \n", "\n", "Third component of main path:\n", "- The third CONV2D has $F_3$ filters of shape (1,1) and a stride of (1,1). Its padding is \"valid\" and its name should be `conv_name_base + '2c'`. Use 0 as the seed for the random initialization. \n", "- The third BatchNorm is normalizing the 'channels' axis. Its name should be `bn_name_base + '2c'`. \n", "- Note that there is **no** ReLU activation function in this component. \n", "\n", "Final step: \n", "- The `X_shortcut` and the output from the 3rd layer `X` are added together.\n", "- **Hint**: The syntax will look something like `Add()([var1,var2])`\n", "- Then apply the ReLU activation function. This has no name and no hyperparameters. \n", "\n", "**Exercise**: Implement the ResNet identity block. We have implemented the first component of the main path. Please read this carefully to make sure you understand what it is doing. You should implement the rest. \n", "- To implement the Conv2D step: [Conv2D](https://keras.io/layers/convolutional/#conv2d)\n", "- To implement BatchNorm: [BatchNormalization](https://faroit.github.io/keras-docs/1.2.2/layers/normalization/) (axis: Integer, the axis that should be normalized (typically the 'channels' axis))\n", "- For the activation, use: `Activation('relu')(X)`\n", "- To add the value passed forward by the shortcut: [Add](https://keras.io/layers/merge/#add)" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# GRADED FUNCTION: identity_block\n", "\n", "def identity_block(X, f, filters, stage, block):\n", " \"\"\"\n", " Implementation of the identity block as defined in Figure 4\n", " \n", " Arguments:\n", " X -- input tensor of shape (m, n_H_prev, n_W_prev, n_C_prev)\n", " f -- integer, specifying the shape of the middle CONV's window for the main path\n", " filters -- python list of integers, defining the number of filters in the CONV layers of the main path\n", " stage -- integer, used to name the layers, depending on their position in the network\n", " block -- string/character, used to name the layers, depending on their position in the network\n", " \n", " Returns:\n", " X -- output of the identity block, tensor of shape (n_H, n_W, n_C)\n", " \"\"\"\n", " \n", " # defining name basis\n", " conv_name_base = 'res' + str(stage) + block + '_branch'\n", " bn_name_base = 'bn' + str(stage) + block + '_branch'\n", " \n", " # Retrieve Filters\n", " F1, F2, F3 = filters\n", " \n", " # Save the input value. You'll need this later to add back to the main path. \n", " X_shortcut = X\n", " \n", " # First component of main path\n", " X = Conv2D(filters = F1, kernel_size = (1, 1), strides = (1,1), padding = 'valid', name = conv_name_base + '2a', kernel_initializer = glorot_uniform(seed=0))(X)\n", " X = BatchNormalization(axis = 3, name = bn_name_base + '2a')(X)\n", " X = Activation('relu')(X)\n", " \n", " ### START CODE HERE ###\n", " \n", " # Second component of main path (≈3 lines)\n", " X = Conv2D(filters = F2, kernel_size = (f, f), strides = (1,1), padding = 'same', name = conv_name_base + '2b', kernel_initializer = glorot_uniform(seed=0))(X)\n", " X = BatchNormalization(axis = 3, name = bn_name_base + '2b')(X)\n", " X = Activation('relu')(X)\n", "\n", " # Third component of main path (≈2 lines)\n", " X = Conv2D(filters = F3, kernel_size = (1, 1), strides = (1,1), padding = 'valid', name = conv_name_base + '2c', kernel_initializer = glorot_uniform(seed=0))(X)\n", " X = BatchNormalization(axis = 3, name = bn_name_base + '2c')(X)\n", "\n", " # Final step: Add shortcut value to main path, and pass it through a RELU activation (≈2 lines)\n", " X = Add()([X, X_shortcut])\n", " X = Activation('relu')(X)\n", " \n", " ### END CODE HERE ###\n", " \n", " return X" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "out = [ 0.94822985 0. 1.16101444 2.747859 0. 1.36677003]\n" ] } ], "source": [ "tf.reset_default_graph()\n", "\n", "with tf.Session() as test:\n", " np.random.seed(1)\n", " A_prev = tf.placeholder(\"float\", [3, 4, 4, 6])\n", " X = np.random.randn(3, 4, 4, 6)\n", " A = identity_block(A_prev, f = 2, filters = [2, 4, 6], stage = 1, block = 'a')\n", " test.run(tf.global_variables_initializer())\n", " out = test.run([A], feed_dict={A_prev: X, K.learning_phase(): 0})\n", " print(\"out = \" + str(out[0][1][1][0]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Expected Output**:\n", "\n", "\n", " \n", " \n", " \n", " \n", "\n", "
\n", " **out**\n", " \n", " [ 0.94822985 0. 1.16101444 2.747859 0. 1.36677003]\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2.2 - The convolutional block\n", "\n", "The ResNet \"convolutional block\" is the second block type. You can use this type of block when the input and output dimensions don't match up. The difference with the identity block is that there is a CONV2D layer in the shortcut path: \n", "\n", "\n", "
**Figure 4** : **Convolutional block**
\n", "\n", "* The CONV2D layer in the shortcut path is used to resize the input $x$ to a different dimension, so that the dimensions match up in the final addition needed to add the shortcut value back to the main path. (This plays a similar role as the matrix $W_s$ discussed in lecture.) \n", "* For example, to reduce the activation dimensions's height and width by a factor of 2, you can use a 1x1 convolution with a stride of 2. \n", "* The CONV2D layer on the shortcut path does not use any non-linear activation function. Its main role is to just apply a (learned) linear function that reduces the dimension of the input, so that the dimensions match up for the later addition step. \n", "\n", "The details of the convolutional block are as follows. \n", "\n", "First component of main path:\n", "- The first CONV2D has $F_1$ filters of shape (1,1) and a stride of (s,s). Its padding is \"valid\" and its name should be `conv_name_base + '2a'`. Use 0 as the `glorot_uniform` seed.\n", "- The first BatchNorm is normalizing the 'channels' axis. Its name should be `bn_name_base + '2a'`.\n", "- Then apply the ReLU activation function. This has no name and no hyperparameters. \n", "\n", "Second component of main path:\n", "- The second CONV2D has $F_2$ filters of shape (f,f) and a stride of (1,1). Its padding is \"same\" and it's name should be `conv_name_base + '2b'`. Use 0 as the `glorot_uniform` seed.\n", "- The second BatchNorm is normalizing the 'channels' axis. Its name should be `bn_name_base + '2b'`.\n", "- Then apply the ReLU activation function. This has no name and no hyperparameters. \n", "\n", "Third component of main path:\n", "- The third CONV2D has $F_3$ filters of shape (1,1) and a stride of (1,1). Its padding is \"valid\" and it's name should be `conv_name_base + '2c'`. Use 0 as the `glorot_uniform` seed.\n", "- The third BatchNorm is normalizing the 'channels' axis. Its name should be `bn_name_base + '2c'`. Note that there is no ReLU activation function in this component. \n", "\n", "Shortcut path:\n", "- The CONV2D has $F_3$ filters of shape (1,1) and a stride of (s,s). Its padding is \"valid\" and its name should be `conv_name_base + '1'`. Use 0 as the `glorot_uniform` seed.\n", "- The BatchNorm is normalizing the 'channels' axis. Its name should be `bn_name_base + '1'`. \n", "\n", "Final step: \n", "- The shortcut and the main path values are added together.\n", "- Then apply the ReLU activation function. This has no name and no hyperparameters. \n", " \n", "**Exercise**: Implement the convolutional block. We have implemented the first component of the main path; you should implement the rest. As before, always use 0 as the seed for the random initialization, to ensure consistency with our grader.\n", "- [Conv2D](https://keras.io/layers/convolutional/#conv2d)\n", "- [BatchNormalization](https://keras.io/layers/normalization/#batchnormalization) (axis: Integer, the axis that should be normalized (typically the features axis))\n", "- For the activation, use: `Activation('relu')(X)`\n", "- [Add](https://keras.io/layers/merge/#add)" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# GRADED FUNCTION: convolutional_block\n", "\n", "def convolutional_block(X, f, filters, stage, block, s = 2):\n", " \"\"\"\n", " Implementation of the convolutional block as defined in Figure 4\n", " \n", " Arguments:\n", " X -- input tensor of shape (m, n_H_prev, n_W_prev, n_C_prev)\n", " f -- integer, specifying the shape of the middle CONV's window for the main path\n", " filters -- python list of integers, defining the number of filters in the CONV layers of the main path\n", " stage -- integer, used to name the layers, depending on their position in the network\n", " block -- string/character, used to name the layers, depending on their position in the network\n", " s -- Integer, specifying the stride to be used\n", " \n", " Returns:\n", " X -- output of the convolutional block, tensor of shape (n_H, n_W, n_C)\n", " \"\"\"\n", " \n", " # defining name basis\n", " conv_name_base = 'res' + str(stage) + block + '_branch'\n", " bn_name_base = 'bn' + str(stage) + block + '_branch'\n", " \n", " # Retrieve Filters\n", " F1, F2, F3 = filters\n", " \n", " # Save the input value\n", " X_shortcut = X\n", "\n", "\n", " ##### MAIN PATH #####\n", " # First component of main path \n", " X = Conv2D(F1, (1, 1), strides = (s,s), padding = 'valid', name = conv_name_base + '2a', kernel_initializer = glorot_uniform(seed=0))(X)\n", " X = BatchNormalization(axis = 3, name = bn_name_base + '2a')(X)\n", " X = Activation('relu')(X)\n", " \n", " ### START CODE HERE ###\n", "\n", " # Second component of main path (≈3 lines)\n", " X = Conv2D(F2, kernel_size = (f, f), strides = (1,1), padding = 'same', name = conv_name_base + '2b', kernel_initializer = glorot_uniform(seed=0))(X)\n", " X = BatchNormalization(axis = 3, name = bn_name_base + '2b')(X)\n", " X = Activation('relu')(X)\n", "\n", " # Third component of main path (≈2 lines)\n", " X = Conv2D(F3, kernel_size = (1, 1), strides = (1,1), padding = 'valid', name = conv_name_base + '2c', kernel_initializer = glorot_uniform(seed=0))(X)\n", " X = BatchNormalization(axis = 3, name = bn_name_base + '2c')(X)\n", "\n", " ##### SHORTCUT PATH #### (≈2 lines)\n", " X_shortcut = Conv2D(F3, (1, 1), strides = (s,s), padding = 'valid', name = conv_name_base + '1', kernel_initializer = glorot_uniform(seed=0))(X_shortcut)\n", " X_shortcut = BatchNormalization(axis = 3, name = bn_name_base + '1')(X_shortcut)\n", "\n", " # Final step: Add shortcut value to main path, and pass it through a RELU activation (≈2 lines)\n", " X = Add()([X, X_shortcut])\n", " X = Activation('relu')(X) \n", " \n", " ### END CODE HERE ###\n", " \n", " return X" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "out = [ 0.09018463 1.23489773 0.46822017 0.0367176 0. 0.65516603]\n" ] } ], "source": [ "tf.reset_default_graph()\n", "\n", "with tf.Session() as test:\n", " np.random.seed(1)\n", " A_prev = tf.placeholder(\"float\", [3, 4, 4, 6])\n", " X = np.random.randn(3, 4, 4, 6)\n", " A = convolutional_block(A_prev, f = 2, filters = [2, 4, 6], stage = 1, block = 'a')\n", " test.run(tf.global_variables_initializer())\n", " out = test.run([A], feed_dict={A_prev: X, K.learning_phase(): 0})\n", " print(\"out = \" + str(out[0][1][1][0]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Expected Output**:\n", "\n", "\n", " \n", " \n", " \n", " \n", "\n", "
\n", " **out**\n", " \n", " [ 0.09018463 1.23489773 0.46822017 0.0367176 0. 0.65516603]\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 3 - Building your first ResNet model (50 layers)\n", "\n", "You now have the necessary blocks to build a very deep ResNet. The following figure describes in detail the architecture of this neural network. \"ID BLOCK\" in the diagram stands for \"Identity block,\" and \"ID BLOCK x3\" means you should stack 3 identity blocks together.\n", "\n", "\n", "
**Figure 5** : **ResNet-50 model**
\n", "\n", "The details of this ResNet-50 model are:\n", "- Zero-padding pads the input with a pad of (3,3)\n", "- Stage 1:\n", " - The 2D Convolution has 64 filters of shape (7,7) and uses a stride of (2,2). Its name is \"conv1\".\n", " - BatchNorm is applied to the 'channels' axis of the input.\n", " - MaxPooling uses a (3,3) window and a (2,2) stride.\n", "- Stage 2:\n", " - The convolutional block uses three sets of filters of size [64,64,256], \"f\" is 3, \"s\" is 1 and the block is \"a\".\n", " - The 2 identity blocks use three sets of filters of size [64,64,256], \"f\" is 3 and the blocks are \"b\" and \"c\".\n", "- Stage 3:\n", " - The convolutional block uses three sets of filters of size [128,128,512], \"f\" is 3, \"s\" is 2 and the block is \"a\".\n", " - The 3 identity blocks use three sets of filters of size [128,128,512], \"f\" is 3 and the blocks are \"b\", \"c\" and \"d\".\n", "- Stage 4:\n", " - The convolutional block uses three sets of filters of size [256, 256, 1024], \"f\" is 3, \"s\" is 2 and the block is \"a\".\n", " - The 5 identity blocks use three sets of filters of size [256, 256, 1024], \"f\" is 3 and the blocks are \"b\", \"c\", \"d\", \"e\" and \"f\".\n", "- Stage 5:\n", " - The convolutional block uses three sets of filters of size [512, 512, 2048], \"f\" is 3, \"s\" is 2 and the block is \"a\".\n", " - The 2 identity blocks use three sets of filters of size [512, 512, 2048], \"f\" is 3 and the blocks are \"b\" and \"c\".\n", "- The 2D Average Pooling uses a window of shape (2,2) and its name is \"avg_pool\".\n", "- The 'flatten' layer doesn't have any hyperparameters or name.\n", "- The Fully Connected (Dense) layer reduces its input to the number of classes using a softmax activation. Its name should be `'fc' + str(classes)`.\n", "\n", "**Exercise**: Implement the ResNet with 50 layers described in the figure above. We have implemented Stages 1 and 2. Please implement the rest. (The syntax for implementing Stages 3-5 should be quite similar to that of Stage 2.) Make sure you follow the naming convention in the text above. \n", "\n", "You'll need to use this function: \n", "- Average pooling [see reference](https://keras.io/layers/pooling/#averagepooling2d)\n", "\n", "Here are some other functions we used in the code below:\n", "- Conv2D: [See reference](https://keras.io/layers/convolutional/#conv2d)\n", "- BatchNorm: [See reference](https://keras.io/layers/normalization/#batchnormalization) (axis: Integer, the axis that should be normalized (typically the features axis))\n", "- Zero padding: [See reference](https://keras.io/layers/convolutional/#zeropadding2d)\n", "- Max pooling: [See reference](https://keras.io/layers/pooling/#maxpooling2d)\n", "- Fully connected layer: [See reference](https://keras.io/layers/core/#dense)\n", "- Addition: [See reference](https://keras.io/layers/merge/#add)" ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# GRADED FUNCTION: ResNet50\n", "\n", "def ResNet50(input_shape = (64, 64, 3), classes = 6):\n", " \"\"\"\n", " Implementation of the popular ResNet50 the following architecture:\n", " CONV2D -> BATCHNORM -> RELU -> MAXPOOL -> CONVBLOCK -> IDBLOCK*2 -> CONVBLOCK -> IDBLOCK*3\n", " -> CONVBLOCK -> IDBLOCK*5 -> CONVBLOCK -> IDBLOCK*2 -> AVGPOOL -> TOPLAYER\n", "\n", " Arguments:\n", " input_shape -- shape of the images of the dataset\n", " classes -- integer, number of classes\n", "\n", " Returns:\n", " model -- a Model() instance in Keras\n", " \"\"\"\n", " \n", " # Define the input as a tensor with shape input_shape\n", " X_input = Input(input_shape)\n", "\n", " \n", " # Zero-Padding\n", " X = ZeroPadding2D((3, 3))(X_input)\n", " \n", " # Stage 1\n", " X = Conv2D(64, (7, 7), strides = (2, 2), name = 'conv1', kernel_initializer = glorot_uniform(seed=0))(X)\n", " X = BatchNormalization(axis = 3, name = 'bn_conv1')(X)\n", " X = Activation('relu')(X)\n", " X = MaxPooling2D((3, 3), strides=(2, 2))(X)\n", "\n", " # Stage 2\n", " X = convolutional_block(X, f = 3, filters = [64, 64, 256], stage = 2, block='a', s = 1)\n", " X = identity_block(X, 3, [64, 64, 256], stage=2, block='b')\n", " X = identity_block(X, 3, [64, 64, 256], stage=2, block='c')\n", "\n", " ### START CODE HERE ###\n", "\n", " # Stage 3\n", " X = convolutional_block(X, f=3, filters=[128, 128, 512], stage=3, block='a', s=2)\n", " X = identity_block(X, 3, [128, 128, 512], stage=3, block='b')\n", " X = identity_block(X, 3, [128, 128, 512], stage=3, block='c')\n", " X = identity_block(X, 3, [128, 128, 512], stage=3, block='d')\n", "\n", " # Stage 4\n", " X = convolutional_block(X, f=3, filters=[256, 256, 1024], stage=4, block='a', s=2)\n", " X = identity_block(X, 3, [256, 256, 1024], stage=4, block='b')\n", " X = identity_block(X, 3, [256, 256, 1024], stage=4, block='c')\n", " X = identity_block(X, 3, [256, 256, 1024], stage=4, block='d')\n", " X = identity_block(X, 3, [256, 256, 1024], stage=4, block='e')\n", " X = identity_block(X, 3, [256, 256, 1024], stage=4, block='f')\n", "\n", " # Stage 5\n", " X = convolutional_block(X, f=3, filters=[512, 512, 2048], stage=5, block='a', s=2)\n", " X = identity_block(X, 3, [512, 512, 2048], stage=5, block='b')\n", " X = identity_block(X, 3, [512, 512, 2048], stage=5, block='c')\n", "\n", " # Average Pooling\n", " X = AveragePooling2D((2, 2), name='avg_pool')(X)\n", " \n", " ### END CODE HERE ###\n", "\n", " # output layer\n", " X = Flatten()(X)\n", " X = Dense(classes, activation='softmax', name='fc' + str(classes), kernel_initializer = glorot_uniform(seed=0))(X)\n", " \n", " \n", " # Create model\n", " model = Model(inputs = X_input, outputs = X, name='ResNet50')\n", "\n", " return model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Run the following code to build the model's graph. If your implementation is not correct you will know it by checking your accuracy when running `model.fit(...)` below." ] }, { "cell_type": "code", "execution_count": 43, "metadata": { "collapsed": true }, "outputs": [], "source": [ "model = ResNet50(input_shape = (64, 64, 3), classes = 6)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As seen in the Keras Tutorial Notebook, prior training a model, you need to configure the learning process by compiling the model." ] }, { "cell_type": "code", "execution_count": 44, "metadata": { "collapsed": true }, "outputs": [], "source": [ "model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The model is now ready to be trained. The only thing you need is a dataset." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's load the SIGNS Dataset.\n", "\n", "\n", "
**Figure 6** : **SIGNS dataset**
\n" ] }, { "cell_type": "code", "execution_count": 45, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "number of training examples = 1080\n", "number of test examples = 120\n", "X_train shape: (1080, 64, 64, 3)\n", "Y_train shape: (1080, 6)\n", "X_test shape: (120, 64, 64, 3)\n", "Y_test shape: (120, 6)\n" ] } ], "source": [ "X_train_orig, Y_train_orig, X_test_orig, Y_test_orig, classes = load_dataset()\n", "\n", "# Normalize image vectors\n", "X_train = X_train_orig/255.\n", "X_test = X_test_orig/255.\n", "\n", "# Convert training and test labels to one hot matrices\n", "Y_train = convert_to_one_hot(Y_train_orig, 6).T\n", "Y_test = convert_to_one_hot(Y_test_orig, 6).T\n", "\n", "print (\"number of training examples = \" + str(X_train.shape[0]))\n", "print (\"number of test examples = \" + str(X_test.shape[0]))\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": {}, "source": [ "Run the following cell to train your model on 2 epochs with a batch size of 32. On a CPU it should take you around 5min per epoch. " ] }, { "cell_type": "code", "execution_count": 46, "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/2\n", "1080/1080 [==============================] - 231s - loss: 3.3462 - acc: 0.2519 \n", "Epoch 2/2\n", "1080/1080 [==============================] - 228s - loss: 2.4094 - acc: 0.3287 \n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model.fit(X_train, Y_train, epochs = 2, batch_size = 32)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Expected Output**:\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", "
\n", " ** Epoch 1/2**\n", " \n", " loss: between 1 and 5, acc: between 0.2 and 0.5, although your results can be different from ours.\n", "
\n", " ** Epoch 2/2**\n", " \n", " loss: between 1 and 5, acc: between 0.2 and 0.5, you should see your loss decreasing and the accuracy increasing.\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's see how this model (trained on only two epochs) performs on the test set." ] }, { "cell_type": "code", "execution_count": 48, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "120/120 [==============================] - 8s \n", "Loss = 2.35617113113\n", "Test Accuracy = 0.166666666667\n" ] } ], "source": [ "preds = model.evaluate(X_test, Y_test)\n", "print (\"Loss = \" + str(preds[0]))\n", "print (\"Test Accuracy = \" + str(preds[1]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Expected Output**:\n", "\n", "\n", " \n", " \n", " \n", " \n", "\n", "
\n", " **Test Accuracy**\n", " \n", " between 0.16 and 0.25\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For the purpose of this assignment, we've asked you to train the model for just two epochs. You can see that it achieves poor performances. Please go ahead and submit your assignment; to check correctness, the online grader will run your code only for a small number of epochs as well." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "After you have finished this official (graded) part of this assignment, you can also optionally train the ResNet for more iterations, if you want. We get a lot better performance when we train for ~20 epochs, but this will take more than an hour when training on a CPU. \n", "\n", "Using a GPU, we've trained our own ResNet50 model's weights on the SIGNS dataset. You can load and run our trained model on the test set in the cells below. It may take ≈1min to load the model." ] }, { "cell_type": "code", "execution_count": 49, "metadata": { "collapsed": true }, "outputs": [], "source": [ "model = load_model('ResNet50.h5') " ] }, { "cell_type": "code", "execution_count": 50, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "120/120 [==============================] - 8s \n", "Loss = 0.530178320408\n", "Test Accuracy = 0.866666662693\n" ] } ], "source": [ "preds = model.evaluate(X_test, Y_test)\n", "print (\"Loss = \" + str(preds[0]))\n", "print (\"Test Accuracy = \" + str(preds[1]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "ResNet50 is a powerful model for image classification when it is trained for an adequate number of iterations. We hope you can use what you've learnt and apply it to your own classification problem to perform state-of-the-art accuracy.\n", "\n", "Congratulations on finishing this assignment! You've now implemented a state-of-the-art image classification system! " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 4 - Test on your own image (Optional/Ungraded)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If you wish, you can also take a picture of your own hand and see the output of the model. To do this:\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": 51, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Input image shape: (1, 64, 64, 3)\n", "class prediction vector [p(0), p(1), p(2), p(3), p(4), p(5)] = \n", "[[ 3.41876671e-06 2.77412561e-04 9.99522924e-01 1.98842812e-07\n", " 1.95619068e-04 4.11686671e-07]]\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "img_path = 'images/my_image.jpg'\n", "img = image.load_img(img_path, target_size=(64, 64))\n", "x = image.img_to_array(img)\n", "x = np.expand_dims(x, axis=0)\n", "x = x/255.0\n", "print('Input image shape:', x.shape)\n", "my_image = scipy.misc.imread(img_path)\n", "imshow(my_image)\n", "print(\"class prediction vector [p(0), p(1), p(2), p(3), p(4), p(5)] = \")\n", "print(model.predict(x))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can also print a summary of your model by running the following code." ] }, { "cell_type": "code", "execution_count": 52, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "____________________________________________________________________________________________________\n", "Layer (type) Output Shape Param # Connected to \n", "====================================================================================================\n", "input_1 (InputLayer) (None, 64, 64, 3) 0 \n", "____________________________________________________________________________________________________\n", "zero_padding2d_1 (ZeroPadding2D) (None, 70, 70, 3) 0 input_1[0][0] \n", "____________________________________________________________________________________________________\n", "conv1 (Conv2D) (None, 32, 32, 64) 9472 zero_padding2d_1[0][0] \n", "____________________________________________________________________________________________________\n", "bn_conv1 (BatchNormalization) (None, 32, 32, 64) 256 conv1[0][0] \n", "____________________________________________________________________________________________________\n", "activation_4 (Activation) (None, 32, 32, 64) 0 bn_conv1[0][0] \n", "____________________________________________________________________________________________________\n", "max_pooling2d_1 (MaxPooling2D) (None, 15, 15, 64) 0 activation_4[0][0] \n", "____________________________________________________________________________________________________\n", "res2a_branch2a (Conv2D) (None, 15, 15, 64) 4160 max_pooling2d_1[0][0] \n", "____________________________________________________________________________________________________\n", "bn2a_branch2a (BatchNormalizatio (None, 15, 15, 64) 256 res2a_branch2a[0][0] \n", "____________________________________________________________________________________________________\n", "activation_5 (Activation) (None, 15, 15, 64) 0 bn2a_branch2a[0][0] \n", "____________________________________________________________________________________________________\n", "res2a_branch2b (Conv2D) (None, 15, 15, 64) 36928 activation_5[0][0] \n", "____________________________________________________________________________________________________\n", "bn2a_branch2b (BatchNormalizatio (None, 15, 15, 64) 256 res2a_branch2b[0][0] \n", "____________________________________________________________________________________________________\n", "activation_6 (Activation) (None, 15, 15, 64) 0 bn2a_branch2b[0][0] \n", "____________________________________________________________________________________________________\n", "res2a_branch2c (Conv2D) (None, 15, 15, 256) 16640 activation_6[0][0] \n", "____________________________________________________________________________________________________\n", "res2a_branch1 (Conv2D) (None, 15, 15, 256) 16640 max_pooling2d_1[0][0] \n", "____________________________________________________________________________________________________\n", "bn2a_branch2c (BatchNormalizatio (None, 15, 15, 256) 1024 res2a_branch2c[0][0] \n", "____________________________________________________________________________________________________\n", "bn2a_branch1 (BatchNormalization (None, 15, 15, 256) 1024 res2a_branch1[0][0] \n", "____________________________________________________________________________________________________\n", "add_2 (Add) (None, 15, 15, 256) 0 bn2a_branch2c[0][0] \n", " bn2a_branch1[0][0] \n", "____________________________________________________________________________________________________\n", "activation_7 (Activation) (None, 15, 15, 256) 0 add_2[0][0] \n", "____________________________________________________________________________________________________\n", "res2b_branch2a (Conv2D) (None, 15, 15, 64) 16448 activation_7[0][0] \n", "____________________________________________________________________________________________________\n", "bn2b_branch2a (BatchNormalizatio (None, 15, 15, 64) 256 res2b_branch2a[0][0] \n", "____________________________________________________________________________________________________\n", "activation_8 (Activation) (None, 15, 15, 64) 0 bn2b_branch2a[0][0] \n", "____________________________________________________________________________________________________\n", "res2b_branch2b (Conv2D) (None, 15, 15, 64) 36928 activation_8[0][0] \n", "____________________________________________________________________________________________________\n", "bn2b_branch2b (BatchNormalizatio (None, 15, 15, 64) 256 res2b_branch2b[0][0] \n", "____________________________________________________________________________________________________\n", "activation_9 (Activation) (None, 15, 15, 64) 0 bn2b_branch2b[0][0] \n", "____________________________________________________________________________________________________\n", "res2b_branch2c (Conv2D) (None, 15, 15, 256) 16640 activation_9[0][0] \n", "____________________________________________________________________________________________________\n", "bn2b_branch2c (BatchNormalizatio (None, 15, 15, 256) 1024 res2b_branch2c[0][0] \n", "____________________________________________________________________________________________________\n", "add_3 (Add) (None, 15, 15, 256) 0 bn2b_branch2c[0][0] \n", " activation_7[0][0] \n", "____________________________________________________________________________________________________\n", "activation_10 (Activation) (None, 15, 15, 256) 0 add_3[0][0] \n", "____________________________________________________________________________________________________\n", "res2c_branch2a (Conv2D) (None, 15, 15, 64) 16448 activation_10[0][0] \n", "____________________________________________________________________________________________________\n", "bn2c_branch2a (BatchNormalizatio (None, 15, 15, 64) 256 res2c_branch2a[0][0] \n", "____________________________________________________________________________________________________\n", "activation_11 (Activation) (None, 15, 15, 64) 0 bn2c_branch2a[0][0] \n", "____________________________________________________________________________________________________\n", "res2c_branch2b (Conv2D) (None, 15, 15, 64) 36928 activation_11[0][0] \n", "____________________________________________________________________________________________________\n", "bn2c_branch2b (BatchNormalizatio (None, 15, 15, 64) 256 res2c_branch2b[0][0] \n", "____________________________________________________________________________________________________\n", "activation_12 (Activation) (None, 15, 15, 64) 0 bn2c_branch2b[0][0] \n", "____________________________________________________________________________________________________\n", "res2c_branch2c (Conv2D) (None, 15, 15, 256) 16640 activation_12[0][0] \n", "____________________________________________________________________________________________________\n", "bn2c_branch2c (BatchNormalizatio (None, 15, 15, 256) 1024 res2c_branch2c[0][0] \n", "____________________________________________________________________________________________________\n", "add_4 (Add) (None, 15, 15, 256) 0 bn2c_branch2c[0][0] \n", " activation_10[0][0] \n", "____________________________________________________________________________________________________\n", "activation_13 (Activation) (None, 15, 15, 256) 0 add_4[0][0] \n", "____________________________________________________________________________________________________\n", "res3a_branch2a (Conv2D) (None, 8, 8, 128) 32896 activation_13[0][0] \n", "____________________________________________________________________________________________________\n", "bn3a_branch2a (BatchNormalizatio (None, 8, 8, 128) 512 res3a_branch2a[0][0] \n", "____________________________________________________________________________________________________\n", "activation_14 (Activation) (None, 8, 8, 128) 0 bn3a_branch2a[0][0] \n", "____________________________________________________________________________________________________\n", "res3a_branch2b (Conv2D) (None, 8, 8, 128) 147584 activation_14[0][0] \n", "____________________________________________________________________________________________________\n", "bn3a_branch2b (BatchNormalizatio (None, 8, 8, 128) 512 res3a_branch2b[0][0] \n", "____________________________________________________________________________________________________\n", "activation_15 (Activation) (None, 8, 8, 128) 0 bn3a_branch2b[0][0] \n", "____________________________________________________________________________________________________\n", "res3a_branch2c (Conv2D) (None, 8, 8, 512) 66048 activation_15[0][0] \n", "____________________________________________________________________________________________________\n", "res3a_branch1 (Conv2D) (None, 8, 8, 512) 131584 activation_13[0][0] \n", "____________________________________________________________________________________________________\n", "bn3a_branch2c (BatchNormalizatio (None, 8, 8, 512) 2048 res3a_branch2c[0][0] \n", "____________________________________________________________________________________________________\n", "bn3a_branch1 (BatchNormalization (None, 8, 8, 512) 2048 res3a_branch1[0][0] \n", "____________________________________________________________________________________________________\n", "add_5 (Add) (None, 8, 8, 512) 0 bn3a_branch2c[0][0] \n", " bn3a_branch1[0][0] \n", "____________________________________________________________________________________________________\n", "activation_16 (Activation) (None, 8, 8, 512) 0 add_5[0][0] \n", "____________________________________________________________________________________________________\n", "res3b_branch2a (Conv2D) (None, 8, 8, 128) 65664 activation_16[0][0] \n", "____________________________________________________________________________________________________\n", "bn3b_branch2a (BatchNormalizatio (None, 8, 8, 128) 512 res3b_branch2a[0][0] \n", "____________________________________________________________________________________________________\n", "activation_17 (Activation) (None, 8, 8, 128) 0 bn3b_branch2a[0][0] \n", "____________________________________________________________________________________________________\n", "res3b_branch2b (Conv2D) (None, 8, 8, 128) 147584 activation_17[0][0] \n", "____________________________________________________________________________________________________\n", "bn3b_branch2b (BatchNormalizatio (None, 8, 8, 128) 512 res3b_branch2b[0][0] \n", "____________________________________________________________________________________________________\n", "activation_18 (Activation) (None, 8, 8, 128) 0 bn3b_branch2b[0][0] \n", "____________________________________________________________________________________________________\n", "res3b_branch2c (Conv2D) (None, 8, 8, 512) 66048 activation_18[0][0] \n", "____________________________________________________________________________________________________\n", "bn3b_branch2c (BatchNormalizatio (None, 8, 8, 512) 2048 res3b_branch2c[0][0] \n", "____________________________________________________________________________________________________\n", "add_6 (Add) (None, 8, 8, 512) 0 bn3b_branch2c[0][0] \n", " activation_16[0][0] \n", "____________________________________________________________________________________________________\n", "activation_19 (Activation) (None, 8, 8, 512) 0 add_6[0][0] \n", "____________________________________________________________________________________________________\n", "res3c_branch2a (Conv2D) (None, 8, 8, 128) 65664 activation_19[0][0] \n", "____________________________________________________________________________________________________\n", "bn3c_branch2a (BatchNormalizatio (None, 8, 8, 128) 512 res3c_branch2a[0][0] \n", "____________________________________________________________________________________________________\n", "activation_20 (Activation) (None, 8, 8, 128) 0 bn3c_branch2a[0][0] \n", "____________________________________________________________________________________________________\n", "res3c_branch2b (Conv2D) (None, 8, 8, 128) 147584 activation_20[0][0] \n", "____________________________________________________________________________________________________\n", "bn3c_branch2b (BatchNormalizatio (None, 8, 8, 128) 512 res3c_branch2b[0][0] \n", "____________________________________________________________________________________________________\n", "activation_21 (Activation) (None, 8, 8, 128) 0 bn3c_branch2b[0][0] \n", "____________________________________________________________________________________________________\n", "res3c_branch2c (Conv2D) (None, 8, 8, 512) 66048 activation_21[0][0] \n", "____________________________________________________________________________________________________\n", "bn3c_branch2c (BatchNormalizatio (None, 8, 8, 512) 2048 res3c_branch2c[0][0] \n", "____________________________________________________________________________________________________\n", "add_7 (Add) (None, 8, 8, 512) 0 bn3c_branch2c[0][0] \n", " activation_19[0][0] \n", "____________________________________________________________________________________________________\n", "activation_22 (Activation) (None, 8, 8, 512) 0 add_7[0][0] \n", "____________________________________________________________________________________________________\n", "res3d_branch2a (Conv2D) (None, 8, 8, 128) 65664 activation_22[0][0] \n", "____________________________________________________________________________________________________\n", "bn3d_branch2a (BatchNormalizatio (None, 8, 8, 128) 512 res3d_branch2a[0][0] \n", "____________________________________________________________________________________________________\n", "activation_23 (Activation) (None, 8, 8, 128) 0 bn3d_branch2a[0][0] \n", "____________________________________________________________________________________________________\n", "res3d_branch2b (Conv2D) (None, 8, 8, 128) 147584 activation_23[0][0] \n", "____________________________________________________________________________________________________\n", "bn3d_branch2b (BatchNormalizatio (None, 8, 8, 128) 512 res3d_branch2b[0][0] \n", "____________________________________________________________________________________________________\n", "activation_24 (Activation) (None, 8, 8, 128) 0 bn3d_branch2b[0][0] \n", "____________________________________________________________________________________________________\n", "res3d_branch2c (Conv2D) (None, 8, 8, 512) 66048 activation_24[0][0] \n", "____________________________________________________________________________________________________\n", "bn3d_branch2c (BatchNormalizatio (None, 8, 8, 512) 2048 res3d_branch2c[0][0] \n", "____________________________________________________________________________________________________\n", "add_8 (Add) (None, 8, 8, 512) 0 bn3d_branch2c[0][0] \n", " activation_22[0][0] \n", "____________________________________________________________________________________________________\n", "activation_25 (Activation) (None, 8, 8, 512) 0 add_8[0][0] \n", "____________________________________________________________________________________________________\n", "res4a_branch2a (Conv2D) (None, 4, 4, 256) 131328 activation_25[0][0] \n", "____________________________________________________________________________________________________\n", "bn4a_branch2a (BatchNormalizatio (None, 4, 4, 256) 1024 res4a_branch2a[0][0] \n", "____________________________________________________________________________________________________\n", "activation_26 (Activation) (None, 4, 4, 256) 0 bn4a_branch2a[0][0] \n", "____________________________________________________________________________________________________\n", "res4a_branch2b (Conv2D) (None, 4, 4, 256) 590080 activation_26[0][0] \n", "____________________________________________________________________________________________________\n", "bn4a_branch2b (BatchNormalizatio (None, 4, 4, 256) 1024 res4a_branch2b[0][0] \n", "____________________________________________________________________________________________________\n", "activation_27 (Activation) (None, 4, 4, 256) 0 bn4a_branch2b[0][0] \n", "____________________________________________________________________________________________________\n", "res4a_branch2c (Conv2D) (None, 4, 4, 1024) 263168 activation_27[0][0] \n", "____________________________________________________________________________________________________\n", "res4a_branch1 (Conv2D) (None, 4, 4, 1024) 525312 activation_25[0][0] \n", "____________________________________________________________________________________________________\n", "bn4a_branch2c (BatchNormalizatio (None, 4, 4, 1024) 4096 res4a_branch2c[0][0] \n", "____________________________________________________________________________________________________\n", "bn4a_branch1 (BatchNormalization (None, 4, 4, 1024) 4096 res4a_branch1[0][0] \n", "____________________________________________________________________________________________________\n", "add_9 (Add) (None, 4, 4, 1024) 0 bn4a_branch2c[0][0] \n", " bn4a_branch1[0][0] \n", "____________________________________________________________________________________________________\n", "activation_28 (Activation) (None, 4, 4, 1024) 0 add_9[0][0] \n", "____________________________________________________________________________________________________\n", "res4b_branch2a (Conv2D) (None, 4, 4, 256) 262400 activation_28[0][0] \n", "____________________________________________________________________________________________________\n", "bn4b_branch2a (BatchNormalizatio (None, 4, 4, 256) 1024 res4b_branch2a[0][0] \n", "____________________________________________________________________________________________________\n", "activation_29 (Activation) (None, 4, 4, 256) 0 bn4b_branch2a[0][0] \n", "____________________________________________________________________________________________________\n", "res4b_branch2b (Conv2D) (None, 4, 4, 256) 590080 activation_29[0][0] \n", "____________________________________________________________________________________________________\n", "bn4b_branch2b (BatchNormalizatio (None, 4, 4, 256) 1024 res4b_branch2b[0][0] \n", "____________________________________________________________________________________________________\n", "activation_30 (Activation) (None, 4, 4, 256) 0 bn4b_branch2b[0][0] \n", "____________________________________________________________________________________________________\n", "res4b_branch2c (Conv2D) (None, 4, 4, 1024) 263168 activation_30[0][0] \n", "____________________________________________________________________________________________________\n", "bn4b_branch2c (BatchNormalizatio (None, 4, 4, 1024) 4096 res4b_branch2c[0][0] \n", "____________________________________________________________________________________________________\n", "add_10 (Add) (None, 4, 4, 1024) 0 bn4b_branch2c[0][0] \n", " activation_28[0][0] \n", "____________________________________________________________________________________________________\n", "activation_31 (Activation) (None, 4, 4, 1024) 0 add_10[0][0] \n", "____________________________________________________________________________________________________\n", "res4c_branch2a (Conv2D) (None, 4, 4, 256) 262400 activation_31[0][0] \n", "____________________________________________________________________________________________________\n", "bn4c_branch2a (BatchNormalizatio (None, 4, 4, 256) 1024 res4c_branch2a[0][0] \n", "____________________________________________________________________________________________________\n", "activation_32 (Activation) (None, 4, 4, 256) 0 bn4c_branch2a[0][0] \n", "____________________________________________________________________________________________________\n", "res4c_branch2b (Conv2D) (None, 4, 4, 256) 590080 activation_32[0][0] \n", "____________________________________________________________________________________________________\n", "bn4c_branch2b (BatchNormalizatio (None, 4, 4, 256) 1024 res4c_branch2b[0][0] \n", "____________________________________________________________________________________________________\n", "activation_33 (Activation) (None, 4, 4, 256) 0 bn4c_branch2b[0][0] \n", "____________________________________________________________________________________________________\n", "res4c_branch2c (Conv2D) (None, 4, 4, 1024) 263168 activation_33[0][0] \n", "____________________________________________________________________________________________________\n", "bn4c_branch2c (BatchNormalizatio (None, 4, 4, 1024) 4096 res4c_branch2c[0][0] \n", "____________________________________________________________________________________________________\n", "add_11 (Add) (None, 4, 4, 1024) 0 bn4c_branch2c[0][0] \n", " activation_31[0][0] \n", "____________________________________________________________________________________________________\n", "activation_34 (Activation) (None, 4, 4, 1024) 0 add_11[0][0] \n", "____________________________________________________________________________________________________\n", "res4d_branch2a (Conv2D) (None, 4, 4, 256) 262400 activation_34[0][0] \n", "____________________________________________________________________________________________________\n", "bn4d_branch2a (BatchNormalizatio (None, 4, 4, 256) 1024 res4d_branch2a[0][0] \n", "____________________________________________________________________________________________________\n", "activation_35 (Activation) (None, 4, 4, 256) 0 bn4d_branch2a[0][0] \n", "____________________________________________________________________________________________________\n", "res4d_branch2b (Conv2D) (None, 4, 4, 256) 590080 activation_35[0][0] \n", "____________________________________________________________________________________________________\n", "bn4d_branch2b (BatchNormalizatio (None, 4, 4, 256) 1024 res4d_branch2b[0][0] \n", "____________________________________________________________________________________________________\n", "activation_36 (Activation) (None, 4, 4, 256) 0 bn4d_branch2b[0][0] \n", "____________________________________________________________________________________________________\n", "res4d_branch2c (Conv2D) (None, 4, 4, 1024) 263168 activation_36[0][0] \n", "____________________________________________________________________________________________________\n", "bn4d_branch2c (BatchNormalizatio (None, 4, 4, 1024) 4096 res4d_branch2c[0][0] \n", "____________________________________________________________________________________________________\n", "add_12 (Add) (None, 4, 4, 1024) 0 bn4d_branch2c[0][0] \n", " activation_34[0][0] \n", "____________________________________________________________________________________________________\n", "activation_37 (Activation) (None, 4, 4, 1024) 0 add_12[0][0] \n", "____________________________________________________________________________________________________\n", "res4e_branch2a (Conv2D) (None, 4, 4, 256) 262400 activation_37[0][0] \n", "____________________________________________________________________________________________________\n", "bn4e_branch2a (BatchNormalizatio (None, 4, 4, 256) 1024 res4e_branch2a[0][0] \n", "____________________________________________________________________________________________________\n", "activation_38 (Activation) (None, 4, 4, 256) 0 bn4e_branch2a[0][0] \n", "____________________________________________________________________________________________________\n", "res4e_branch2b (Conv2D) (None, 4, 4, 256) 590080 activation_38[0][0] \n", "____________________________________________________________________________________________________\n", "bn4e_branch2b (BatchNormalizatio (None, 4, 4, 256) 1024 res4e_branch2b[0][0] \n", "____________________________________________________________________________________________________\n", "activation_39 (Activation) (None, 4, 4, 256) 0 bn4e_branch2b[0][0] \n", "____________________________________________________________________________________________________\n", "res4e_branch2c (Conv2D) (None, 4, 4, 1024) 263168 activation_39[0][0] \n", "____________________________________________________________________________________________________\n", "bn4e_branch2c (BatchNormalizatio (None, 4, 4, 1024) 4096 res4e_branch2c[0][0] \n", "____________________________________________________________________________________________________\n", "add_13 (Add) (None, 4, 4, 1024) 0 bn4e_branch2c[0][0] \n", " activation_37[0][0] \n", "____________________________________________________________________________________________________\n", "activation_40 (Activation) (None, 4, 4, 1024) 0 add_13[0][0] \n", "____________________________________________________________________________________________________\n", "res4f_branch2a (Conv2D) (None, 4, 4, 256) 262400 activation_40[0][0] \n", "____________________________________________________________________________________________________\n", "bn4f_branch2a (BatchNormalizatio (None, 4, 4, 256) 1024 res4f_branch2a[0][0] \n", "____________________________________________________________________________________________________\n", "activation_41 (Activation) (None, 4, 4, 256) 0 bn4f_branch2a[0][0] \n", "____________________________________________________________________________________________________\n", "res4f_branch2b (Conv2D) (None, 4, 4, 256) 590080 activation_41[0][0] \n", "____________________________________________________________________________________________________\n", "bn4f_branch2b (BatchNormalizatio (None, 4, 4, 256) 1024 res4f_branch2b[0][0] \n", "____________________________________________________________________________________________________\n", "activation_42 (Activation) (None, 4, 4, 256) 0 bn4f_branch2b[0][0] \n", "____________________________________________________________________________________________________\n", "res4f_branch2c (Conv2D) (None, 4, 4, 1024) 263168 activation_42[0][0] \n", "____________________________________________________________________________________________________\n", "bn4f_branch2c (BatchNormalizatio (None, 4, 4, 1024) 4096 res4f_branch2c[0][0] \n", "____________________________________________________________________________________________________\n", "add_14 (Add) (None, 4, 4, 1024) 0 bn4f_branch2c[0][0] \n", " activation_40[0][0] \n", "____________________________________________________________________________________________________\n", "activation_43 (Activation) (None, 4, 4, 1024) 0 add_14[0][0] \n", "____________________________________________________________________________________________________\n", "res5a_branch2a (Conv2D) (None, 2, 2, 512) 524800 activation_43[0][0] \n", "____________________________________________________________________________________________________\n", "bn5a_branch2a (BatchNormalizatio (None, 2, 2, 512) 2048 res5a_branch2a[0][0] \n", "____________________________________________________________________________________________________\n", "activation_44 (Activation) (None, 2, 2, 512) 0 bn5a_branch2a[0][0] \n", "____________________________________________________________________________________________________\n", "res5a_branch2b (Conv2D) (None, 2, 2, 512) 2359808 activation_44[0][0] \n", "____________________________________________________________________________________________________\n", "bn5a_branch2b (BatchNormalizatio (None, 2, 2, 512) 2048 res5a_branch2b[0][0] \n", "____________________________________________________________________________________________________\n", "activation_45 (Activation) (None, 2, 2, 512) 0 bn5a_branch2b[0][0] \n", "____________________________________________________________________________________________________\n", "res5a_branch2c (Conv2D) (None, 2, 2, 2048) 1050624 activation_45[0][0] \n", "____________________________________________________________________________________________________\n", "res5a_branch1 (Conv2D) (None, 2, 2, 2048) 2099200 activation_43[0][0] \n", "____________________________________________________________________________________________________\n", "bn5a_branch2c (BatchNormalizatio (None, 2, 2, 2048) 8192 res5a_branch2c[0][0] \n", "____________________________________________________________________________________________________\n", "bn5a_branch1 (BatchNormalization (None, 2, 2, 2048) 8192 res5a_branch1[0][0] \n", "____________________________________________________________________________________________________\n", "add_15 (Add) (None, 2, 2, 2048) 0 bn5a_branch2c[0][0] \n", " bn5a_branch1[0][0] \n", "____________________________________________________________________________________________________\n", "activation_46 (Activation) (None, 2, 2, 2048) 0 add_15[0][0] \n", "____________________________________________________________________________________________________\n", "res5b_branch2a (Conv2D) (None, 2, 2, 512) 1049088 activation_46[0][0] \n", "____________________________________________________________________________________________________\n", "bn5b_branch2a (BatchNormalizatio (None, 2, 2, 512) 2048 res5b_branch2a[0][0] \n", "____________________________________________________________________________________________________\n", "activation_47 (Activation) (None, 2, 2, 512) 0 bn5b_branch2a[0][0] \n", "____________________________________________________________________________________________________\n", "res5b_branch2b (Conv2D) (None, 2, 2, 512) 2359808 activation_47[0][0] \n", "____________________________________________________________________________________________________\n", "bn5b_branch2b (BatchNormalizatio (None, 2, 2, 512) 2048 res5b_branch2b[0][0] \n", "____________________________________________________________________________________________________\n", "activation_48 (Activation) (None, 2, 2, 512) 0 bn5b_branch2b[0][0] \n", "____________________________________________________________________________________________________\n", "res5b_branch2c (Conv2D) (None, 2, 2, 2048) 1050624 activation_48[0][0] \n", "____________________________________________________________________________________________________\n", "bn5b_branch2c (BatchNormalizatio (None, 2, 2, 2048) 8192 res5b_branch2c[0][0] \n", "____________________________________________________________________________________________________\n", "add_16 (Add) (None, 2, 2, 2048) 0 bn5b_branch2c[0][0] \n", " activation_46[0][0] \n", "____________________________________________________________________________________________________\n", "activation_49 (Activation) (None, 2, 2, 2048) 0 add_16[0][0] \n", "____________________________________________________________________________________________________\n", "res5c_branch2a (Conv2D) (None, 2, 2, 512) 1049088 activation_49[0][0] \n", "____________________________________________________________________________________________________\n", "bn5c_branch2a (BatchNormalizatio (None, 2, 2, 512) 2048 res5c_branch2a[0][0] \n", "____________________________________________________________________________________________________\n", "activation_50 (Activation) (None, 2, 2, 512) 0 bn5c_branch2a[0][0] \n", "____________________________________________________________________________________________________\n", "res5c_branch2b (Conv2D) (None, 2, 2, 512) 2359808 activation_50[0][0] \n", "____________________________________________________________________________________________________\n", "bn5c_branch2b (BatchNormalizatio (None, 2, 2, 512) 2048 res5c_branch2b[0][0] \n", "____________________________________________________________________________________________________\n", "activation_51 (Activation) (None, 2, 2, 512) 0 bn5c_branch2b[0][0] \n", "____________________________________________________________________________________________________\n", "res5c_branch2c (Conv2D) (None, 2, 2, 2048) 1050624 activation_51[0][0] \n", "____________________________________________________________________________________________________\n", "bn5c_branch2c (BatchNormalizatio (None, 2, 2, 2048) 8192 res5c_branch2c[0][0] \n", "____________________________________________________________________________________________________\n", "add_17 (Add) (None, 2, 2, 2048) 0 bn5c_branch2c[0][0] \n", " activation_49[0][0] \n", "____________________________________________________________________________________________________\n", "activation_52 (Activation) (None, 2, 2, 2048) 0 add_17[0][0] \n", "____________________________________________________________________________________________________\n", "avg_pool (AveragePooling2D) (None, 1, 1, 2048) 0 activation_52[0][0] \n", "____________________________________________________________________________________________________\n", "flatten_1 (Flatten) (None, 2048) 0 avg_pool[0][0] \n", "____________________________________________________________________________________________________\n", "fc6 (Dense) (None, 6) 12294 flatten_1[0][0] \n", "====================================================================================================\n", "Total params: 23,600,006\n", "Trainable params: 23,546,886\n", "Non-trainable params: 53,120\n", "____________________________________________________________________________________________________\n" ] } ], "source": [ "model.summary()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Finally, run the code below to visualize your ResNet50. You can also download a .png picture of your model by going to \"File -> Open...-> model.png\"." ] }, { "cell_type": "code", "execution_count": 53, "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "G\n", "\n", "\n", "140557328695368\n", "\n", "input_1: InputLayer\n", "\n", "\n", "140557328695480\n", "\n", "zero_padding2d_1: ZeroPadding2D\n", "\n", "\n", "140557328695368->140557328695480\n", "\n", "\n", "\n", "\n", "140557328696040\n", "\n", "conv1: Conv2D\n", "\n", "\n", "140557328695480->140557328696040\n", "\n", "\n", "\n", "\n", "140557328696208\n", "\n", "bn_conv1: BatchNormalization\n", "\n", "\n", "140557328696040->140557328696208\n", "\n", "\n", "\n", "\n", "140557328696768\n", "\n", "activation_4: Activation\n", "\n", "\n", "140557328696208->140557328696768\n", "\n", "\n", "\n", "\n", "140557328696824\n", "\n", "max_pooling2d_1: MaxPooling2D\n", "\n", "\n", "140557328696768->140557328696824\n", "\n", "\n", "\n", "\n", "140557328696992\n", "\n", "res2a_branch2a: Conv2D\n", "\n", "\n", "140557328696824->140557328696992\n", "\n", "\n", "\n", "\n", "140557328698784\n", "\n", "res2a_branch1: Conv2D\n", "\n", "\n", "140557328696824->140557328698784\n", "\n", "\n", "\n", "\n", "140557328697328\n", "\n", "bn2a_branch2a: BatchNormalization\n", "\n", "\n", "140557328696992->140557328697328\n", "\n", "\n", "\n", "\n", "140557328697664\n", "\n", "activation_5: Activation\n", "\n", "\n", "140557328697328->140557328697664\n", "\n", "\n", "\n", "\n", "140557328697720\n", "\n", "res2a_branch2b: Conv2D\n", "\n", "\n", "140557328697664->140557328697720\n", "\n", "\n", "\n", "\n", "140557328698056\n", "\n", "bn2a_branch2b: BatchNormalization\n", "\n", "\n", "140557328697720->140557328698056\n", "\n", "\n", "\n", "\n", "140557328698392\n", "\n", "activation_6: Activation\n", "\n", "\n", "140557328698056->140557328698392\n", "\n", "\n", "\n", "\n", "140557328698448\n", "\n", "res2a_branch2c: Conv2D\n", "\n", "\n", "140557328698392->140557328698448\n", "\n", "\n", "\n", "\n", "140557328699176\n", "\n", "bn2a_branch2c: BatchNormalization\n", "\n", "\n", "140557328698448->140557328699176\n", "\n", "\n", "\n", "\n", "140557474970144\n", "\n", "bn2a_branch1: BatchNormalization\n", "\n", "\n", "140557328698784->140557474970144\n", "\n", "\n", "\n", "\n", "140557328724432\n", "\n", "add_2: Add\n", "\n", "\n", "140557328699176->140557328724432\n", "\n", "\n", "\n", "\n", "140557474970144->140557328724432\n", "\n", "\n", "\n", "\n", "140557328724488\n", "\n", "activation_7: Activation\n", "\n", "\n", "140557328724432->140557328724488\n", "\n", "\n", "\n", "\n", "140557328724544\n", "\n", "res2b_branch2a: Conv2D\n", "\n", "\n", "140557328724488->140557328724544\n", "\n", "\n", "\n", "\n", "140557328726672\n", "\n", "add_3: Add\n", "\n", "\n", "140557328724488->140557328726672\n", "\n", "\n", "\n", "\n", "140557328724880\n", "\n", "bn2b_branch2a: BatchNormalization\n", "\n", "\n", "140557328724544->140557328724880\n", "\n", "\n", "\n", "\n", "140557328725216\n", "\n", "activation_8: Activation\n", "\n", "\n", "140557328724880->140557328725216\n", "\n", "\n", "\n", "\n", "140557328725272\n", "\n", "res2b_branch2b: Conv2D\n", "\n", "\n", "140557328725216->140557328725272\n", "\n", "\n", "\n", "\n", "140557328725608\n", "\n", "bn2b_branch2b: BatchNormalization\n", "\n", "\n", "140557328725272->140557328725608\n", "\n", "\n", "\n", "\n", "140557328725944\n", "\n", "activation_9: Activation\n", "\n", "\n", "140557328725608->140557328725944\n", "\n", "\n", "\n", "\n", "140557328726000\n", "\n", "res2b_branch2c: Conv2D\n", "\n", "\n", "140557328725944->140557328726000\n", "\n", "\n", "\n", "\n", "140557328726336\n", "\n", "bn2b_branch2c: BatchNormalization\n", "\n", "\n", "140557328726000->140557328726336\n", "\n", "\n", "\n", "\n", "140557328726336->140557328726672\n", "\n", "\n", "\n", "\n", "140557328726728\n", "\n", "activation_10: Activation\n", "\n", "\n", "140557328726672->140557328726728\n", "\n", "\n", "\n", "\n", "140557328726784\n", "\n", "res2c_branch2a: Conv2D\n", "\n", "\n", "140557328726728->140557328726784\n", "\n", "\n", "\n", "\n", "140557328237456\n", "\n", "add_4: Add\n", "\n", "\n", "140557328726728->140557328237456\n", "\n", "\n", "\n", "\n", "140557328727120\n", "\n", "bn2c_branch2a: BatchNormalization\n", "\n", "\n", "140557328726784->140557328727120\n", "\n", "\n", "\n", "\n", "140557328727456\n", "\n", "activation_11: Activation\n", "\n", "\n", "140557328727120->140557328727456\n", "\n", "\n", "\n", "\n", "140557328727512\n", "\n", "res2c_branch2b: Conv2D\n", "\n", "\n", "140557328727456->140557328727512\n", "\n", "\n", "\n", "\n", "140557328727848\n", "\n", "bn2c_branch2b: BatchNormalization\n", "\n", "\n", "140557328727512->140557328727848\n", "\n", "\n", "\n", "\n", "140557328699344\n", "\n", "activation_12: Activation\n", "\n", "\n", "140557328727848->140557328699344\n", "\n", "\n", "\n", "\n", "140557328236784\n", "\n", "res2c_branch2c: Conv2D\n", "\n", "\n", "140557328699344->140557328236784\n", "\n", "\n", "\n", "\n", "140557328237120\n", "\n", "bn2c_branch2c: BatchNormalization\n", "\n", "\n", "140557328236784->140557328237120\n", "\n", "\n", "\n", "\n", "140557328237120->140557328237456\n", "\n", "\n", "\n", "\n", "140557328237512\n", "\n", "activation_13: Activation\n", "\n", "\n", "140557328237456->140557328237512\n", "\n", "\n", "\n", "\n", "140557328237568\n", "\n", "res3a_branch2a: Conv2D\n", "\n", "\n", "140557328237512->140557328237568\n", "\n", "\n", "\n", "\n", "140557328239360\n", "\n", "res3a_branch1: Conv2D\n", "\n", "\n", "140557328237512->140557328239360\n", "\n", "\n", "\n", "\n", "140557328237904\n", "\n", "bn3a_branch2a: BatchNormalization\n", "\n", "\n", "140557328237568->140557328237904\n", "\n", "\n", "\n", "\n", "140557328238240\n", "\n", "activation_14: Activation\n", "\n", "\n", "140557328237904->140557328238240\n", "\n", "\n", "\n", "\n", "140557328238296\n", "\n", "res3a_branch2b: Conv2D\n", "\n", "\n", "140557328238240->140557328238296\n", "\n", "\n", "\n", "\n", "140557328238632\n", "\n", "bn3a_branch2b: BatchNormalization\n", "\n", "\n", "140557328238296->140557328238632\n", "\n", "\n", "\n", "\n", "140557328238968\n", "\n", "activation_15: Activation\n", "\n", "\n", "140557328238632->140557328238968\n", "\n", "\n", "\n", "\n", "140557328239024\n", "\n", "res3a_branch2c: Conv2D\n", "\n", "\n", "140557328238968->140557328239024\n", "\n", "\n", "\n", "\n", "140557328239752\n", "\n", "bn3a_branch2c: BatchNormalization\n", "\n", "\n", "140557328239024->140557328239752\n", "\n", "\n", "\n", "\n", "140557328240088\n", "\n", "bn3a_branch1: BatchNormalization\n", "\n", "\n", "140557328239360->140557328240088\n", "\n", "\n", "\n", "\n", "140557328240368\n", "\n", "add_5: Add\n", "\n", "\n", "140557328239752->140557328240368\n", "\n", "\n", "\n", "\n", "140557328240088->140557328240368\n", "\n", "\n", "\n", "\n", "140557328240424\n", "\n", "activation_16: Activation\n", "\n", "\n", "140557328240368->140557328240424\n", "\n", "\n", "\n", "\n", "140557328240480\n", "\n", "res3b_branch2a: Conv2D\n", "\n", "\n", "140557328240424->140557328240480\n", "\n", "\n", "\n", "\n", "140557328271344\n", "\n", "add_6: Add\n", "\n", "\n", "140557328240424->140557328271344\n", "\n", "\n", "\n", "\n", "140557328728016\n", "\n", "bn3b_branch2a: BatchNormalization\n", "\n", "\n", "140557328240480->140557328728016\n", "\n", "\n", "\n", "\n", "140557328269888\n", "\n", "activation_17: Activation\n", "\n", "\n", "140557328728016->140557328269888\n", "\n", "\n", "\n", "\n", "140557328269944\n", "\n", "res3b_branch2b: Conv2D\n", "\n", "\n", "140557328269888->140557328269944\n", "\n", "\n", "\n", "\n", "140557328270280\n", "\n", "bn3b_branch2b: BatchNormalization\n", "\n", "\n", "140557328269944->140557328270280\n", "\n", "\n", "\n", "\n", "140557328270616\n", "\n", "activation_18: Activation\n", "\n", "\n", "140557328270280->140557328270616\n", "\n", "\n", "\n", "\n", "140557328270672\n", "\n", "res3b_branch2c: Conv2D\n", "\n", "\n", "140557328270616->140557328270672\n", "\n", "\n", "\n", "\n", "140557328271008\n", "\n", "bn3b_branch2c: BatchNormalization\n", "\n", "\n", "140557328270672->140557328271008\n", "\n", "\n", "\n", "\n", "140557328271008->140557328271344\n", "\n", "\n", "\n", "\n", "140557328271400\n", "\n", "activation_19: Activation\n", "\n", "\n", "140557328271344->140557328271400\n", "\n", "\n", "\n", "\n", "140557328271456\n", "\n", "res3c_branch2a: Conv2D\n", "\n", "\n", "140557328271400->140557328271456\n", "\n", "\n", "\n", "\n", "140557328240592\n", "\n", "add_7: Add\n", "\n", "\n", "140557328271400->140557328240592\n", "\n", "\n", "\n", "\n", "140557328271792\n", "\n", "bn3c_branch2a: BatchNormalization\n", "\n", "\n", "140557328271456->140557328271792\n", "\n", "\n", "\n", "\n", "140557328272128\n", "\n", "activation_20: Activation\n", "\n", "\n", "140557328271792->140557328272128\n", "\n", "\n", "\n", "\n", "140557328272184\n", "\n", "res3c_branch2b: Conv2D\n", "\n", "\n", "140557328272128->140557328272184\n", "\n", "\n", "\n", "\n", "140557328272520\n", "\n", "bn3c_branch2b: BatchNormalization\n", "\n", "\n", "140557328272184->140557328272520\n", "\n", "\n", "\n", "\n", "140557328272856\n", "\n", "activation_21: Activation\n", "\n", "\n", "140557328272520->140557328272856\n", "\n", "\n", "\n", "\n", "140557328272912\n", "\n", "res3c_branch2c: Conv2D\n", "\n", "\n", "140557328272856->140557328272912\n", "\n", "\n", "\n", "\n", "140557328273248\n", "\n", "bn3c_branch2c: BatchNormalization\n", "\n", "\n", "140557328272912->140557328273248\n", "\n", "\n", "\n", "\n", "140557328273248->140557328240592\n", "\n", "\n", "\n", "\n", "140557328294184\n", "\n", "activation_22: Activation\n", "\n", "\n", "140557328240592->140557328294184\n", "\n", "\n", "\n", "\n", "140557328294240\n", "\n", "res3d_branch2a: Conv2D\n", "\n", "\n", "140557328294184->140557328294240\n", "\n", "\n", "\n", "\n", "140557328296368\n", "\n", "add_8: Add\n", "\n", "\n", "140557328294184->140557328296368\n", "\n", "\n", "\n", "\n", "140557328294576\n", "\n", "bn3d_branch2a: BatchNormalization\n", "\n", "\n", "140557328294240->140557328294576\n", "\n", "\n", "\n", "\n", "140557328294912\n", "\n", "activation_23: Activation\n", "\n", "\n", "140557328294576->140557328294912\n", "\n", "\n", "\n", "\n", "140557328294968\n", "\n", "res3d_branch2b: Conv2D\n", "\n", "\n", "140557328294912->140557328294968\n", "\n", "\n", "\n", "\n", "140557328295304\n", "\n", "bn3d_branch2b: BatchNormalization\n", "\n", "\n", "140557328294968->140557328295304\n", "\n", "\n", "\n", "\n", "140557328295640\n", "\n", "activation_24: Activation\n", "\n", "\n", "140557328295304->140557328295640\n", "\n", "\n", "\n", "\n", "140557328295696\n", "\n", "res3d_branch2c: Conv2D\n", "\n", "\n", "140557328295640->140557328295696\n", "\n", "\n", "\n", "\n", "140557328296032\n", "\n", "bn3d_branch2c: BatchNormalization\n", "\n", "\n", "140557328295696->140557328296032\n", "\n", "\n", "\n", "\n", "140557328296032->140557328296368\n", "\n", "\n", "\n", "\n", "140557328296424\n", "\n", "activation_25: Activation\n", "\n", "\n", "140557328296368->140557328296424\n", "\n", "\n", "\n", "\n", "140557328296480\n", "\n", "res4a_branch2a: Conv2D\n", "\n", "\n", "140557328296424->140557328296480\n", "\n", "\n", "\n", "\n", "140557328327008\n", "\n", "res4a_branch1: Conv2D\n", "\n", "\n", "140557328296424->140557328327008\n", "\n", "\n", "\n", "\n", "140557328296816\n", "\n", "bn4a_branch2a: BatchNormalization\n", "\n", "\n", "140557328296480->140557328296816\n", "\n", "\n", "\n", "\n", "140557328297152\n", "\n", "activation_26: Activation\n", "\n", "\n", "140557328296816->140557328297152\n", "\n", "\n", "\n", "\n", "140557328297208\n", "\n", "res4a_branch2b: Conv2D\n", "\n", "\n", "140557328297152->140557328297208\n", "\n", "\n", "\n", "\n", "140557328297544\n", "\n", "bn4a_branch2b: BatchNormalization\n", "\n", "\n", "140557328297208->140557328297544\n", "\n", "\n", "\n", "\n", "140557328297880\n", "\n", "activation_27: Activation\n", "\n", "\n", "140557328297544->140557328297880\n", "\n", "\n", "\n", "\n", "140557328273360\n", "\n", "res4a_branch2c: Conv2D\n", "\n", "\n", "140557328297880->140557328273360\n", "\n", "\n", "\n", "\n", "140557328327400\n", "\n", "bn4a_branch2c: BatchNormalization\n", "\n", "\n", "140557328273360->140557328327400\n", "\n", "\n", "\n", "\n", "140557328327736\n", "\n", "bn4a_branch1: BatchNormalization\n", "\n", "\n", "140557328327008->140557328327736\n", "\n", "\n", "\n", "\n", "140557328328128\n", "\n", "add_9: Add\n", "\n", "\n", "140557328327400->140557328328128\n", "\n", "\n", "\n", "\n", "140557328327736->140557328328128\n", "\n", "\n", "\n", "\n", "140557328328184\n", "\n", "activation_28: Activation\n", "\n", "\n", "140557328328128->140557328328184\n", "\n", "\n", "\n", "\n", "140557328328240\n", "\n", "res4b_branch2a: Conv2D\n", "\n", "\n", "140557328328184->140557328328240\n", "\n", "\n", "\n", "\n", "140557328330368\n", "\n", "add_10: Add\n", "\n", "\n", "140557328328184->140557328330368\n", "\n", "\n", "\n", "\n", "140557328328576\n", "\n", "bn4b_branch2a: BatchNormalization\n", "\n", "\n", "140557328328240->140557328328576\n", "\n", "\n", "\n", "\n", "140557328328912\n", "\n", "activation_29: Activation\n", "\n", "\n", "140557328328576->140557328328912\n", "\n", "\n", "\n", "\n", "140557328328968\n", "\n", "res4b_branch2b: Conv2D\n", "\n", "\n", "140557328328912->140557328328968\n", "\n", "\n", "\n", "\n", "140557328329304\n", "\n", "bn4b_branch2b: BatchNormalization\n", "\n", "\n", "140557328328968->140557328329304\n", "\n", "\n", "\n", "\n", "140557328329640\n", "\n", "activation_30: Activation\n", "\n", "\n", "140557328329304->140557328329640\n", "\n", "\n", "\n", "\n", "140557328329696\n", "\n", "res4b_branch2c: Conv2D\n", "\n", "\n", "140557328329640->140557328329696\n", "\n", "\n", "\n", "\n", "140557328330032\n", "\n", "bn4b_branch2c: BatchNormalization\n", "\n", "\n", "140557328329696->140557328330032\n", "\n", "\n", "\n", "\n", "140557328330032->140557328330368\n", "\n", "\n", "\n", "\n", "140557328330424\n", "\n", "activation_31: Activation\n", "\n", "\n", "140557328330368->140557328330424\n", "\n", "\n", "\n", "\n", "140557328330480\n", "\n", "res4c_branch2a: Conv2D\n", "\n", "\n", "140557328330424->140557328330480\n", "\n", "\n", "\n", "\n", "140557328361344\n", "\n", "add_11: Add\n", "\n", "\n", "140557328330424->140557328361344\n", "\n", "\n", "\n", "\n", "140557328297936\n", "\n", "bn4c_branch2a: BatchNormalization\n", "\n", "\n", "140557328330480->140557328297936\n", "\n", "\n", "\n", "\n", "140557328359888\n", "\n", "activation_32: Activation\n", "\n", "\n", "140557328297936->140557328359888\n", "\n", "\n", "\n", "\n", "140557328359944\n", "\n", "res4c_branch2b: Conv2D\n", "\n", "\n", "140557328359888->140557328359944\n", "\n", "\n", "\n", "\n", "140557328360280\n", "\n", "bn4c_branch2b: BatchNormalization\n", "\n", "\n", "140557328359944->140557328360280\n", "\n", "\n", "\n", "\n", "140557328360616\n", "\n", "activation_33: Activation\n", "\n", "\n", "140557328360280->140557328360616\n", "\n", "\n", "\n", "\n", "140557328360672\n", "\n", "res4c_branch2c: Conv2D\n", "\n", "\n", "140557328360616->140557328360672\n", "\n", "\n", "\n", "\n", "140557328361008\n", "\n", "bn4c_branch2c: BatchNormalization\n", "\n", "\n", "140557328360672->140557328361008\n", "\n", "\n", "\n", "\n", "140557328361008->140557328361344\n", "\n", "\n", "\n", "\n", "140557328361400\n", "\n", "activation_34: Activation\n", "\n", "\n", "140557328361344->140557328361400\n", "\n", "\n", "\n", "\n", "140557328361456\n", "\n", "res4d_branch2a: Conv2D\n", "\n", "\n", "140557328361400->140557328361456\n", "\n", "\n", "\n", "\n", "140557328330648\n", "\n", "add_12: Add\n", "\n", "\n", "140557328361400->140557328330648\n", "\n", "\n", "\n", "\n", "140557328361792\n", "\n", "bn4d_branch2a: BatchNormalization\n", "\n", "\n", "140557328361456->140557328361792\n", "\n", "\n", "\n", "\n", "140557328362128\n", "\n", "activation_35: Activation\n", "\n", "\n", "140557328361792->140557328362128\n", "\n", "\n", "\n", "\n", "140557328362184\n", "\n", "res4d_branch2b: Conv2D\n", "\n", "\n", "140557328362128->140557328362184\n", "\n", "\n", "\n", "\n", "140557328362520\n", "\n", "bn4d_branch2b: BatchNormalization\n", "\n", "\n", "140557328362184->140557328362520\n", "\n", "\n", "\n", "\n", "140557328362856\n", "\n", "activation_36: Activation\n", "\n", "\n", "140557328362520->140557328362856\n", "\n", "\n", "\n", "\n", "140557328362912\n", "\n", "res4d_branch2c: Conv2D\n", "\n", "\n", "140557328362856->140557328362912\n", "\n", "\n", "\n", "\n", "140557328363248\n", "\n", "bn4d_branch2c: BatchNormalization\n", "\n", "\n", "140557328362912->140557328363248\n", "\n", "\n", "\n", "\n", "140557328363248->140557328330648\n", "\n", "\n", "\n", "\n", "140557328388280\n", "\n", "activation_37: Activation\n", "\n", "\n", "140557328330648->140557328388280\n", "\n", "\n", "\n", "\n", "140557328388336\n", "\n", "res4e_branch2a: Conv2D\n", "\n", "\n", "140557328388280->140557328388336\n", "\n", "\n", "\n", "\n", "140557328390464\n", "\n", "add_13: Add\n", "\n", "\n", "140557328388280->140557328390464\n", "\n", "\n", "\n", "\n", "140557328388672\n", "\n", "bn4e_branch2a: BatchNormalization\n", "\n", "\n", "140557328388336->140557328388672\n", "\n", "\n", "\n", "\n", "140557328389008\n", "\n", "activation_38: Activation\n", "\n", "\n", "140557328388672->140557328389008\n", "\n", "\n", "\n", "\n", "140557328389064\n", "\n", "res4e_branch2b: Conv2D\n", "\n", "\n", "140557328389008->140557328389064\n", "\n", "\n", "\n", "\n", "140557328389400\n", "\n", "bn4e_branch2b: BatchNormalization\n", "\n", "\n", "140557328389064->140557328389400\n", "\n", "\n", "\n", "\n", "140557328389736\n", "\n", "activation_39: Activation\n", "\n", "\n", "140557328389400->140557328389736\n", "\n", "\n", "\n", "\n", "140557328389792\n", "\n", "res4e_branch2c: Conv2D\n", "\n", "\n", "140557328389736->140557328389792\n", "\n", "\n", "\n", "\n", "140557328390128\n", "\n", "bn4e_branch2c: BatchNormalization\n", "\n", "\n", "140557328389792->140557328390128\n", "\n", "\n", "\n", "\n", "140557328390128->140557328390464\n", "\n", "\n", "\n", "\n", "140557328390520\n", "\n", "activation_40: Activation\n", "\n", "\n", "140557328390464->140557328390520\n", "\n", "\n", "\n", "\n", "140557328390576\n", "\n", "res4f_branch2a: Conv2D\n", "\n", "\n", "140557328390520->140557328390576\n", "\n", "\n", "\n", "\n", "140557328425536\n", "\n", "add_14: Add\n", "\n", "\n", "140557328390520->140557328425536\n", "\n", "\n", "\n", "\n", "140557328390912\n", "\n", "bn4f_branch2a: BatchNormalization\n", "\n", "\n", "140557328390576->140557328390912\n", "\n", "\n", "\n", "\n", "140557328391248\n", "\n", "activation_41: Activation\n", "\n", "\n", "140557328390912->140557328391248\n", "\n", "\n", "\n", "\n", "140557328391304\n", "\n", "res4f_branch2b: Conv2D\n", "\n", "\n", "140557328391248->140557328391304\n", "\n", "\n", "\n", "\n", "140557328391640\n", "\n", "bn4f_branch2b: BatchNormalization\n", "\n", "\n", "140557328391304->140557328391640\n", "\n", "\n", "\n", "\n", "140557328391976\n", "\n", "activation_42: Activation\n", "\n", "\n", "140557328391640->140557328391976\n", "\n", "\n", "\n", "\n", "140557328392032\n", "\n", "res4f_branch2c: Conv2D\n", "\n", "\n", "140557328391976->140557328392032\n", "\n", "\n", "\n", "\n", "140557328363472\n", "\n", "bn4f_branch2c: BatchNormalization\n", "\n", "\n", "140557328392032->140557328363472\n", "\n", "\n", "\n", "\n", "140557328363472->140557328425536\n", "\n", "\n", "\n", "\n", "140557328993808\n", "\n", "activation_43: Activation\n", "\n", "\n", "140557328425536->140557328993808\n", "\n", "\n", "\n", "\n", "140557328392144\n", "\n", "res5a_branch2a: Conv2D\n", "\n", "\n", "140557328993808->140557328392144\n", "\n", "\n", "\n", "\n", "140557328427328\n", "\n", "res5a_branch1: Conv2D\n", "\n", "\n", "140557328993808->140557328427328\n", "\n", "\n", "\n", "\n", "140557328425872\n", "\n", "bn5a_branch2a: BatchNormalization\n", "\n", "\n", "140557328392144->140557328425872\n", "\n", "\n", "\n", "\n", "140557328426208\n", "\n", "activation_44: Activation\n", "\n", "\n", "140557328425872->140557328426208\n", "\n", "\n", "\n", "\n", "140557328426264\n", "\n", "res5a_branch2b: Conv2D\n", "\n", "\n", "140557328426208->140557328426264\n", "\n", "\n", "\n", "\n", "140557328426600\n", "\n", "bn5a_branch2b: BatchNormalization\n", "\n", "\n", "140557328426264->140557328426600\n", "\n", "\n", "\n", "\n", "140557328426936\n", "\n", "activation_45: Activation\n", "\n", "\n", "140557328426600->140557328426936\n", "\n", "\n", "\n", "\n", "140557328426992\n", "\n", "res5a_branch2c: Conv2D\n", "\n", "\n", "140557328426936->140557328426992\n", "\n", "\n", "\n", "\n", "140557328427720\n", "\n", "bn5a_branch2c: BatchNormalization\n", "\n", "\n", "140557328426992->140557328427720\n", "\n", "\n", "\n", "\n", "140557328428056\n", "\n", "bn5a_branch1: BatchNormalization\n", "\n", "\n", "140557328427328->140557328428056\n", "\n", "\n", "\n", "\n", "140557328428336\n", "\n", "add_15: Add\n", "\n", "\n", "140557328427720->140557328428336\n", "\n", "\n", "\n", "\n", "140557328428056->140557328428336\n", "\n", "\n", "\n", "\n", "140557328428392\n", "\n", "activation_46: Activation\n", "\n", "\n", "140557328428336->140557328428392\n", "\n", "\n", "\n", "\n", "140557328428448\n", "\n", "res5b_branch2a: Conv2D\n", "\n", "\n", "140557328428392->140557328428448\n", "\n", "\n", "\n", "\n", "140557328447024\n", "\n", "add_16: Add\n", "\n", "\n", "140557328428392->140557328447024\n", "\n", "\n", "\n", "\n", "140557328428784\n", "\n", "bn5b_branch2a: BatchNormalization\n", "\n", "\n", "140557328428448->140557328428784\n", "\n", "\n", "\n", "\n", "140557328992912\n", "\n", "activation_47: Activation\n", "\n", "\n", "140557328428784->140557328992912\n", "\n", "\n", "\n", "\n", "140557328445624\n", "\n", "res5b_branch2b: Conv2D\n", "\n", "\n", "140557328992912->140557328445624\n", "\n", "\n", "\n", "\n", "140557328445960\n", "\n", "bn5b_branch2b: BatchNormalization\n", "\n", "\n", "140557328445624->140557328445960\n", "\n", "\n", "\n", "\n", "140557328446296\n", "\n", "activation_48: Activation\n", "\n", "\n", "140557328445960->140557328446296\n", "\n", "\n", "\n", "\n", "140557328446352\n", "\n", "res5b_branch2c: Conv2D\n", "\n", "\n", "140557328446296->140557328446352\n", "\n", "\n", "\n", "\n", "140557328446688\n", "\n", "bn5b_branch2c: BatchNormalization\n", "\n", "\n", "140557328446352->140557328446688\n", "\n", "\n", "\n", "\n", "140557328446688->140557328447024\n", "\n", "\n", "\n", "\n", "140557328447080\n", "\n", "activation_49: Activation\n", "\n", "\n", "140557328447024->140557328447080\n", "\n", "\n", "\n", "\n", "140557328447136\n", "\n", "res5c_branch2a: Conv2D\n", "\n", "\n", "140557328447080->140557328447136\n", "\n", "\n", "\n", "\n", "140557328449264\n", "\n", "add_17: Add\n", "\n", "\n", "140557328447080->140557328449264\n", "\n", "\n", "\n", "\n", "140557328447472\n", "\n", "bn5c_branch2a: BatchNormalization\n", "\n", "\n", "140557328447136->140557328447472\n", "\n", "\n", "\n", "\n", "140557328447808\n", "\n", "activation_50: Activation\n", "\n", "\n", "140557328447472->140557328447808\n", "\n", "\n", "\n", "\n", "140557328447864\n", "\n", "res5c_branch2b: Conv2D\n", "\n", "\n", "140557328447808->140557328447864\n", "\n", "\n", "\n", "\n", "140557328448200\n", "\n", "bn5c_branch2b: BatchNormalization\n", "\n", "\n", "140557328447864->140557328448200\n", "\n", "\n", "\n", "\n", "140557328448536\n", "\n", "activation_51: Activation\n", "\n", "\n", "140557328448200->140557328448536\n", "\n", "\n", "\n", "\n", "140557328448592\n", "\n", "res5c_branch2c: Conv2D\n", "\n", "\n", "140557328448536->140557328448592\n", "\n", "\n", "\n", "\n", "140557328448928\n", "\n", "bn5c_branch2c: BatchNormalization\n", "\n", "\n", "140557328448592->140557328448928\n", "\n", "\n", "\n", "\n", "140557328448928->140557328449264\n", "\n", "\n", "\n", "\n", "140557328449320\n", "\n", "activation_52: Activation\n", "\n", "\n", "140557328449264->140557328449320\n", "\n", "\n", "\n", "\n", "140557328449376\n", "\n", "avg_pool: AveragePooling2D\n", "\n", "\n", "140557328449320->140557328449376\n", "\n", "\n", "\n", "\n", "140557328486472\n", "\n", "flatten_1: Flatten\n", "\n", "\n", "140557328449376->140557328486472\n", "\n", "\n", "\n", "\n", "140557328486584\n", "\n", "fc6: Dense\n", "\n", "\n", "140557328486472->140557328486584\n", "\n", "\n", "\n", "\n", "" ], "text/plain": [ "" ] }, "execution_count": 53, "metadata": {}, "output_type": "execute_result" } ], "source": [ "plot_model(model, to_file='model.png')\n", "SVG(model_to_dot(model).create(prog='dot', format='svg'))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## What you should remember\n", "- Very deep \"plain\" networks don't work in practice because they are hard to train due to vanishing gradients. \n", "- The skip-connections help to address the Vanishing Gradient problem. They also make it easy for a ResNet block to learn an identity function. \n", "- There are two main types of blocks: The identity block and the convolutional block. \n", "- Very deep Residual Networks are built by stacking these blocks together." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### References \n", "\n", "This notebook presents the ResNet algorithm due to He et al. (2015). The implementation here also took significant inspiration and follows the structure given in the GitHub repository of Francois Chollet: \n", "\n", "- Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun - [Deep Residual Learning for Image Recognition (2015)](https://arxiv.org/abs/1512.03385)\n", "- Francois Chollet's GitHub repository: https://github.com/fchollet/deep-learning-models/blob/master/resnet50.py\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "coursera": { "course_slug": "convolutional-neural-networks", "graded_item_id": "OEpi5", "launcher_item_id": "jK9EQ" }, "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 }