import tensorflow  as tf
from tensorflow import keras
import numpy as np

VGG16

vgg16 = tf.keras.applications.VGG16(include_top = False, weights = "imagenet",\
                                  input_tensor = tf.keras.layers.Input(shape = (224,224,3)))

Loop over layers, layer name

for layer in vgg16.layers:
    print (layer.name, ": ", layer)
input_2 :  <tensorflow.python.keras.engine.input_layer.InputLayer object at 0x7f0f47f9af10>
block1_conv1 :  <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f0f47f884d0>
block1_conv2 :  <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f0f47f88c10>
block1_pool :  <tensorflow.python.keras.layers.pooling.MaxPooling2D object at 0x7f0f64271b10>
block2_conv1 :  <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f0f8427fc90>
block2_conv2 :  <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f0f47fa92d0>
block2_pool :  <tensorflow.python.keras.layers.pooling.MaxPooling2D object at 0x7f0f47faec90>
block3_conv1 :  <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f0f47f94050>
block3_conv2 :  <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f0f47fb0810>
block3_conv3 :  <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f0f47f868d0>
block3_pool :  <tensorflow.python.keras.layers.pooling.MaxPooling2D object at 0x7f0f47f97890>
block4_conv1 :  <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f0f47fb8bd0>
block4_conv2 :  <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f0f47f96490>
block4_conv3 :  <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f0f47fa7ed0>
block4_pool :  <tensorflow.python.keras.layers.pooling.MaxPooling2D object at 0x7f0f47f7b650>
block5_conv1 :  <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f0f47f9e910>
block5_conv2 :  <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f0f47f6e1d0>
block5_conv3 :  <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f0f47f70b90>
block5_pool :  <tensorflow.python.keras.layers.pooling.MaxPooling2D object at 0x7f0f47f72990>
for idx in range(len(vgg16.layers)):
  print(vgg16.get_layer(index = idx).name)
input_2
block1_conv1
block1_conv2
block1_pool
block2_conv1
block2_conv2
block2_pool
block3_conv1
block3_conv2
block3_conv3
block3_pool
block4_conv1
block4_conv2
block4_conv3
block4_pool
block5_conv1
block5_conv2
block5_conv3
block5_pool

Get first 4 layers

vgg16 = tf.keras.applications.VGG16(include_top = False, weights = "imagenet",\
                                  input_tensor = tf.keras.layers.Input(shape = (224,224,3)))
print(vgg16.layers[1].input_shape)
# print output shape
print(vgg16.layers[1].output_shape)
# weight matrix
print(vgg16.layers[1].get_weights)
# layer name
print(vgg16.layers[1].name)
# input tensor 
print(vgg16.layers[1].input)
# output tensor 
print(vgg16.layers[1].output)
(None, 224, 224, 3)
(None, 224, 224, 64)
<bound method Layer.get_weights of <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f0f47f1b410>>
block1_conv1
Tensor("input_4:0", shape=(None, 224, 224, 3), dtype=float32)
Tensor("block1_conv1/Relu_3:0", shape=(None, 224, 224, 64), dtype=float32)

Grab layer after name

vgg16 = tf.keras.applications.VGG16(include_top = False, weights = "imagenet",\
                                  input_tensor = tf.keras.layers.Input(shape = (224,224,3)))
vgg16.get_layer('block3_conv1').output
<tf.Tensor 'block3_conv1/Relu_1:0' shape=(None, 56, 56, 256) dtype=float32>

Build a model based on VGG16

vgg16 = tf.keras.applications.VGG16(include_top = False, weights = "imagenet",\
                                  input_tensor = tf.keras.layers.Input(shape = (224,224,3)))
model_output = vgg16.get_layer("block3_conv1").output
new_model = tf.keras.models.Model(inputs=vgg16.input, outputs=model_output)