visualkeras for Keras / TensorFlow

March 17, 2026 ยท View on GitHub

Latest Version Download Count Test Pass Rate Coverage CI Documentation Status

Visualkeras is a Python package for visualizing Keras and TensorFlow model architectures. It supports several rendering styles, such as classic layered CNN diagrams, node-based visualizations, and LeNet-style visualizations. It is very easy to get started with visualkeras (see Quickstart), but also highly customizable for advanced users. For help in citing this project, refer here.

Installation

Install the latest published release:

pip install visualkeras

Install the latest master branch (potentially unstable):

pip install git+https://github.com/paulgavrikov/visualkeras

Quick Start

import visualkeras

model = ...

visualkeras.layered_view(model).show()
visualkeras.layered_view(model, to_file="model.png")

The recommended high-level API is show(...), which selects a renderer by mode:

import visualkeras
from tensorflow.keras import layers
from visualkeras.options import FunctionalOptions

img = visualkeras.show(
    model,
    mode="functional",
    options=FunctionalOptions(
        collapse_enabled=True,
        collapse_rules=[
            {"kind": "layer", "selector": layers.Dense, "repeat_count": 4},
            {
                "kind": "block",
                "selector": [layers.Dense, layers.Dropout],
                "repeat_count": 2,
                "annotation_position": "below",
            },
        ],
    ),
)

show(...) supports these modes:

  • layered
  • graph
  • functional
  • lenet

Renderers

RendererBest forEntry point
Layered viewSequential CNN-style diagramsvisualkeras.layered_view(model)
Graph viewGeneral node-based visualizationsvisualkeras.graph_view(model)
Functional viewFunctional Keras models with multiple modalities, inputs, outputs, streams, etc.; this is the most flexible optionvisualkeras.functional_view(model)
LeNet viewClassic feature map stack diagrams; inspired by LeNetvisualkeras.lenet_view(model)

Examples

We provide basic examples here. Explamples with various options and customizations are covered in the documentation: https://visualkeras.readthedocs.io/.

Layered view

import tensorflow as tf
from tensorflow import keras
import visualkeras

model = keras.Sequential([
    keras.layers.Input(shape=(28, 28, 1)),
    keras.layers.Conv2D(32, (3, 3), activation="relu"),
    keras.layers.MaxPooling2D((2, 2)),
    keras.layers.Conv2D(64, (3, 3), activation="relu"),
    keras.layers.Flatten(),
    keras.layers.Dense(10, activation="softmax"),
])

visualkeras.layered_view(model).show()

Default layered view

Graph view

import tensorflow as tf
from tensorflow import keras
import visualkeras

model = Sequential([
    Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),
    MaxPooling2D((2, 2)),
    Dense(10, activation='softmax')
])

visualkeras.graph_view(model)

Default graph-based view of a simple CNN

Functional view

import tensorflow as tf
from tensorflow import keras
import visualkeras

inputs = keras.Input(shape=(16,))
x = keras.layers.Dense(32, activation='relu')(inputs)
x = keras.layers.Dense(32, activation='relu')(x)
outputs = keras.layers.Dense(10, activation='softmax')(x)

model = keras.Model(inputs=inputs, outputs=outputs)

visualkeras.functional_view(model)

Default functional view of a model with multiple blocks

LeNet view

import tensorflow as tf
from tensorflow import keras
import visualkeras

model = keras.Sequential([
    keras.layers.Input(shape=(28, 28, 1)),
    keras.layers.Conv2D(6, (5, 5), activation='tanh'),
    keras.layers.MaxPooling2D((2, 2)),
    keras.layers.Conv2D(16, (5, 5), activation='tanh'),
    keras.layers.MaxPooling2D((2, 2)),
    keras.layers.Flatten(),
    keras.layers.Dense(120, activation='tanh'),
    keras.layers.Dense(84, activation='tanh'),
    keras.layers.Dense(10, activation='softmax')
])

visualkeras.lenet_view(model)

Default LeNet-style view

Documentation

Detailed documentation can be found in the documentation website: https://visualkeras.readthedocs.io/.

Particularly useful sections include:

Compatibility

ScopeStatusNotes
Core packageSupportedPython 3.9+
tf.keras workflowsSupportedSuggested usage
Standalone kerasMostly supportedMay vary by backend setup; fully supported with TensorFlow backend

Citation

If you find this project helpful for your research, please cite it:

@misc{Gavrikov2020VisualKeras,
  author = {Gavrikov, Paul and Patapati, Santosh},
  title = {visualkeras},
  year = {2020},
  publisher = {GitHub},
  journal = {GitHub repository},
  howpublished = {\url{https://github.com/paulgavrikov/visualkeras}},
}

Contributing

Stay Updated

Sign up for the visualkeras mailing list here: https://forms.gle/7eBZ1jCJ7Xsm6RvA7

License

Visualkeras is licensed under the MIT License. See LICENSE.