I'm trying to implement manually the model VGG19 that you can find here: [Model][1]
The model i need is the one you get when calling tf.keras.applications.VGG19(include_top=True,weights=None, input_shape=(32, 32, 3),classes=100)
What i'm doing is:
dropout_rate_layer1 = 64
dropout_rate_layer2 = 128
dropout_rate_layer3 = 256
dropout_rate_layer4 = 512
dropout_rate_layer5 = 4096
input_shape = (32, 32, 3)
data_format = 'channels_last'
max_pool = functools.partial(
tf.keras.layers.MaxPooling2D,
pool_size=(2, 2),
padding='same',
data_format=data_format,
strides=(2, 2))
conv2d = functools.partial(
tf.keras.layers.Conv2D,
kernel_size=3,
padding='same',
data_format=data_format,
activation=tf.nn.relu)
model = tf.keras.models.Sequential([
tf.keras.layers.InputLayer(input_shape=input_shape),
conv2d(filters=dropout_rate_layer1, input_shape=[32, 32, 3]),
conv2d(filters=dropout_rate_layer1),
max_pool(),
conv2d(filters=dropout_rate_layer2),
conv2d(filters=dropout_rate_layer2),
max_pool(),
conv2d(filters=dropout_rate_layer3),
conv2d(filters=dropout_rate_layer3),
conv2d(filters=dropout_rate_layer3),
conv2d(filters=dropout_rate_layer3),
max_pool(),
conv2d(filters=dropout_rate_layer4),
conv2d(filters=dropout_rate_layer4),
conv2d(filters=dropout_rate_layer4),
conv2d(filters=dropout_rate_layer4),
max_pool(),
conv2d(filters=dropout_rate_layer4),
conv2d(filters=dropout_rate_layer4),
conv2d(filters=dropout_rate_layer4),
conv2d(filters=dropout_rate_layer4),
max_pool(),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(dropout_rate_layer5, activation=tf.nn.relu),
tf.keras.layers.Dense(dropout_rate_layer5, activation=tf.nn.relu),
tf.keras.layers.Dense(100, activation=tf.nn.softmax),
])
return model
But the summary is:
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d (Conv2D) (None, 32, 32, 64) 1792
_________________________________________________________________
conv2d_1 (Conv2D) (None, 32, 32, 64) 36928
_________________________________________________________________
max_pooling2d (MaxPooling2D) (None, 16, 16, 64) 0
_________________________________________________________________
conv2d_2 (Conv2D) (None, 16, 16, 128) 73856
_________________________________________________________________
conv2d_3 (Conv2D) (None, 16, 16, 128) 147584
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 8, 8, 128) 0
_________________________________________________________________
conv2d_4 (Conv2D) (None, 8, 8, 256) 295168
_________________________________________________________________
conv2d_5 (Conv2D) (None, 8, 8, 256) 590080
_________________________________________________________________
conv2d_6 (Conv2D) (None, 8, 8, 256) 590080
_________________________________________________________________
conv2d_7 (Conv2D) (None, 8, 8, 256) 590080
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 4, 4, 256) 0
_________________________________________________________________
conv2d_8 (Conv2D) (None, 4, 4, 512) 1180160
_________________________________________________________________
conv2d_9 (Conv2D) (None, 4, 4, 512) 2359808
_________________________________________________________________
conv2d_10 (Conv2D) (None, 4, 4, 512) 2359808
_________________________________________________________________
conv2d_11 (Conv2D) (None, 4, 4, 512) 2359808
_________________________________________________________________
max_pooling2d_3 (MaxPooling2 (None, 2, 2, 512) 0
_________________________________________________________________
conv2d_12 (Conv2D) (None, 2, 2, 512) 2359808
_________________________________________________________________
conv2d_13 (Conv2D) (None, 2, 2, 512) 2359808
_________________________________________________________________
conv2d_14 (Conv2D) (None, 2, 2, 512) 2359808
_________________________________________________________________
conv2d_15 (Conv2D) (None, 2, 2, 512) 2359808
_________________________________________________________________
max_pooling2d_4 (MaxPooling2 (None, 1, 1, 512) 0
_________________________________________________________________
flatten (Flatten) (None, 512) 0
_________________________________________________________________
dense (Dense) (None, 4096) 2101248
_________________________________________________________________
dense_1 (Dense) (None, 4096) 16781312
_________________________________________________________________
dense_2 (Dense) (None, 100) 409700
=================================================================
Total params: 39,316,644
Trainable params: 39,316,644
Non-trainable params: 0
_________________________________________________________________
while for the model tf.keras.applications.VGG19(include_top=True,weights=None, input_shape=(32, 32, 3),classes=100)'
the summary is:
_________________________________________________________________
Model: "vgg19"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_2 (InputLayer) [(None, 32, 32, 3)] 0
_________________________________________________________________
block1_conv1 (Conv2D) (None, 32, 32, 64) 1792
_________________________________________________________________
block1_conv2 (Conv2D) (None, 32, 32, 64) 36928
_________________________________________________________________
block1_pool (MaxPooling2D) (None, 16, 16, 64) 0
_________________________________________________________________
block2_conv1 (Conv2D) (None, 16, 16, 128) 73856
_________________________________________________________________
block2_conv2 (Conv2D) (None, 16, 16, 128) 147584
_________________________________________________________________
block2_pool (MaxPooling2D) (None, 8, 8, 128) 0
_________________________________________________________________
block3_conv1 (Conv2D) (None, 8, 8, 256) 295168
_________________________________________________________________
block3_conv2 (Conv2D) (None, 8, 8, 256) 590080
_________________________________________________________________
block3_conv3 (Conv2D) (None, 8, 8, 256) 590080
_________________________________________________________________
block3_conv4 (Conv2D) (None, 8, 8, 256) 590080
_________________________________________________________________
block3_pool (MaxPooling2D) (None, 4, 4, 256) 0
_________________________________________________________________
block4_conv1 (Conv2D) (None, 4, 4, 512) 1180160
_________________________________________________________________
block4_conv2 (Conv2D) (None, 4, 4, 512) 2359808
_________________________________________________________________
block4_conv3 (Conv2D) (None, 4, 4, 512) 2359808
_________________________________________________________________
block4_conv4 (Conv2D) (None, 4, 4, 512) 2359808
_________________________________________________________________
block4_pool (MaxPooling2D) (None, 2, 2, 512) 0
_________________________________________________________________
block5_conv1 (Conv2D) (None, 2, 2, 512) 2359808
_________________________________________________________________
block5_conv2 (Conv2D) (None, 2, 2, 512) 2359808
_________________________________________________________________
block5_conv3 (Conv2D) (None, 2, 2, 512) 2359808
_________________________________________________________________
block5_conv4 (Conv2D) (None, 2, 2, 512) 2359808
_________________________________________________________________
block5_pool (MaxPooling2D) (None, 1, 1, 512) 0
_________________________________________________________________
flatten (Flatten) (None, 512) 0
_________________________________________________________________
fc1 (Dense) (None, 4096) 2101248
_________________________________________________________________
fc2 (Dense) (None, 4096) 16781312
_________________________________________________________________
predictions (Dense) (None, 100) 409700
=================================================================
Total params: 39,316,644
Trainable params: 39,316,644
Non-trainable params: 0
_________________________________________________________________
How can i add the layer
=================================================================
input_2 (InputLayer) [(None, 32, 32, 3)] 0
To get the same exact model? To me seems the only difference between the 2