← Open Source
paulgavrikov

visualkeras

Visualkeras is a Python package to help visualize Keras (either standalone or included in TensorFlow) neural network architectures. It allows easy styling to fit most needs. This module supports layered style architecture generation which is great for CNNs (Convolutional Neural Networks), and a graph style architecture, which works great for most models including plain feed-forward networks.

Model DevelopmentInterpretabilityPython
Open on GitHub
Momentum
+0stars in 24 hours0.0%
661
Stars
76
Forks
+0
This week
10
Contributors
Created 2020-09-25 · Updated 2026-09-29 · #14508 today
Top developers
README

visualkeras for Keras / TensorFlow

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

Renderer Best for Entry point
Layered view Sequential CNN-style diagrams visualkeras.layered_view(model)
Graph view General node-based visualizations visualkeras.graph_view(model)
Functional view Functional Keras models with multiple modalities, inputs, outputs, streams, etc.; this is the most flexible option visualkeras.functional_view(model)
LeNet view Classic feature map stack diagrams; inspired by LeNet visualkeras.lenet_view(model)

Examples

We provide basic examples here. Explamples with various options and customizations are covered in the documentation: .

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: .

Particularly useful sections include:

  • Quickstart:
  • Tutorials:
  • Examples:
  • API reference:
  • Architecture guide: ARCHITECTURE.md

Compatibility

Scope Status Notes
Core package Supported Python 3.9+
tf.keras workflows Supported Suggested usage
Standalone keras Mostly supported May 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

  • Issues:
  • Contributing guide: CONTRIBUTING.MD
  • Architecture guide: ARCHITECTURE.md

Stay Updated

Sign up for the visualkeras mailing list here:

License

Visualkeras is licensed under the MIT License. See LICENSE.