visualkeras: custom vgg16 example#

An example showing the visualkeras function used by a tf.keras.Model model.

 9 # Authors: The scikit-plots developers
10 # SPDX-License-Identifier: BSD-3-Clause

pip install protobuf==5.29.4

14 import tensorflow as tf
15
16 # Clear any session to reset the state of TensorFlow/Keras
17 tf.keras.backend.clear_session()
18
19 from scikitplot import visualkeras

create VGG16

23 image_size = 224
24 model = tf.keras.models.Sequential()
25 model.add(tf.keras.layers.InputLayer(shape=(image_size, image_size, 3)))
26
27 model.add(tf.keras.layers.ZeroPadding2D((1, 1)))
28 model.add(tf.keras.layers.Conv2D(64, activation="relu", kernel_size=(3, 3)))
29 model.add(tf.keras.layers.ZeroPadding2D((1, 1)))
30 model.add(tf.keras.layers.Conv2D(64, activation="relu", kernel_size=(3, 3)))
31 model.add(visualkeras.SpacingDummyLayer())
32
33 model.add(tf.keras.layers.MaxPooling2D((2, 2), strides=(2, 2)))
34 model.add(tf.keras.layers.ZeroPadding2D((1, 1)))
35 model.add(tf.keras.layers.Conv2D(128, activation="relu", kernel_size=(3, 3)))
36 model.add(tf.keras.layers.ZeroPadding2D((1, 1)))
37 model.add(tf.keras.layers.Conv2D(128, activation="relu", kernel_size=(3, 3)))
38 model.add(visualkeras.SpacingDummyLayer())
39
40 model.add(tf.keras.layers.MaxPooling2D((2, 2), strides=(2, 2)))
41 model.add(tf.keras.layers.ZeroPadding2D((1, 1)))
42 model.add(tf.keras.layers.Conv2D(256, activation="relu", kernel_size=(3, 3)))
43 model.add(tf.keras.layers.ZeroPadding2D((1, 1)))
44 model.add(tf.keras.layers.Conv2D(256, activation="relu", kernel_size=(3, 3)))
45 model.add(tf.keras.layers.ZeroPadding2D((1, 1)))
46 model.add(tf.keras.layers.Conv2D(256, activation="relu", kernel_size=(3, 3)))
47 model.add(visualkeras.SpacingDummyLayer())
48
49 model.add(tf.keras.layers.MaxPooling2D((2, 2), strides=(2, 2)))
50 model.add(tf.keras.layers.ZeroPadding2D((1, 1)))
51 model.add(tf.keras.layers.Conv2D(512, activation="relu", kernel_size=(3, 3)))
52 model.add(tf.keras.layers.ZeroPadding2D((1, 1)))
53 model.add(tf.keras.layers.Conv2D(512, activation="relu", kernel_size=(3, 3)))
54 model.add(tf.keras.layers.ZeroPadding2D((1, 1)))
55 model.add(tf.keras.layers.Conv2D(512, activation="relu", kernel_size=(3, 3)))
56 model.add(visualkeras.SpacingDummyLayer())
57
58 model.add(tf.keras.layers.MaxPooling2D((2, 2), strides=(2, 2)))
59 model.add(tf.keras.layers.ZeroPadding2D((1, 1)))
60 model.add(tf.keras.layers.Conv2D(512, activation="relu", kernel_size=(3, 3)))
61 model.add(tf.keras.layers.ZeroPadding2D((1, 1)))
62 model.add(tf.keras.layers.Conv2D(512, activation="relu", kernel_size=(3, 3)))
63 model.add(tf.keras.layers.ZeroPadding2D((1, 1)))
64 model.add(tf.keras.layers.Conv2D(512, activation="relu", kernel_size=(3, 3)))
65 model.add(tf.keras.layers.MaxPooling2D())
66 model.add(visualkeras.SpacingDummyLayer())
67
68 model.add(tf.keras.layers.Flatten())
69
70 model.add(tf.keras.layers.Dense(4096, activation="relu"))
71 model.add(tf.keras.layers.Dropout(0.5))
72 model.add(tf.keras.layers.Dense(4096, activation="relu"))
73 model.add(tf.keras.layers.Dropout(0.5))
74 model.add(tf.keras.layers.Dense(1000, activation="softmax"))
75 # model.summary()

