Net2Vis automatically generates abstract visualizations for convolutional neural networks from Keras code.

Overview

Net2Vis Teaser Net2Vis Teaser_Legend

Net2Vis

Automatic Network Visualization

Levels of Abstraction

Unified Design

Created by Alex Bäuerle, Christian van Onzenoodt and Timo Ropinski.

Accessible online.

What is this?

Net2Vis automatically generates abstract visualizations for convolutional neural networks from Keras code.

How does this help me?

When looking at publications that use neural networks for their techniques, it is still apparent how they differ. Most of them are handcrafted and thus lack a unified visual grammar. Handcrafting such visualizations also creates ambiguities and misinterpretations.

With Net2Vis, these problems are gone. It is designed to provide an abstract network visualization while still providing general information about individual layers. We reflect the number of features as well as the spatial resolution of the tensor in our glyph design. Layer-Types can be identified through colors. Since these networks can get fairly complex, we added the possibility to group layers and thus compact the network through replacing common layer sequences.

The best of it: Once the application runs, you just have to paste your Keras code into your browser and the visualization is automatically generated based on that. You still can tweak your visualizations and create abstractions before downloading them as SVG and PDF.

How can I use this?

Either, go to our Website, or install Net2Vis locally. Our website includes no setup, but might be slower and limited in network size depending on what you are working on. Installing this locally allows you to modify the functionality and might be better performing than the online version.

Installation

Starting with Net2Vis is pretty easy (assuming python3, tested to run on python 3.6-3.8, and npm).

  1. Clone this Repo
  2. For the Backend to work, we need Cairo and Docker installed on your machine. This is used for PDF conversion and running models pasted into the browser (more) secure.

For docker, the docker daemon needs to run. This way, we can run the pasted code within separate containers.

For starting up the backend, the following steps are needed:

  1. Go into the backend folder: cd backend
  2. Install backend dependencies by running pip3 install -r requirements.txt
  3. Install the docker container by running docker build --force-rm -t tf_plus_keras .
  4. To start the server, issue: python3 server.py

The frontend is a react application that can be started as follows:

  1. Go into the frontend folder: cd net2vis
  2. Install the javascript dependencies using: npm install
  3. Start the frontend application with: npm start

Model Presets

For local installations only: If you want to replicate any of the network figures in our paper, or just want to see examples for visualizations, we have included all network figures from our paper for you to experiment with. To access those simply use the following urls:

For most of these URL endings, you will probably also find networks in the official version, however, there is no guarantee that they wont have been changed.

Citation

If you find this code useful please consider citing us:

