Turn your NIR definitions into a nice graph, the original publication serving as a template.
Customise your node colour preferences in style.yml, and quickly generate graphs from your neuromorphic networks.
This work is in progress.
By running the following code (from a notebook),
import nir
import nirviz
import numpy as np
a = np.random.randn(2)
ir = nir.NIRGraph(
nodes={
"input": nir.Input(input_type=np.array([2])),
"affine1": nir.Affine(weight=np.zeros((2,2)), bias=False),
"cu1": nir.CubaLIF(tau_mem=a, tau_syn=a, r=a, v_leak=a, v_threshold=a, v_reset=a),
"affine_rec": nir.Affine(weight=np.zeros((2,2)), bias=False),
"affine2": nir.Affine(weight=np.zeros((2,2)), bias=False),
"cu2": nir.CubaLIF(tau_mem=a, tau_syn=a, r=a, v_leak=a, v_threshold=a, v_reset=a),
"output": nir.Output(output_type=np.array([2]))
},
edges=[("input", "affine1"), ("affine1", "cu1"), ("affine_rec", "cu1"), ("cu1", "affine_rec"), ("cu1", "affine2"), ("affine2", "cu2"), ("cu2", "output")])
viz = nirviz.visualize(ir)
viz.show()
You would get the following visualisation

Similar to Figure 3 of the publication.

To convert a saved NIR graph (e.g. srnn.nir) to a PNG or SVG, you can use one of the following commands:
python -m nirviz srnn.nir # SVG -> stdout
python -m nirviz srnn.nir img/srnn.png # PNG -> file
python -m nirviz srnn.nir img/srnn.svg # SVG -> file
You can customise the style you see via the style file.
The style file is defined in YAML. You can find the default location by running:
import nirviz
print(f"nirviz style file location: {nirviz.visualize.default_style_file()}")
or by passing your own style.yml
:
import nirviz
viz = nirviz.visualize(nir_graph, style_file="style.yml")
viz.show()
python -m nirviz --yaml './style.yml' srnn.nir
The format currently only supports setting node attributes. The node attributes correspond to Graphviz node attributes. An example file would contain:
node-categories:
category-name: # User defined
patterns: ["Affine", "IF"]
attributes:
# Corresponds to node attributes of graphviz
# https://graphviz.org/docs/nodes/
color: "red"
style: "filled"
shape: "box"
Which would paint all "Affine" and "IF" NIR nodes red.