Now visualize the model!

79 from collections import defaultdict
80
81 color_map = defaultdict(dict)
82 color_map[tf.keras.layers.Conv2D]["fill"] = "orange"
83 color_map[tf.keras.layers.ZeroPadding2D]["fill"] = "gray"
84 color_map[tf.keras.layers.Dropout]["fill"] = "pink"
85 color_map[tf.keras.layers.MaxPooling2D]["fill"] = "red"
86 color_map[tf.keras.layers.Dense]["fill"] = "green"
87 color_map[tf.keras.layers.Flatten]["fill"] = "teal"
90 from PIL import ImageFont
91
92 ImageFont.load_default()
<PIL.ImageFont.FreeTypeFont object at 0x7fa0fce3df10>
 95 img_vgg16 = visualkeras.layered_view(
 96     model,
 97     type_ignore=[visualkeras.SpacingDummyLayer],
 98     # to_file="result_images/vgg16.png",
 99     save_fig=True,
100     save_fig_filename="vgg16.png",
101 )
plot custom vgg16
2025-06-27 09:09:38.272478: W scikitplot 140331090086784 utils_pil.py:203:load_font] Error loading system font: cannot open resource
2025-06-27 09:09:38.272566: W scikitplot 140331090086784 utils_pil.py:205:load_font] Falling back to PIL default font.
2025-06-27 09:09:38.272703: W scikitplot 140331090086784 layered.py:203:layered_view] The legend_text_spacing_offset parameter is deprecated andwill be removed in a future release.
104 img_vgg16_legend = visualkeras.layered_view(
105     model,
106     type_ignore=[visualkeras.SpacingDummyLayer],
107     legend=True,
108     font={
109         "font_size": 61,
110         # 'use_default_font': False,
111         # 'font_path': '/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf'
112     },
113     # to_file="result_images/vgg16_legend.png",
114     save_fig=True,
115     save_fig_filename="vgg16_legend.png",
116 )
117 img_vgg16_legend
plot custom vgg16
2025-06-27 09:09:40.139401: W scikitplot 140331090086784 utils_pil.py:203:load_font] Error loading system font: cannot open resource
2025-06-27 09:09:40.139492: W scikitplot 140331090086784 utils_pil.py:205:load_font] Falling back to PIL default font.
2025-06-27 09:09:40.139642: W scikitplot 140331090086784 layered.py:203:layered_view] The legend_text_spacing_offset parameter is deprecated andwill be removed in a future release.

<matplotlib.image.AxesImage object at 0x7fa0fd7d7090>
120 img_vgg16_spacing_layers = visualkeras.layered_view(
121     model,
122     type_ignore=[],
123     spacing=0,
124     # to_file="result_images/vgg16_spacing_layers.png",
125     save_fig=True,
126     save_fig_filename="vgg16_spacing_layers.png",
127 )
128 img_vgg16_spacing_layers
plot custom vgg16
2025-06-27 09:09:41.512911: W scikitplot 140331090086784 utils_pil.py:203:load_font] Error loading system font: cannot open resource
2025-06-27 09:09:41.513032: W scikitplot 140331090086784 utils_pil.py:205:load_font] Falling back to PIL default font.
2025-06-27 09:09:41.513251: W scikitplot 140331090086784 layered.py:203:layered_view] The legend_text_spacing_offset parameter is deprecated andwill be removed in a future release.

<matplotlib.image.AxesImage object at 0x7fa0dc3e0850>
131 img_vgg16_type_ignore = visualkeras.layered_view(
132     model,
133     type_ignore=[
134         tf.keras.layers.ZeroPadding2D,
135         tf.keras.layers.Dropout,
136         tf.keras.layers.Flatten,
137         visualkeras.SpacingDummyLayer,
138     ],
139     # to_file="result_images/vgg16_type_ignore.png",
140     save_fig=True,
141     save_fig_filename="vgg16_type_ignore.png",
142 )
143 img_vgg16_type_ignore
plot custom vgg16
2025-06-27 09:09:42.325409: W scikitplot 140331090086784 utils_pil.py:203:load_font] Error loading system font: cannot open resource
2025-06-27 09:09:42.325481: W scikitplot 140331090086784 utils_pil.py:205:load_font] Falling back to PIL default font.
2025-06-27 09:09:42.325616: W scikitplot 140331090086784 layered.py:203:layered_view] The legend_text_spacing_offset parameter is deprecated andwill be removed in a future release.