@article{bauerle2019net2vis,
  title={Net2Vis: Transforming Deep Convolutional Networks into Publication-Ready Visualizations},
  author={B{\"a}uerle, Alex and Ropinski, Timo},
  journal={arXiv preprint arXiv:1902.04394},
  year={2019}
}

Acknowlegements

This work was funded by the Carl-Zeiss-Scholarship for Ph.D. students.

Comments
  • Add visualization from model file

    Add visualization from model file

    Describe the request Let the user upload his/her model instead of pasting the entire code

    How can it be tackled? For tensorflow, use tf.keras.models.load_model(h5_file)

    feature-request 
    opened by andreasntr 8
  • URL fetch for pertrained model

    URL fetch for pertrained model

    Hello Net2Vis developers and congrats for the great work. I'm trying to visualize an encoder-decoder network in which the encoder is a pre-trained MobileNetV2. When I import

    from tensorflow.python.keras.applications import MobileNetV2

    and update the code, it raises the following error: Exception: URL fetch failure on "https://https://storage.googleapis.com/tensorflow/keras-applications/mobilenet_v2/mobilenet_v2_weights_tf_dim_ordering_tf_kernels_0.35_224_no_top.h5" : None [Errno -3] Temporary failure in name resolution

    I think that it is a strict-origin-when-cross-origin bug but I'm not a React user in order to solve the issue.

    Any suggestions ?

    Local Instance 
    opened by Gpetrak 3
  • "Automatically group" works but "group" does not work

    "Automatically group" can group together layers automatically and successfully, but I'd like to do a custom group.

    Clicking "group" does not have any response on the website.

    Website 
    opened by sky1ove 3
  • export code in pytorch

    export code in pytorch

    Two things can be added:

    1. It could be very useful if the input Keras modeling code could not only be visualized, but also be exported in pytorch, as many people are using pytorch
    2. Another thing is to add pytorch modeling code visualization, and the export could be code in Keras.

    In general, I really like this package and its online implementation. Should be seen by more people!

    feature-request 
    opened by sky1ove 3
  • I want to download in the format of .png or .jpg

    I want to download in the format of .png or .jpg

    Hello. Net2Vis is quite helpful tool for me. Thank you for developing.

    Describe the request I would like to specify the format of downloading more than pdf and svg. If it is possible to download in the image format like png or jpg, it would be more helpful!

    Thank you for reading my feature request 😄

    feature-request 
    opened by KazukiOhta 3
  • Bump tensorflow from 2.5.1 to 2.7.2 in /backend

    Bump tensorflow from 2.5.1 to 2.7.2 in /backend

    Bumps tensorflow from 2.5.1 to 2.7.2.

    Release notes

    Sourced from tensorflow's releases.

    TensorFlow 2.7.2

    Release 2.7.2

    This releases introduces several vulnerability fixes:

    TensorFlow 2.7.1

    Release 2.7.1

    This releases introduces several vulnerability fixes:

    • Fixes a floating point division by 0 when executing convolution operators (CVE-2022-21725)
    • Fixes a heap OOB read in shape inference for ReverseSequence (CVE-2022-21728)
    • Fixes a heap OOB access in Dequantize (CVE-2022-21726)
    • Fixes an integer overflow in shape inference for Dequantize (CVE-2022-21727)
    • Fixes a heap OOB access in FractionalAvgPoolGrad (CVE-2022-21730)
    • Fixes an overflow and divide by zero in UnravelIndex (CVE-2022-21729)
    • Fixes a type confusion in shape inference for ConcatV2 (CVE-2022-21731)
    • Fixes an OOM in ThreadPoolHandle (CVE-2022-21732)
    • Fixes an OOM due to integer overflow in StringNGrams (CVE-2022-21733)
    • Fixes more issues caused by incomplete validation in boosted trees code (CVE-2021-41208)
    • Fixes an integer overflows in most sparse component-wise ops (CVE-2022-23567)
    • Fixes an integer overflows in AddManySparseToTensorsMap (CVE-2022-23568)

    ... (truncated)

    Changelog

    Sourced from tensorflow's changelog.

    Release 2.7.2

    This releases introduces several vulnerability fixes:

    Release 2.6.4

    This releases introduces several vulnerability fixes:

    • Fixes a code injection in saved_model_cli (CVE-2022-29216)
    • Fixes a missing validation which causes TensorSummaryV2 to crash (CVE-2022-29193)
    • Fixes a missing validation which crashes QuantizeAndDequantizeV4Grad (CVE-2022-29192)
    • Fixes a missing validation which causes denial of service via DeleteSessionTensor (CVE-2022-29194)
    • Fixes a missing validation which causes denial of service via GetSessionTensor (CVE-2022-29191)
    • Fixes a missing validation which causes denial of service via StagePeek (CVE-2022-29195)
    • Fixes a missing validation which causes denial of service via UnsortedSegmentJoin (CVE-2022-29197)
    • Fixes a missing validation which causes denial of service via LoadAndRemapMatrix (CVE-2022-29199)
    • Fixes a missing validation which causes denial of service via SparseTensorToCSRSparseMatrix (CVE-2022-29198)
    • Fixes a missing validation which causes denial of service via LSTMBlockCell (CVE-2022-29200)
    • Fixes a missing validation which causes denial of service via Conv3DBackpropFilterV2 (CVE-2022-29196)
    • Fixes a CHECK failure in depthwise ops via overflows (CVE-2021-41197)
    • Fixes issues arising from undefined behavior stemming from users supplying invalid resource handles (CVE-2022-29207)
    • Fixes a segfault due to missing support for quantized types (CVE-2022-29205)
    • Fixes a missing validation which results in undefined behavior in SparseTensorDenseAdd (CVE-2022-29206)

    ... (truncated)

    Commits
    • dd7b8a3 Merge pull request #56034 from tensorflow-jenkins/relnotes-2.7.2-15779
    • 1e7d6ea Update RELEASE.md
    • 5085135 Merge pull request #56069 from tensorflow/mm-cp-52488e5072f6fe44411d70c6af09e...
    • adafb45 Merge pull request #56060 from yongtang:curl-7.83.1
    • 01cb1b8 Merge pull request #56038 from tensorflow-jenkins/version-numbers-2.7.2-4733
    • 8c90c2f Update version numbers to 2.7.2
    • 43f3cdc Update RELEASE.md
    • 98b0a48 Insert release notes place-fill
    • dfa5cf3 Merge pull request #56028 from tensorflow/disable-tests-on-r2.7
    • 501a65c Disable timing out tests
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies python 
    opened by dependabot[bot] 2
  • Letters are cut out, too tight Legend PDF

    Letters are cut out, too tight Legend PDF

    Describe the bug When I use your website and download the legend, its so tight, that the I of InputLayer is cutted out. For the SVG it seems to work fine.

    Network ID 69uCpJ7a74aX3iIgAohicfeXVxgpt1aLRQEspdh4XBWWPFb9Ws

    Expected behavior I can see every letter, that I can see on the preview on the website.

    Screenshots If applicable, add screenshots to help explain your problem. DeepAnTLegend.pdf

    Desktop (please complete the following information):

    • OS: Windows
    • Browser Chrome
    • Version 92.0.4515.159
    Website 
    opened by PeterKeffer 2
  • More feedback than

    More feedback than "Code not executable." on the website.

    Describe the request Sometimes there is code I use that net2vis cannot handle (like a custom regularizer). On the website I then get the feedback Code not executable., which is good at telling me that the code does not work like this, but figuring out what does not work is a bit of guessing and just running less code until it works. Ideally the error message would include some clue as to what went wrong. Anything from the exact line and reason as to why the code failed nicely formatted to the python exception that was raised could help.

    How can it be tackled? In addition to Code not executable. there could be some debugging information in the little notification. Or maybe a Show more button, where more information can be shown, if desired. When the current error notification is triggered, I imagine that some sort of function is being called... so maybe some argument with the more detailed error information can be added, if that is how it works.

    feature-request 
    opened by Sebastian-Landl 2
  • Example code on the website does not execute

    Example code on the website does not execute

    Describe the bug The example code on the website does not execute, only the message Code not executable shows.

    Network ID Network ID: kWZGQhZVgO1GYXoRdEFrIa5KjPr2lvaGqwhvqlCxI6mKme5gDY

    Expected behavior Example code should execute.

    System

    • OS: Windows 10
    • Browser: Firefox
    • Version 89.0.2 (64-bit)

    Additional context I originally tried to execute this code:

    import tensorflow as tf
    import numpy as np
    from tensorflow import keras
    from tensorflow.keras import layers
    
    NUM_POINTS = 2048
    NUM_CLASSES = 10
    
    def conv_bn(x, filters):
        x = layers.Conv1D(filters, kernel_size=1, padding="valid")(x)
        x = layers.BatchNormalization(momentum=0.0)(x)
        return layers.Activation("relu")(x)
    
    
    def dense_bn(x, filters):
        x = layers.Dense(filters)(x)
        x = layers.BatchNormalization(momentum=0.0)(x)
        return layers.Activation("relu")(x)
        
        
    class OrthogonalRegularizer(keras.regularizers.Regularizer):
        def __init__(self, num_features, l2reg=0.001):
            self.num_features = num_features
            self.l2reg = l2reg
            self.eye = tf.eye(num_features)
    
        def __call__(self, x):
            x = tf.reshape(x, (-1, self.num_features, self.num_features))
            xxt = tf.tensordot(x, x, axes=(2, 2))
            xxt = tf.reshape(xxt, (-1, self.num_features, self.num_features))
            return tf.reduce_sum(self.l2reg * tf.square(xxt - self.eye))
        
        def get_config(self):
            return {'num_features': self.num_features,'l2reg': self.l2reg}
    
    def tnet(inputs, num_features):
        # Initalise bias as the indentity matrix
        bias = keras.initializers.Constant(np.eye(num_features).flatten())
        #reg = OrthogonalRegularizer(num_features)
    
        x = conv_bn(inputs, 32)
        x = conv_bn(x, 64)
        x = conv_bn(x, 512)
        x = layers.GlobalMaxPooling1D()(x)
        x = dense_bn(x, 256)
        x = dense_bn(x, 128)
        x = layers.Dense(num_features * num_features,kernel_initializer="zeros",bias_initializer=bias)(x)
        feat_T = layers.Reshape((num_features, num_features))(x)
        # Apply affine transformation to input features
        return layers.Dot(axes=(2, 1))([inputs, feat_T])
    
    def get_model():
        inputs = keras.Input(shape=(NUM_POINTS, 3))
    
        x = tnet(inputs, 3)
        x = conv_bn(x, 32)
        x = conv_bn(x, 32)
        x = tnet(x, 32)
        x = conv_bn(x, 32)
        x = conv_bn(x, 64)
        x = conv_bn(x, 512)
        x = layers.GlobalMaxPooling1D()(x)
        x = dense_bn(x, 256)
        x = layers.Dropout(0.3)(x)
        x = dense_bn(x, 128)
        x = layers.Dropout(0.3)(x)
    
        outputs = layers.Dense(NUM_CLASSES, activation="softmax")(x)
    
        model = keras.Model(inputs=inputs, outputs=outputs, name="pointnet")
        
        return model
    

    Which I expected to work, as the visualisation for a network very similar to it worked just fine last week.

    Next I tried a super simple example, but that did not work either:

    from tensorflow import keras
    
    def get_model():
        return keras.Model()
    

    Finally, I tested it with the example code which did not work either. The example code that shows when I visit the website is:

    # You can freely modify this file.
    # However, you need to have a function that is named get_model and returns a Keras Model.
    import keras as k
    from keras import models
    from keras import layers
    from keras import utils
    
    def get_model():
        img_height = 256
        img_width = 256
        img_channels = 1
    
        input_shape = (img_height, img_width, img_channels)
        img_input = k.Input(shape=input_shape)
        conv1 = layers.Conv2D(64, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(img_input)
        conv1 = layers.Conv2D(64, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(conv1)
        pool1 = layers.MaxPooling2D(pool_size=(2, 2))(conv1)
        conv2 = layers.Conv2D(128, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(pool1)
        conv2 = layers.Conv2D(128, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(conv2)
        pool2 = layers.MaxPooling2D(pool_size=(2, 2))(conv2)
    
        model = models.Model(img_input, pool2)
    
        return model
    
    Website 
    opened by Sebastian-Landl 2
  • Multiple Input Layers

    Multiple Input Layers

    Dear developers,

    I really like your tool. For me, it is the very good way to visualize my networks. Currently, I am using a model with multiple input branches that are concatenated at a later stage. Unfortunately, Net2Vis assumes all input layers to be a split of the same input (even if the shapes differ). I would appreciate if your tool could support multiple input branches.

    Please find attached the graphical output and my model code.

    grafik

    # You can freely modify this file.
    # However, you need to have a function that is named get_model and returns a Keras Model.
    import keras
    from keras import models
    from keras import layers
    from keras import utils
    
    def get_model():
        window = 65
        variables = 9
    
        n_branches = 4
        
        input_shape = [(window, 1, variables),
            (window, 1, variables),
            (window, 1, variables),
            (window, 1, variables + 1)]
        output_shape = 4
    
        conf = [64, 32, 16]
        bn = False
        activation = keras.layers.ReLU
        activation_output = keras.layers.Activation
        dropout = True
        dropout_rate = 0.2
    
        # input tail 0
        x_input_b0 = keras.layers.Input(shape=input_shape[0])
        x_in_b0 = keras.layers.Flatten()(x_input_b0)
        for layer, n_hidden in enumerate(conf):
            x_in_b0 = keras.layers.Dense(n_hidden)(x_in_b0)
            if bn is True:
                x_in_b0 = keras.layers.BatchNormalization()(x_in_b0)
            x_in_b0 = activation()(x_in_b0)
            if dropout is not None:
                x_in_b0 = keras.layers.Dropout(dropout_rate)(x_in_b0)
    
        # input tail 1
        x_input_b1 = keras.layers.Input(shape=input_shape[1])
        x_in_b1 = keras.layers.Flatten()(x_input_b1)
        for layer, n_hidden in enumerate(conf):
            x_in_b1 = keras.layers.Dense(n_hidden)(x_in_b1)
            if bn is True:
                x_in_b1 = keras.layers.BatchNormalization()(x_in_b1)
            x_in_b1 = activation()(x_in_b1)
            if dropout is not None:
                x_in_b1 = keras.layers.Dropout(dropout_rate)(x_in_b1)
    
        # input tail 2
        x_input_b2 = keras.layers.Input(shape=input_shape[2])
        x_in_b2 = keras.layers.Flatten()(x_input_b2)
        for layer, n_hidden in enumerate(conf):
            x_in_b2 = keras.layers.Dense(n_hidden)(x_in_b2)
            if bn is True:
                x_in_b2 = keras.layers.BatchNormalization()(x_in_b2)
            x_in_b2 = activation()(x_in_b2)
            if dropout is not None:
                x_in_b2 = keras.layers.Dropout(dropout_rate)(x_in_b2)
    
        # input tail 3
        x_input_b3 = keras.layers.Input(shape=input_shape[3])
        x_in_b3 = keras.layers.Flatten()(x_input_b3)
        for layer, n_hidden in enumerate(conf):
            x_in_b3 = keras.layers.Dense(n_hidden)(x_in_b3)
            if bn is True:
                x_in_b3 = keras.layers.BatchNormalization()(x_in_b3)
            x_in_b3 = activation()(x_in_b3)
            if dropout is not None:
                x_in_b3 = keras.layers.Dropout(dropout_rate)(x_in_b3)
    
        # concat all inputs
        x_input = [x_input_b0, x_input_b1, x_input_b2, x_input_b3]
        x_concat = keras.layers.Concatenate()([x_in_b0, x_in_b1, x_in_b2, x_in_b3])
        
        # output tail
        n_neurons_concat = int(conf[-1]) * n_branches
        layer_concat = 0
        for exp in reversed(range(2, n_branches + 1)):
            n_neurons = output_shape ** exp
            if n_neurons < n_neurons_concat:
                layer_concat += 1
                x_concat = keras.layers.Dense(n_neurons)(x_concat)
                if bn is True:
                    x_concat = keras.layers.BatchNormalization()(x_concat)
                x_concat = activation()(x_concat)
                if dropout is not None:
                    x_concat = keras.layers.Dropout(dropout_rate)(x_concat)
        x_concat = keras.layers.Dense(output_shape)(x_concat)
        out = activation_output("linear")(x_concat)
        model = keras.Model(inputs=x_input, outputs=[out])
        
        return model
    
    bug 
    opened by lleuven 2
  • Squeeze layer giving error

    Squeeze layer giving error

    Describe the bug I use a tf.squeeze layer in my network. I could not make tf.squeeze work with net2vis and a lambda layer did not work either. tf.squeeze gives me the error 'NoneType' object has no attribute _inbound_nodes and wrapping keras.backend.squeeze in a lambda layer says that squeeze is not JSON serializable.

    Network ID https://viscom.net2vis.uni-ulm.de/7fplsc22NA6oYhvyr6BAy80XODOK4oP1gB7tR8sTygh9iw1Npd

    Expected behavior I want to visualize a model starting with Conv3D then squeeze, then conv2d.

    Desktop (please complete the following information):

    • OS: macOS
    • Browser chrome
    • Version 80
    bug Website stale 
    opened by drahcirD 2
  • Bump certifi from 2020.12.5 to 2022.12.7 in /backend

    Bump certifi from 2020.12.5 to 2022.12.7 in /backend

    Bumps certifi from 2020.12.5 to 2022.12.7.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies python 
    opened by dependabot[bot] 0
  • Bump tensorflow from 2.5.1 to 2.9.3 in /backend

    Bump tensorflow from 2.5.1 to 2.9.3 in /backend

    Bumps tensorflow from 2.5.1 to 2.9.3.

    Release notes

    Sourced from tensorflow's releases.

    TensorFlow 2.9.3

    Release 2.9.3

    This release introduces several vulnerability fixes:

    TensorFlow 2.9.2

    Release 2.9.2

    This releases introduces several vulnerability fixes:

    ... (truncated)

    Changelog

    Sourced from tensorflow's changelog.

    Release 2.9.3

    This release introduces several vulnerability fixes:

    Release 2.8.4

    This release introduces several vulnerability fixes:

    ... (truncated)

    Commits
    • a5ed5f3 Merge pull request #58584 from tensorflow/vinila21-patch-2
    • 258f9a1 Update py_func.cc
    • cd27cfb Merge pull request #58580 from tensorflow-jenkins/version-numbers-2.9.3-24474
    • 3e75385 Update version numbers to 2.9.3
    • bc72c39 Merge pull request #58482 from tensorflow-jenkins/relnotes-2.9.3-25695
    • 3506c90 Update RELEASE.md
    • 8dcb48e Update RELEASE.md
    • 4f34ec8 Merge pull request #58576 from pak-laura/c2.99f03a9d3bafe902c1e6beb105b2f2417...
    • 6fc67e4 Replace CHECK with returning an InternalError on failing to create python tuple
    • 5dbe90a Merge pull request #58570 from tensorflow/r2.9-7b174a0f2e4
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies python 
    opened by dependabot[bot] 0
  • Bump shell-quote and react-scripts in /net2vis

    Bump shell-quote and react-scripts in /net2vis

    Bumps shell-quote to 1.7.3 and updates ancestor dependency react-scripts. These dependencies need to be updated together.

    Updates shell-quote from 1.7.2 to 1.7.3

    Commits

    Updates react-scripts from 4.0.3 to 5.0.1

    Commits

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies javascript 
    opened by dependabot[bot] 0
  • Bump ejs and react-scripts in /net2vis

    Bump ejs and react-scripts in /net2vis

    Bumps ejs to 3.1.8 and updates ancestor dependency react-scripts. These dependencies need to be updated together.

    Updates ejs from 2.7.4 to 3.1.8

    Release notes

    Sourced from ejs's releases.

    v3.1.8

    Version 3.1.8

    v3.1.7

    Version 3.1.7

    v3.1.6

    Version 3.1.6

    v3.1.5

    Version 3.1.5

    v3.0.2

    No release notes provided.

    Changelog

    Sourced from ejs's changelog.

    v3.0.1: 2019-11-23

    • Removed require.extensions (@​mde)
    • Removed legacy preprocessor include (@​mde)
    • Removed support for EOL Nodes 4 and 6 (@​mde)
    Commits

    Updates react-scripts from 4.0.3 to 5.0.1

    Commits

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies javascript 
    opened by dependabot[bot] 0
  • Bump async from 2.6.3 to 2.6.4 in /net2vis

    Bump async from 2.6.3 to 2.6.4 in /net2vis

    Bumps async from 2.6.3 to 2.6.4.

    Changelog

    Sourced from async's changelog.

    v2.6.4

    • Fix potential prototype pollution exploit (#1828)
    Commits
    Maintainer changes

    This version was pushed to npm by hargasinski, a new releaser for async since your current version.


    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies javascript 
    opened by dependabot[bot] 0
  • Bump eventsource from 1.1.0 to 1.1.2 in /net2vis

    Bump eventsource from 1.1.0 to 1.1.2 in /net2vis

    Bumps eventsource from 1.1.0 to 1.1.2.

    Changelog

    Sourced from eventsource's changelog.

    1.1.2

    • Inline origin resolution, drops original dependency (#281 Espen Hovlandsdal)

    1.1.1

    • Do not include authorization and cookie headers on redirect to different origin (#273 Espen Hovlandsdal)
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies javascript 
    opened by dependabot[bot] 0
Owner
Visual Computing Group (Ulm University)
Visual Computing Group (Ulm University)
A ultra-lightweight 3D renderer of the Tensorflow/Keras neural network architectures

A ultra-lightweight 3D renderer of the Tensorflow/Keras neural network architectures

Souvik Pratiher 16 Nov 17, 2021
Pytorch implementation of convolutional neural network visualization techniques

Convolutional Neural Network Visualizations This repository contains a number of convolutional neural network visualization techniques implemented in

Utku Ozbulak 7k Jan 3, 2023
Convolutional neural network visualization techniques implemented in PyTorch.

This repository contains a number of convolutional neural network visualization techniques implemented in PyTorch.

null 1 Nov 6, 2021
Interactive convnet features visualization for Keras

Quiver Interactive convnet features visualization for Keras The quiver workflow Video Demo Build your model in keras model = Model(...) Launch the vis

Keplr 1.7k Dec 21, 2022
A Practical Debugging Tool for Training Deep Neural Networks

Cockpit is a visual and statistical debugger specifically designed for deep learning!

null 31 Aug 14, 2022
Portal is the fastest way to load and visualize your deep neural networks on images and videos 🔮

Portal is the fastest way to load and visualize your deep neural networks on images and videos ??

Datature 243 Jan 5, 2023
Visualization toolkit for neural networks in PyTorch! Demo -->

FlashTorch A Python visualization toolkit, built with PyTorch, for neural networks in PyTorch. Neural networks are often described as "black box". The

Misa Ogura 692 Dec 29, 2022
Making decision trees competitive with neural networks on CIFAR10, CIFAR100, TinyImagenet200, Imagenet

Neural-Backed Decision Trees · Site · Paper · Blog · Video Alvin Wan, *Lisa Dunlap, *Daniel Ho, Jihan Yin, Scott Lee, Henry Jin, Suzanne Petryk, Sarah

Alvin Wan 556 Dec 20, 2022
GNNLens2 is an interactive visualization tool for graph neural networks (GNN).

GNNLens2 is an interactive visualization tool for graph neural networks (GNN).

Distributed (Deep) Machine Learning Community 143 Jan 7, 2023
Code for visualizing the loss landscape of neural nets

Visualizing the Loss Landscape of Neural Nets This repository contains the PyTorch code for the paper Hao Li, Zheng Xu, Gavin Taylor, Christoph Studer

Tom Goldstein 2.2k Dec 30, 2022
Visualization Toolbox for Long Short Term Memory networks (LSTMs)

Visualization Toolbox for Long Short Term Memory networks (LSTMs)

Hendrik Strobelt 1.1k Jan 4, 2023
A collection of infrastructure and tools for research in neural network interpretability.

Lucid Lucid is a collection of infrastructure and tools for research in neural network interpretability. We're not currently supporting tensorflow 2!

null 4.5k Jan 7, 2023
Visualizer for neural network, deep learning, and machine learning models

Netron is a viewer for neural network, deep learning and machine learning models. Netron supports ONNX (.onnx, .pb, .pbtxt), Keras (.h5, .keras), Tens

Lutz Roeder 20.9k Dec 28, 2022
null 131 Jun 25, 2021
Using / reproducing ACD from the paper "Hierarchical interpretations for neural network predictions" 🧠 (ICLR 2019)

Hierarchical neural-net interpretations (ACD) ?? Produces hierarchical interpretations for a single prediction made by a pytorch neural network. Offic

Chandan Singh 111 Jan 3, 2023
Visualizer for neural network, deep learning, and machine learning models

Netron is a viewer for neural network, deep learning and machine learning models. Netron supports ONNX, TensorFlow Lite, Keras, Caffe, Darknet, ncnn,

Lutz Roeder 16.3k Sep 27, 2021
pytorch implementation of "Distilling a Neural Network Into a Soft Decision Tree"

Soft-Decision-Tree Soft-Decision-Tree is the pytorch implementation of Distilling a Neural Network Into a Soft Decision Tree, paper recently published

Kim Heecheol 262 Dec 4, 2022
Code for "High-Precision Model-Agnostic Explanations" paper

Anchor This repository has code for the paper High-Precision Model-Agnostic Explanations. An anchor explanation is a rule that sufficiently “anchors”

Marco Tulio Correia Ribeiro 735 Jan 5, 2023
L2X - Code for replicating the experiments in the paper Learning to Explain: An Information-Theoretic Perspective on Model Interpretation.

L2X Code for replicating the experiments in the paper Learning to Explain: An Information-Theoretic Perspective on Model Interpretation at ICML 2018,

Jianbo Chen 113 Sep 6, 2022