.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "auto_examples/visualkeras_CNN/plot_custom_vgg16.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note :ref:`Go to the end ` to download the full example code or to run this example in your browser via JupyterLite or Binder. .. rst-class:: sphx-glr-example-title .. _sphx_glr_auto_examples_visualkeras_CNN_plot_custom_vgg16.py: visualkeras: custom vgg16 example ========================================== An example showing the :py:func:`~scikitplot.visualkeras` function used by a :py:class:`~tensorflow.keras.Model` model. .. GENERATED FROM PYTHON SOURCE LINES 8-12 .. code-block:: Python # Authors: The scikit-plots developers # SPDX-License-Identifier: BSD-3-Clause .. GENERATED FROM PYTHON SOURCE LINES 13-29 .. code-block:: Python # visualkeras Need aggdraw tensorflow # !pip install scikitplot[core, cpu] # or # !pip install aggdraw # !pip install tensorflow # pip install protobuf==5.29.4 import tensorflow as tf # Clear any session to reset the state of TensorFlow/Keras tf.keras.backend.clear_session() from scikitplot import visualkeras .. rst-class:: sphx-glr-script-out .. code-block:: none /home/circleci/.pyenv/versions/3.11.14/lib/python3.11/site-packages/keras/src/export/tf2onnx_lib.py:8: FutureWarning: In the future `np.object` will be defined as the corresponding NumPy scalar. .. GENERATED FROM PYTHON SOURCE LINES 30-31 create VGG16 .. GENERATED FROM PYTHON SOURCE LINES 31-85 .. code-block:: Python image_size = 224 model = tf.keras.models.Sequential() model.add(tf.keras.layers.InputLayer(shape=(image_size, image_size, 3))) model.add(tf.keras.layers.ZeroPadding2D((1, 1))) model.add(tf.keras.layers.Conv2D(64, activation="relu", kernel_size=(3, 3))) model.add(tf.keras.layers.ZeroPadding2D((1, 1))) model.add(tf.keras.layers.Conv2D(64, activation="relu", kernel_size=(3, 3))) model.add(visualkeras.SpacingDummyLayer()) model.add(tf.keras.layers.MaxPooling2D((2, 2), strides=(2, 2))) model.add(tf.keras.layers.ZeroPadding2D((1, 1))) model.add(tf.keras.layers.Conv2D(128, activation="relu", kernel_size=(3, 3))) model.add(tf.keras.layers.ZeroPadding2D((1, 1))) model.add(tf.keras.layers.Conv2D(128, activation="relu", kernel_size=(3, 3))) model.add(visualkeras.SpacingDummyLayer()) model.add(tf.keras.layers.MaxPooling2D((2, 2), strides=(2, 2))) model.add(tf.keras.layers.ZeroPadding2D((1, 1))) model.add(tf.keras.layers.Conv2D(256, activation="relu", kernel_size=(3, 3))) model.add(tf.keras.layers.ZeroPadding2D((1, 1))) model.add(tf.keras.layers.Conv2D(256, activation="relu", kernel_size=(3, 3))) model.add(tf.keras.layers.ZeroPadding2D((1, 1))) model.add(tf.keras.layers.Conv2D(256, activation="relu", kernel_size=(3, 3))) model.add(visualkeras.SpacingDummyLayer()) model.add(tf.keras.layers.MaxPooling2D((2, 2), strides=(2, 2))) model.add(tf.keras.layers.ZeroPadding2D((1, 1))) model.add(tf.keras.layers.Conv2D(512, activation="relu", kernel_size=(3, 3))) model.add(tf.keras.layers.ZeroPadding2D((1, 1))) model.add(tf.keras.layers.Conv2D(512, activation="relu", kernel_size=(3, 3))) model.add(tf.keras.layers.ZeroPadding2D((1, 1))) model.add(tf.keras.layers.Conv2D(512, activation="relu", kernel_size=(3, 3))) model.add(visualkeras.SpacingDummyLayer()) model.add(tf.keras.layers.MaxPooling2D((2, 2), strides=(2, 2))) model.add(tf.keras.layers.ZeroPadding2D((1, 1))) model.add(tf.keras.layers.Conv2D(512, activation="relu", kernel_size=(3, 3))) model.add(tf.keras.layers.ZeroPadding2D((1, 1))) model.add(tf.keras.layers.Conv2D(512, activation="relu", kernel_size=(3, 3))) model.add(tf.keras.layers.ZeroPadding2D((1, 1))) model.add(tf.keras.layers.Conv2D(512, activation="relu", kernel_size=(3, 3))) model.add(tf.keras.layers.MaxPooling2D()) model.add(visualkeras.SpacingDummyLayer()) model.add(tf.keras.layers.Flatten()) model.add(tf.keras.layers.Dense(4096, activation="relu")) model.add(tf.keras.layers.Dropout(0.5)) model.add(tf.keras.layers.Dense(4096, activation="relu")) model.add(tf.keras.layers.Dropout(0.5)) model.add(tf.keras.layers.Dense(1000, activation="softmax")) # model.summary() .. GENERATED FROM PYTHON SOURCE LINES 86-87 Now visualize the model! .. GENERATED FROM PYTHON SOURCE LINES 87-97 .. code-block:: Python from collections import defaultdict color_map = defaultdict(dict) color_map[tf.keras.layers.Conv2D]["fill"] = "orange" color_map[tf.keras.layers.ZeroPadding2D]["fill"] = "gray" color_map[tf.keras.layers.Dropout]["fill"] = "pink" color_map[tf.keras.layers.MaxPooling2D]["fill"] = "red" color_map[tf.keras.layers.Dense]["fill"] = "green" color_map[tf.keras.layers.Flatten]["fill"] = "teal" .. GENERATED FROM PYTHON SOURCE LINES 98-102 .. code-block:: Python from PIL import ImageFont ImageFont.load_default() .. rst-class:: sphx-glr-script-out .. code-block:: none .. GENERATED FROM PYTHON SOURCE LINES 103-111 .. code-block:: Python img_vgg16 = visualkeras.layered_view( model, type_ignore=[visualkeras.SpacingDummyLayer], # to_file="result_images/vgg16.png", save_fig=True, save_fig_filename="vgg16.png", ) .. image-sg:: /auto_examples/visualkeras_CNN/images/sphx_glr_plot_custom_vgg16_001.png :alt: plot custom vgg16 :srcset: /auto_examples/visualkeras_CNN/images/sphx_glr_plot_custom_vgg16_001.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out .. code-block:: none 2026-01-06 16:56:18.314857: W scikitplot 140115099773824 utils_pil.py:204:load_font] Error loading system font: cannot open resource 2026-01-06 16:56:18.314956: W scikitplot 140115099773824 utils_pil.py:206:load_font] Falling back to PIL default font. 2026-01-06 16:56:18.315075: W scikitplot 140115099773824 _layered.py:216:layered_view] The legend_text_spacing_offset parameter is deprecated andwill be removed in a future release. .. GENERATED FROM PYTHON SOURCE LINES 112-127 .. code-block:: Python img_vgg16_legend = visualkeras.layered_view( model, type_ignore=[visualkeras.SpacingDummyLayer], legend=True, font={ "font_size": 61, # 'use_default_font': False, # 'font_path': '/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf' }, # to_file="result_images/vgg16_legend.png", save_fig=True, save_fig_filename="vgg16_legend.png", ) img_vgg16_legend .. image-sg:: /auto_examples/visualkeras_CNN/images/sphx_glr_plot_custom_vgg16_002.png :alt: plot custom vgg16 :srcset: /auto_examples/visualkeras_CNN/images/sphx_glr_plot_custom_vgg16_002.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out .. code-block:: none 2026-01-06 16:56:19.808680: W scikitplot 140115099773824 utils_pil.py:204:load_font] Error loading system font: cannot open resource 2026-01-06 16:56:19.808781: W scikitplot 140115099773824 utils_pil.py:206:load_font] Falling back to PIL default font. 2026-01-06 16:56:19.808901: W scikitplot 140115099773824 _layered.py:216:layered_view] The legend_text_spacing_offset parameter is deprecated andwill be removed in a future release. .. GENERATED FROM PYTHON SOURCE LINES 128-138 .. code-block:: Python img_vgg16_spacing_layers = visualkeras.layered_view( model, type_ignore=[], spacing=0, # to_file="result_images/vgg16_spacing_layers.png", save_fig=True, save_fig_filename="vgg16_spacing_layers.png", ) img_vgg16_spacing_layers .. image-sg:: /auto_examples/visualkeras_CNN/images/sphx_glr_plot_custom_vgg16_003.png :alt: plot custom vgg16 :srcset: /auto_examples/visualkeras_CNN/images/sphx_glr_plot_custom_vgg16_003.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out .. code-block:: none 2026-01-06 16:56:20.864397: W scikitplot 140115099773824 utils_pil.py:204:load_font] Error loading system font: cannot open resource 2026-01-06 16:56:20.864498: W scikitplot 140115099773824 utils_pil.py:206:load_font] Falling back to PIL default font. 2026-01-06 16:56:20.864609: W scikitplot 140115099773824 _layered.py:216:layered_view] The legend_text_spacing_offset parameter is deprecated andwill be removed in a future release. .. GENERATED FROM PYTHON SOURCE LINES 139-153 .. code-block:: Python img_vgg16_type_ignore = visualkeras.layered_view( model, type_ignore=[ tf.keras.layers.ZeroPadding2D, tf.keras.layers.Dropout, tf.keras.layers.Flatten, visualkeras.SpacingDummyLayer, ], # to_file="result_images/vgg16_type_ignore.png", save_fig=True, save_fig_filename="vgg16_type_ignore.png", ) img_vgg16_type_ignore .. image-sg:: /auto_examples/visualkeras_CNN/images/sphx_glr_plot_custom_vgg16_004.png :alt: plot custom vgg16 :srcset: /auto_examples/visualkeras_CNN/images/sphx_glr_plot_custom_vgg16_004.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out .. code-block:: none 2026-01-06 16:56:21.745346: W scikitplot 140115099773824 utils_pil.py:204:load_font] Error loading system font: cannot open resource 2026-01-06 16:56:21.745439: W scikitplot 140115099773824 utils_pil.py:206:load_font] Falling back to PIL default font. 2026-01-06 16:56:21.745551: W scikitplot 140115099773824 _layered.py:216:layered_view] The legend_text_spacing_offset parameter is deprecated andwill be removed in a future release. .. GENERATED FROM PYTHON SOURCE LINES 154-164 .. code-block:: Python img_vgg16_color_map = visualkeras.layered_view( model, type_ignore=[visualkeras.SpacingDummyLayer], color_map=color_map, # to_file="result_images/vgg16_color_map.png", save_fig=True, save_fig_filename="vgg16_color_map.png", ) img_vgg16_color_map .. image-sg:: /auto_examples/visualkeras_CNN/images/sphx_glr_plot_custom_vgg16_005.png :alt: plot custom vgg16 :srcset: /auto_examples/visualkeras_CNN/images/sphx_glr_plot_custom_vgg16_005.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out .. code-block:: none 2026-01-06 16:56:22.361181: W scikitplot 140115099773824 utils_pil.py:204:load_font] Error loading system font: cannot open resource 2026-01-06 16:56:22.361263: W scikitplot 140115099773824 utils_pil.py:206:load_font] Falling back to PIL default font. 2026-01-06 16:56:22.361363: W scikitplot 140115099773824 _layered.py:216:layered_view] The legend_text_spacing_offset parameter is deprecated andwill be removed in a future release. .. GENERATED FROM PYTHON SOURCE LINES 165-175 .. code-block:: Python img_vgg16_flat = visualkeras.layered_view( model, type_ignore=[visualkeras.SpacingDummyLayer], draw_volume=False, # to_file="result_images/vgg16_flat.png", save_fig=True, save_fig_filename="vgg16_flat.png", ) img_vgg16_flat .. image-sg:: /auto_examples/visualkeras_CNN/images/sphx_glr_plot_custom_vgg16_006.png :alt: plot custom vgg16 :srcset: /auto_examples/visualkeras_CNN/images/sphx_glr_plot_custom_vgg16_006.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out .. code-block:: none 2026-01-06 16:56:23.297665: W scikitplot 140115099773824 utils_pil.py:204:load_font] Error loading system font: cannot open resource 2026-01-06 16:56:23.297774: W scikitplot 140115099773824 utils_pil.py:206:load_font] Falling back to PIL default font. 2026-01-06 16:56:23.297888: W scikitplot 140115099773824 _layered.py:216:layered_view] The legend_text_spacing_offset parameter is deprecated andwill be removed in a future release. .. GENERATED FROM PYTHON SOURCE LINES 176-193 .. code-block:: Python img_vgg16_scaling = visualkeras.layered_view( model, type_ignore=[visualkeras.SpacingDummyLayer], # legend=True, min_z=1, min_xy=1, max_z=4096, max_xy=4096, scale_z=0.5, scale_xy=11, # font={'font_size': 99}, # to_file="result_images/vgg16_scaling.png", save_fig=True, save_fig_filename="vgg16_scaling.png", ) img_vgg16_scaling .. image-sg:: /auto_examples/visualkeras_CNN/images/sphx_glr_plot_custom_vgg16_007.png :alt: plot custom vgg16 :srcset: /auto_examples/visualkeras_CNN/images/sphx_glr_plot_custom_vgg16_007.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out .. code-block:: none 2026-01-06 16:56:23.972068: W scikitplot 140115099773824 utils_pil.py:204:load_font] Error loading system font: cannot open resource 2026-01-06 16:56:23.972166: W scikitplot 140115099773824 utils_pil.py:206:load_font] Falling back to PIL default font. 2026-01-06 16:56:23.972283: W scikitplot 140115099773824 _layered.py:216:layered_view] The legend_text_spacing_offset parameter is deprecated andwill be removed in a future release. .. GENERATED FROM PYTHON SOURCE LINES 194-202 .. tags:: model-type: classification model-workflow: model building plot-type: visualkeras domain: neural network level: intermediate purpose: showcase .. rst-class:: sphx-glr-timing **Total running time of the script:** (0 minutes 19.903 seconds) .. _sphx_glr_download_auto_examples_visualkeras_CNN_plot_custom_vgg16.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: binder-badge .. image:: images/binder_badge_logo.svg :target: https://mybinder.org/v2/gh/scikit-plots/scikit-plots/maintenance/0.4.X?urlpath=lab/tree/notebooks/auto_examples/visualkeras_CNN/plot_custom_vgg16.ipynb :alt: Launch binder :width: 150 px .. container:: lite-badge .. image:: images/jupyterlite_badge_logo.svg :target: ../../lite/lab/index.html?path=auto_examples/visualkeras_CNN/plot_custom_vgg16.ipynb :alt: Launch JupyterLite :width: 150 px .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: plot_custom_vgg16.ipynb ` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: plot_custom_vgg16.py ` .. container:: sphx-glr-download sphx-glr-download-zip :download:`Download zipped: plot_custom_vgg16.zip ` .. include:: plot_custom_vgg16.recommendations .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_