Learn practical skills, build real-world projects, and advance your career
Created 5 years ago
import jovian
!pip install jovian --user
Collecting jovian
Downloading https://files.pythonhosted.org/packages/53/b8/07dbaf8e226aabf7909f099bd696dddf25327329dbb22e00691ba9df84cc/jovian-0.1.62.tar.gz
Requirement already satisfied: requests in /home/ubuntu/anaconda3/lib/python3.7/site-packages (from jovian) (2.21.0)
Collecting uuid (from jovian)
Requirement already satisfied: chardet<3.1.0,>=3.0.2 in /home/ubuntu/anaconda3/lib/python3.7/site-packages (from requests->jovian) (3.0.4)
Requirement already satisfied: certifi>=2017.4.17 in /home/ubuntu/anaconda3/lib/python3.7/site-packages (from requests->jovian) (2019.3.9)
Requirement already satisfied: urllib3<1.25,>=1.21.1 in /home/ubuntu/anaconda3/lib/python3.7/site-packages (from requests->jovian) (1.24.1)
Requirement already satisfied: idna<2.9,>=2.5 in /home/ubuntu/anaconda3/lib/python3.7/site-packages (from requests->jovian) (2.8)
Building wheels for collected packages: jovian
Building wheel for jovian (setup.py) ... done
Stored in directory: /home/ubuntu/.cache/pip/wheels/67/9f/b0/b841f81da3f8c9919ed232fa14bba397c5c38fa8df5d125d8a
Successfully built jovian
Installing collected packages: uuid, jovian
Successfully installed jovian-0.1.62 uuid-1.30
Assigment Definition:
In this assignement, we will compare different Deep Convolutional Neural Networks in terms of:
- "number of parameters"
- "inference time"
- "performance".
You will be required to construct the following networks:
- AlexNet
- VGG-16
- Your custom Deep CNN (CNN_5x5_Net): use only 5x5 convolutional kernels (hint: in VGG-16, all convolutional kernels were 3x3)
-
Check the number of parameters vs inference time (by generating random noise image and feed-forward through the networks)
-
Explain the results: why one was faster than the another, what was the key point?
-
Add "Batch Normalization" and/or "Dropout" layers to the networks (AlexNet, VGG-16, Your custom CNN_5x5_Net)
-
Check how does inference time is changing after adding those layers
Note: Framework: we will be using Keras in this assignment.
from datetime import datetime
import keras
from keras.models import Sequential
from keras.layers import Dense, Activation, Dropout, Flatten, Conv2D, MaxPooling2D
import numpy as np
def alexnet(input_data_shape=(224, 224, 3, ), number_of_classes=10):
model = Sequential()
# 1st Convolutional Layer
model.add(Conv2D(filters=96, input_shape=input_data_shape, kernel_size=(11, 11), strides=(4, 4), padding='valid', activation='relu'))
# Max Pooling
model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2), padding='valid'))
# 2nd Convolutional Layer
model.add(Conv2D(filters=256, kernel_size=(11, 11), strides=(1, 1), padding='valid', activation='relu'))
# Max Pooling
model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2), padding='valid'))
# 3rd Convolutional Layer
model.add(Conv2D(filters=384, kernel_size=(3, 3), strides=(1, 1), padding='valid', activation='relu'))
# 4th Convolutional Layer
model.add(Conv2D(filters=384, kernel_size=(3, 3), strides=(1, 1), padding='valid', activation='relu'))
# 5th Convolutional Layer
model.add(Conv2D(filters=256, kernel_size=(3, 3), strides=(1, 1), padding='valid', activation='relu'))
# Max Pooling
model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2), padding='valid'))
# Flatten the feature maps to pass them to Fully Connected Layers
model.add(Flatten())
# Fully Connected Layers
model.add(Dense(4096, activation='relu'))
model.add(Dense(4096, activation='relu'))
model.add(Dense(number_of_classes, activation='softmax'))
model.summary()
return model
def vgg_16(input_data_shape=(224, 224, 3,), number_of_classes=10):
model = Sequential()
# Block 1
model.add(Conv2D(filters=64, input_shape=input_data_shape, kernel_size=(3, 3), padding='same', activation='relu'))
model.add(Conv2D(filters=64, input_shape=input_data_shape, kernel_size=(3, 3), padding='same', activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))
# Block 2
model.add(Conv2D(filters=128, input_shape=input_data_shape, kernel_size=(3, 3), padding='same', activation='relu'))
model.add(Conv2D(filters=128, input_shape=input_data_shape, kernel_size=(3, 3), padding='same', activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))
# Block 3
model.add(Conv2D(filters=256, input_shape=input_data_shape, kernel_size=(3, 3), padding='same', activation='relu'))
model.add(Conv2D(filters=256, input_shape=input_data_shape, kernel_size=(3, 3), padding='same', activation='relu'))
model.add(Conv2D(filters=256, input_shape=input_data_shape, kernel_size=(3, 3), padding='same', activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))
# Block 4
model.add(Conv2D(filters=512, input_shape=input_data_shape, kernel_size=(3, 3), padding='same', activation='relu'))
model.add(Conv2D(filters=512, input_shape=input_data_shape, kernel_size=(3, 3), padding='same', activation='relu'))
model.add(Conv2D(filters=512, input_shape=input_data_shape, kernel_size=(3, 3), padding='same', activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))
# Block 5
model.add(Conv2D(filters=512, input_shape=input_data_shape, kernel_size=(3, 3), padding='same', activation='relu'))
model.add(Conv2D(filters=512, input_shape=input_data_shape, kernel_size=(3, 3), padding='same', activation='relu'))
model.add(Conv2D(filters=512, input_shape=input_data_shape, kernel_size=(3, 3), padding='same', activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))
# Flatten the feature maps to pass them to Fully Connected Layers
model.add(Flatten())
# fully connected layers
model.add(Dense(4096, activation='relu'))
model.add(Dense(4096, activation='relu'))
model.add(Dense(number_of_classes, activation='softmax'))
# Create model.
model.summary()
return model