Graphviz神经网络的绘图

本文详细介绍使用Graphviz绘制神经网络图的过程,包括安装Graphviz、手动编辑绘图脚本及利用Python脚本自动化生成复杂神经网络图的方法,有效提高绘图效率。

一、Graphviz安装

sudo apt-get install graphviz

二、神经网络绘图

创建并编辑nn.dot,新增如下

digraph G {
	rankdir = LR
	splines = line
	nodesep = .05
	
	subgraph cluster_0 {
		color = white;
		node [style = solid, color = blue, shape = circle];
		I1 I2 I3;
		label = "input layer";
	}

	subgraph cluster_1 {
		color = white;
		node [style = solid, color = orange, shape = circle];
		H11 H21 H31 H41 H51;
		label = "hidden layer 1";
	}
	
	subgraph cluster_2 {
		color = white;
		node [style = solid, color = orange, shape = circle];
		H12 H22 H32 H42 H52;
		label = "hidden layer 2";
	}
	subgraph cluster_3 {
		color = white;
		node [style = solid, color = sienna, shape = circle];
		O1 O2 O3 O4;
		label = "output layer";
	}

	I1 -> H11
	I1 -> H21
	I1 -> H31
	I1 -> H41
	I1 -> H51

        I2 -> H11
        I2 -> H21
        I2 -> H31
        I2 -> H41
        I2 -> H51

        I3 -> H11
        I3 -> H21
        I3 -> H31
        I3 -> H41
        I3 -> H51

	H11 -> H12
	H21 -> H12
	H31 -> H12
	H41 -> H12
	H51 -> H12

        H11 -> H22
        H21 -> H22
        H31 -> H22
        H41 -> H22
        H51 -> H22

        H11 -> H32
        H21 -> H32
        H31 -> H32
        H41 -> H32
        H51 -> H32

        H11 -> H42
        H21 -> H42
        H31 -> H42
        H41 -> H42
        H51 -> H42

        H11 -> H52
        H21 -> H52
        H31 -> H52
        H41 -> H52
        H51 -> H52

	H12 -> O1
	H22 -> O1
	H32 -> O1
	H42 -> O1
	H52 -> O1

        H12 -> O2
        H22 -> O2
        H32 -> O2
        H42 -> O2
        H52 -> O2

        H12 -> O3
        H22 -> O3
        H32 -> O3
        H42 -> O3
        H52 -> O3

        H12 -> O4
        H22 -> O4
        H32 -> O4
        H42 -> O4
        H52 -> O4
}

 

窗口运行如下命令:

dot -Tjpg nn.dot -o nn.jpg  

得到图形如下:

 

三、python脚本优化

当随着神经网络隐含层层数和各层神经元个数增多,graphviz脚本需要复制粘贴大量格式相同代码,为此考虑python脚本自动增加代码,从而减轻重复工作量。

1. git项目克隆

git clone https://github.com/baymaxKevin/makeNN.git

2. 参数调整

 

在makeDefConfig方法中修改隐含层层数和各层神经元个数layers_cfg,这里在上面网络基础上,隐含层增加一层,隐含层节点分别为10,4,8。

3. 运行

cmd命令或者Pycharm运行二选一。

3.1 cmd命令

python ./makeNN.py

3.2 Pycharm运行

在Pycharm直接运行即可。

3.3 结果展示

参考文章

https://blog.youkuaiyun.com/lanchunhui/article/details/51469006?utm_source=blogxgwz12 

https://blog.youkuaiyun.com/rtygbwwwerr/article/details/50937643

### 关于贝叶斯神经网络绘图方法 绘制贝叶斯神经网络(Bayesian Neural Network, BNN)的结构或结果可以通过多种工具和库完成。以下是几种常见的方法及其适用场景: #### 使用 Matplotlib 和 Seaborn 进行可视化 Matplotlib 是 Python 中最常用的绘图库之一,Seaborn 则是对 Matplotlib 的封装,适合用于统计数据分析的可视化。对于贝叶斯神经网络的结果展示,可以使用这些库来绘制权重分布、预测置信区间或其他统计数据。 ```python import matplotlib.pyplot as plt import seaborn as sns # 假设我们有一个样本集合表示某层权重的概率分布 weights_samples = [...] # 权重采样数据 sns.kdeplot(weights_samples, shade=True) plt.title('Weight Distribution of a Layer') plt.xlabel('Weight Value') plt.ylabel('Density') plt.show() ``` 这种方法特别适用于显示单个节点或层的权重分布情况[^1]。 --- #### Pyro 或 Edward 库内置的绘图功能 如果使用的是 Uber 开源的 **Pyro** 或 Google 的 **Edward** 构建贝叶斯神经网络,则可以直接调用其内部提供的绘图函数。例如,在 Pyro 中,`trace` 对象可以帮助获取模型参数的后验分布并进行可视化。 ```python from pyro.infer import Predictive # 获取后验样本 predictive = Predictive(model=model, guide=guide, num_samples=1000) posterior_samples = predictive(...) # 可视化某个参数的分布 sns.histplot(posterior_samples['param_name'], kde=True) plt.title('Posterior Distribution of Parameter') plt.show() ``` 这种技术非常适合研究复杂的概率分布以及它们随训练的变化趋势[^4]。 --- #### Graphviz 绘制网络拓扑结构 Graphviz 是一种强大的图形描述语言,常被用来描绘有向无环图(DAG),这正是贝叶斯网络的核心形式。通过定义节点和边的关系,可以清晰地呈现整个网络架构。 ```python from graphviz import Digraph dot = Digraph(comment='The Bayesian Network') # 添加节点 dot.node('A', 'Input Node A') dot.node('B', 'Hidden Layer B') dot.node('C', 'Output C') # 定义连接关系 dot.edge('A', 'B') dot.edge('B', 'C') print(dot.source) dot.render('bayes_network.gv', view=True) ``` 此方式尤其有助于理解大型系统的整体逻辑流[^2]。 --- #### Scikit-optimize 超参优化路径追踪 当采用贝叶斯优化调整超参数时,记录每次迭代的最佳值变化轨迹也非常重要。Scikit-optimize 提供了方便快捷的方式来进行此类监控。 ```python from skopt.plots import plot_convergence # results 是来自 optimizer.optimize(...) 返回的对象 plot_convergence(results) plt.title('Convergence Plot for Hyperparameter Optimization') plt.show() ``` 它不仅限于简单的收敛曲线,还可以扩展至高维度空间探索地图等更复杂的表现形式[^5]。 --- ### 总结 以上介绍了四种主要针对不同需求下的贝叶斯神经网络绘图手段:一是常规数值型图表制作;二是依托特定框架自带的能力展现内在机制细节;三是借助专门软件刻抽象概念实体间关联模式;四是跟踪实验过程中动态演变历程以便后续改进策略制定。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值