Neural network 需要帮助改进graphviz渲染的一个基本神经网络

Neural network 需要帮助改进graphviz渲染的一个基本神经网络,neural-network,graphviz,Neural Network,Graphviz,我尝试使用Graphviz来获得基本神经网络状态的图片。输入层有14个神经元,输出层只有一个神经元。我们可以选择隐藏层的数量以及每个层中的神经元数量。通常,只有一个隐藏层。但这一层中的神经元数量可能相当大(比如1000个)。但是,为了演示的目的,我只需要5个神经元(我知道我永远不会得到数百个神经元的有用图片)。我想: 写下每个神经元之间边缘(连接)的权重 根据边缘的重量修改边缘的厚度 也许给每一层贴上标签 关于厚度,我知道我可以使用“笔宽”。我还了解集群,它可以帮助绑定每个层并为它们添加标签

我尝试使用Graphviz来获得基本神经网络状态的图片。输入层有14个神经元,输出层只有一个神经元。我们可以选择隐藏层的数量以及每个层中的神经元数量。通常,只有一个隐藏层。但这一层中的神经元数量可能相当大(比如1000个)。但是,为了演示的目的,我只需要5个神经元(我知道我永远不会得到数百个神经元的有用图片)。我想:

  • 写下每个神经元之间边缘(连接)的权重
  • 根据边缘的重量修改边缘的厚度
  • 也许给每一层贴上标签
关于厚度,我知道我可以使用“笔宽”。我还了解集群,它可以帮助绑定每个层并为它们添加标签。到目前为止,我的主要问题是在输入层(14个神经元)和隐藏层之间有太多的边缘,Graphiz无法生成清晰的图像。如果我添加标签来显示连接的权重,情况会更糟我认为在输入层和隐藏层之间留出更多空间可以提高渲染的可读性,但我没有找到如何做到这一点,尽管进行了长期的研究

以下是目前的情况:

下面是这张图片后面自动生成的点代码:

digraph graphname {
0.0 -> 1.0;
0.1 -> 1.0;
0.2 -> 1.0;
0.3 -> 1.0;
0.4 -> 1.0;
0.5 -> 1.0;
0.6 -> 1.0;
0.7 -> 1.0;
0.8 -> 1.0;
0.9 -> 1.0;
0.10 -> 1.0;
0.11 -> 1.0;
0.12 -> 1.0;
0.13 -> 1.0;
0.0 -> 1.1;
0.1 -> 1.1;
0.2 -> 1.1;
0.3 -> 1.1;
0.4 -> 1.1;
0.5 -> 1.1;
0.6 -> 1.1;
0.7 -> 1.1;
0.8 -> 1.1;
0.9 -> 1.1;
0.10 -> 1.1;
0.11 -> 1.1;
0.12 -> 1.1;
0.13 -> 1.1;
0.0 -> 1.2;
0.1 -> 1.2;
0.2 -> 1.2;
0.3 -> 1.2;
0.4 -> 1.2;
0.5 -> 1.2;
0.6 -> 1.2;
0.7 -> 1.2;
0.8 -> 1.2;
0.9 -> 1.2;
0.10 -> 1.2;
0.11 -> 1.2;
0.12 -> 1.2;
0.13 -> 1.2;
0.0 -> 1.3;
0.1 -> 1.3;
0.2 -> 1.3;
0.3 -> 1.3;
0.4 -> 1.3;
0.5 -> 1.3;
0.6 -> 1.3;
0.7 -> 1.3;
0.8 -> 1.3;
0.9 -> 1.3;
0.10 -> 1.3;
0.11 -> 1.3;
0.12 -> 1.3;
0.13 -> 1.3;
0.0 -> 1.4;
0.1 -> 1.4;
0.2 -> 1.4;
0.3 -> 1.4;
0.4 -> 1.4;
0.5 -> 1.4;
0.6 -> 1.4;
0.7 -> 1.4;
0.8 -> 1.4;
0.9 -> 1.4;
0.10 -> 1.4;
0.11 -> 1.4;
0.12 -> 1.4;
0.13 -> 1.4;
1.0 -> 2.0;
1.1 -> 2.0;
1.2 -> 2.0;
1.3 -> 2.0;
1.4 -> 2.0;
}
在这段代码中,神经元按如下方式编号:LAYER_NUMBER.NEURON_NUMBER。 请注意,神经元在图片中出现的顺序不正确,我也没有解决这个问题


