我尝试使用Graphviz来获取基本神经网络状态的图片。输入层有14个神经元,输出层只有一个神经元。可以选择隐藏层的数量以及每层内的神经元数量。通常,只有一个隐藏层。虽然这个层中的神经元数量可能相当大(如1000)。但是,出于演示目的,我只需要5个神经元(我意识到我永远不会得到数百个神经元的有用图片)。我想:
关于厚度,我知道我可以使用" penwidth"。我也知道集群,它可以帮助限制每一层并标记它们。到目前为止,我的主要问题是输入层(14个神经元)和隐藏层之间有太多边缘,Graphiz可以产生清晰的图像。如果我添加标签来显示连接的权重,那就更糟了。 我认为在输入和隐藏图层之间放置更多空间可以提高渲染的可读性,但我没有找到如何做到这一点,尽管进行了长时间的研究。
以下是目前的样子: Current rendering of the neural network, without weights
以下是此图片后面自动生成的点代码:
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。 请注意,神经元在图片中没有以正确的顺序出现,这个问题我也没有解决......
谢谢你的帮助。
答案 0 :(得分:0)
这是一个包含一些不同想法的图表:
ranksep增加了“排名”之间的距离。 保证金使节点更大。 (可能有更好的方法来做到这一点。)
为每个节点着色并使该节点的每个边都使用相同的色调。为了便于阅读,您可以使节点更轻,并使该色调的边缘更暗。不要担心使用颜色名称,因为它支持#rrggbb表示法。
我发现使用这样的颜色大大增加了复杂图形的视觉清晰度。在着色时跟踪边缘要容易得多,如果某些东西的重量很轻,它可能会变得难以看见或完全看不见。
这种着色的另一个好处是它可以回应染色真实神经元的方法。见灵感http://neuroimages.tumblr.com
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;
}