<matplotlib.image.AxesImage object at 0x7fa0dc24bf90>
146 img_vgg16_color_map = visualkeras.layered_view(
147     model,
148     type_ignore=[visualkeras.SpacingDummyLayer],
149     color_map=color_map,
150     # to_file="result_images/vgg16_color_map.png",
151     save_fig=True,
152     save_fig_filename="vgg16_color_map.png",
153 )
154 img_vgg16_color_map
plot custom vgg16
2025-06-27 09:09:42.903709: W scikitplot 140331090086784 utils_pil.py:203:load_font] Error loading system font: cannot open resource
2025-06-27 09:09:42.903778: W scikitplot 140331090086784 utils_pil.py:205:load_font] Falling back to PIL default font.
2025-06-27 09:09:42.903900: W scikitplot 140331090086784 layered.py:203:layered_view] The legend_text_spacing_offset parameter is deprecated andwill be removed in a future release.

<matplotlib.image.AxesImage object at 0x7fa0dc2c54d0>
157 img_vgg16_flat = visualkeras.layered_view(
158     model,
159     type_ignore=[visualkeras.SpacingDummyLayer],
160     draw_volume=False,
161     # to_file="result_images/vgg16_flat.png",
162     save_fig=True,
163     save_fig_filename="vgg16_flat.png",
164 )
165 img_vgg16_flat
plot custom vgg16
2025-06-27 09:09:43.855191: W scikitplot 140331090086784 utils_pil.py:203:load_font] Error loading system font: cannot open resource
2025-06-27 09:09:43.855268: W scikitplot 140331090086784 utils_pil.py:205:load_font] Falling back to PIL default font.
2025-06-27 09:09:43.855421: W scikitplot 140331090086784 layered.py:203:layered_view] The legend_text_spacing_offset parameter is deprecated andwill be removed in a future release.

<matplotlib.image.AxesImage object at 0x7fa0dc135e10>
168 img_vgg16_scaling = visualkeras.layered_view(
169     model,
170     type_ignore=[visualkeras.SpacingDummyLayer],
171     # legend=True,
172     min_z=1,
173     min_xy=1,
174     max_z=4096,
175     max_xy=4096,
176     scale_z=0.5,
177     scale_xy=11,
178     # font={'font_size': 99},
179     # to_file="result_images/vgg16_scaling.png",
180     save_fig=True,
181     save_fig_filename="vgg16_scaling.png",
182 )
183 img_vgg16_scaling
plot custom vgg16
2025-06-27 09:09:44.498309: W scikitplot 140331090086784 utils_pil.py:203:load_font] Error loading system font: cannot open resource
2025-06-27 09:09:44.498406: W scikitplot 140331090086784 utils_pil.py:205:load_font] Falling back to PIL default font.
2025-06-27 09:09:44.498538: W scikitplot 140331090086784 layered.py:203:layered_view] The legend_text_spacing_offset parameter is deprecated andwill be removed in a future release.

<matplotlib.image.AxesImage object at 0x7fa0f4185310>

Tags: model-type: classification model-workflow: model building plot-type: visualkeras domain: neural network level: intermediate purpose: showcase

Total running time of the script: (0 minutes 20.875 seconds)

Related examples

visualkeras: custom vgg16 show dimension example

visualkeras: custom vgg16 show dimension example

visualkeras: transformers example

visualkeras: transformers example

Visualkeras: Spam Classification Conv1D Dense Example

Visualkeras: Spam Classification Conv1D Dense Example

visualkeras: custom VGG example

visualkeras: custom VGG example

Gallery generated by Sphinx-Gallery