最近在学习神经网络的时候,需要画一些网络结构图,但是感觉使用visio
画太麻烦了,于是想使用Mathematica来画出网络拓扑图。于是在我寻找之下,找到了下面的方法来画图。参考链接见文末。
(这一次我不想讲这个方法具体是如何实现的了,我们就讲一下如何使用就可以了,下次直接使用就可以了,我也是自己记录一下)
画神经网络图函数
f = Module[{index = {1, 1 + First@#}},
AdjacencyGraph@
SparseArray[
Band[# &[index, index += #]] -> ConstantArray[1, #] & /@
Partition[#, 2, 1], {1, 1} Total@#]] &;
我们看一下具体的使用(这里的{1,2,3,4,5}表示第一层有1个节点,第二层有两个节点,第三层有三个节点,第四层有四个节点,第五层有五个节点)
f[{1, 2, 3, 4, 5}]
于是画出了下面的图像
但是我们觉得这个图像还是不好看,下面我们来进行进一步的美化:
SetProperty[
f[#], {VertexLabels -> Placed["Name", Center],
GraphLayout -> {"MultipartiteEmbedding", "VertexPartition" -> #},
VertexSize -> Large, VertexLabelStyle -> 14}] &@{5, 10, 10, 1}
通过设置一些属性,我们就可以画出下面的图(代码中的{5,10,10,1}表示第一层有5个节点,第二层有10个节点,第三层有10个节点,第四层有1个节点):
到这一步,我们就差不多可以画出我们想要的神经网络的结构图了。
参考资料
上面方法来源:https://mathematica.stackexchange.com/questions/135354/function-to-draw-densely-interconnected-layers-in-graph-e-g-neural-net
- 微信公众号
- 关注微信公众号
- QQ群
- 我们的QQ群号
评论