CNN Layer Visualization
CNN Layer Visualization
Import Libraries
import tensorflow as tf
import pandas as pd
import numpy as np
from keras.models import Model
print(len(tf.config.list_physical_devices('GPU'))>0)
True
# Load Data
# Change Data folder respectively
data_folder = "./data"
# If u want to freeze
# base_model.trainable = False
base_model.summary()
Model: "resnet50"
_____________________________________________________________________________
_____________________
Layer (type) Output Shape Param # Connected to
=============================================================================
=====================
input_1 (InputLayer) [(None, None, None, 0 []
3)]
=============================================================================
=====================
Total params: 23,587,712
Trainable params: 23,534,592
Non-trainable params: 53,120
_____________________________________________________________________________
_____________________
fig1=plt.figure(figsize=(8, 12))
columns = 8
rows = 8
n_filters = columns * rows
for i in range(1, n_filters +1):
f = filters[:, :, :, i-1]
fig1 =plt.subplot(rows, columns, i)
fig1.set_xticks([]) #Turn off axis
fig1.set_yticks([])
plt.imshow(f[:, :, 0], cmap='gray') #Show only the filters from 0th
channel (R)
#ix += 1
plt.show()
conv_layer_index = [2, 7, 10] #TO define a shorter model
outputs = [base_model.layers[i].output for i in conv_layer_index]
model_short = Model(inputs=base_model.inputs, outputs=outputs)
print(model_short.summary())
Model: "model_3"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_1 (InputLayer) [(None, None, None, 3)] 0
=================================================================
Total params: 51,072
Trainable params: 50,816
Non-trainable params: 256
_________________________________________________________________
None
columns = 8
rows = 8
for ftr in feature_output:
#pos = 1
print('layer')
fig=plt.figure(figsize=(12, 12))
for i in range(1, columns*rows +1):
fig =plt.subplot(rows, columns, i)
fig.set_xticks([]) #Turn off axis
fig.set_yticks([])
plt.imshow(ftr[0, :, :, i-1], cmap='gray')
#pos += 1
plt.show()
layer
layer
layer
---
.
from tensorflow.keras.utils import load_img, img_to_array
import numpy as np
import matplotlib.pyplot as plt
def get_cnn_visualization(model, list_of_layer_nos):
print(model.summary())
conv_layer_index = list_of_layer_nos #TO define a shorter model
outputs = [model.layers[i].output for i in conv_layer_index]
model_short = Model(inputs=base_model.inputs, outputs=outputs)
print(model_short.summary())
img = img_to_array(img)
img = np.expand_dims(img, axis=0)
feature_output = model_short.predict(img)
columns = 8
rows = 8
for ftr in feature_output:
#pos = 1
print('Conv Layer')
fig=plt.figure(figsize=(12, 12))
for i in range(1, columns*rows +1):
fig =plt.subplot(rows, columns, i)
fig.set_xticks([]) #Turn off axis
fig.set_yticks([])
plt.imshow(ftr[0, :, :, i-1], cmap='gray')
#pos += 1
plt.show()
import tensorflow as tf
from keras.models import Model
from tensorflow.keras.utils import load_img, img_to_array
base_model = tf.keras.applications.ResNet50(
include_top=False,
weights='imagenet')
get_cnn_visualization(base_model, [2,7,10])
Model: "resnet50"
_____________________________________________________________________________
_____________________
Layer (type) Output Shape Param # Connected to
=============================================================================
=====================
input_18 (InputLayer) [(None, None, None, 0 []
3)]
=============================================================================
=====================
Total params: 23,587,712
Trainable params: 23,534,592
Non-trainable params: 53,120
_____________________________________________________________________________
_____________________
None
Model: "model_16"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_18 (InputLayer) [(None, None, None, 3)] 0
=================================================================
Total params: 51,072
Trainable params: 50,816
Non-trainable params: 256
_________________________________________________________________
None
1/1 [==============================] - 0s 269ms/step
Conv Layer
Conv Layer
Conv Layer