感谢您的帮助。

这里是一个包含一些不同想法的图表:

ranksep增加了“等级”之间的距离。 边距使节点变大。(可能有更好的方法可以做到这一点。)

为每个节点着色,并使该节点的每个边都使用相同的色调。为了便于阅读,可以使节点更亮,使边缘更暗。不用担心使用颜色名称,因为它支持#rrggbb表示法

我发现使用这样的颜色可以大大提高复杂图形的视觉清晰度。当边缘着色时,它更容易跟随,如果某个东西的重量较轻,它可以几乎看不见或完全看不见

这种染色的另一个好处是,它可以呼应染色真实神经元的方法。看到这个灵感

digraph graphname {
graph [rankdir="LR" ranksep="3.0"]
node [style=filled];
edge [penwidth="0.5" color="#e0e0e0"];

0.1 [fillcolor="cadetblue"];
0.2 [fillcolor="coral"];
0.3 [fillcolor="green"];
0.4 [fillcolor="gold"];
0.6 [fillcolor="cyan"];

1.0 [margin=0.4];
1.1 [margin=0.4];
1.2 [margin=0.4];
1.3 [margin=0.4];
1.4 [margin=0.4];

0.0 -> 1.0;
0.1 -> 1.0 [color="cadetblue1" penwidth="1"];
0.2 -> 1.0 [color="coral2" penwidth="2"];
0.3 -> 1.0 [color="green3" penwidth="6"];
0.4 -> 1.0 [color="gold4" penwidth="8"];
0.5 -> 1.0;
0.6 -> 1.0;
0.7 -> 1.0;
0.8 -> 1.0;
0.9 -> 1.0;
0.10 -> 1.0;
0.11 -> 1.0;
0.12 -> 1.0;
0.13 -> 1.0;
0.0 -> 1.1;
0.1 -> 1.1 [color="cadetblue2" penwidth="2"];
0.2 -> 1.1 [color="coral3" penwidth="5"];
0.3 -> 1.1 [color="green4" penwidth="8"];
0.4 -> 1.1; 
0.5 -> 1.1 [color="cyan1" penwidth="1"];
0.6 -> 1.1;
0.7 -> 1.1;
0.8 -> 1.1;
0.9 -> 1.1;
0.10 -> 1.1;
0.11 -> 1.1;
0.12 -> 1.1;
0.13 -> 1.1;
0.0 -> 1.2;
0.1 -> 1.2 [color="cadetblue3"  penwidth="3"];
0.2 -> 1.2 [color="coral4"  penwidth="6"];
0.3 -> 1.2;
0.4 -> 1.2 [color="gold1" penwidth="1"];
0.5 -> 1.2 [color="cyan2" penwidth="2"];
0.6 -> 1.2;
0.7 -> 1.2;
0.8 -> 1.2;
0.9 -> 1.2;
0.10 -> 1.2;
0.11 -> 1.2;
0.12 -> 1.2;
0.13 -> 1.2;
0.0 -> 1.3;
0.1 -> 1.3 [color="cadetblue4" penwidth="4"];
0.2 -> 1.3;
0.3 -> 1.3 [color="green1" penwidth="1"];
0.4 -> 1.3 [color="gold2" penwidth="2"];
0.5 -> 1.3 [color="cyan3" penwidth="3"];
0.6 -> 1.3;
0.7 -> 1.3;
0.8 -> 1.3;
0.9 -> 1.3;
0.10 -> 1.3;
0.11 -> 1.3;
0.12 -> 1.3;
0.13 -> 1.3;
0.0 -> 1.4;
0.1 -> 1.4 [color="cadetblue4"  penwidth="2"];
0.2 -> 1.4 [color="coral4" penwidth="2"];
0.3 -> 1.4 [color="green4" penwidth="2"];
0.4 -> 1.4 [color="gold4" penwidth="2"];
0.5 -> 1.4 [color="cyan4" penwidth="2"];
0.6 -> 1.4;
0.7 -> 1.4;
0.8 -> 1.4;
0.9 -> 1.4;
0.10 -> 1.4;
0.11 -> 1.4;
0.12 -> 1.4;
0.13 -> 1.4;
1.0 -> 2.0;
1.1 -> 2.0;
1.2 -> 2.0;
1.3 -> 2.0;
1.4 -> 2.0;
}