如何在Keras/TensorFlow中查看指定样式的深度神经网络完整图形结构?
在Keras/TensorFlow中生成类似样式的深度神经网络结构图
嘿,我懂你想要的是那种层级分明、能清晰展示每层神经元数量的神经网络结构图,就像你贴出来的那种对吧?别担心,在Keras(包括TensorFlow集成的Keras)里有几种实用的方法可以实现,我给你详细拆解一下:
方法一:用ann_visualizer生成近似样式的静态图
这个库专门用来可视化人工神经网络,生成的图和你想要的样式几乎一致,会直观展示每一层的类型、神经元数量以及层级连接关系。
- 第一步:安装依赖库
先通过pip安装:
另外还需要安装Graphviz系统软件(不是pip包),安装后记得把它的路径加入系统环境变量,这样Python才能调用它生成图片。pip install ann_visualizer - 第二步:代码实现
假设你已经构建好的模型叫model,直接用下面的代码就能生成:
运行后,你可以用Graphviz打开生成的from ann_visualizer.visualize import ann_viz # 生成可视化图,title是图的标题,filename是输出的文件(默认是.gv格式,也可以指定生成.png) ann_viz(model, title='我的深度神经网络结构', filename='network_structure.gv').gv文件,或者直接修改参数让它生成PNG格式的图片,就能得到类似你示例的结构图啦。
方法二:用pyvis做交互式可视化
如果你想要能拖拽、缩放的交互式结构图,pyvis会是个好选择,它能生成HTML格式的交互页面,方便你查看细节。
- 第一步:安装库
pip install pyvis - 第二步:示例代码
from pyvis.network import Network import tensorflow as tf # 初始化一个有向图网络 net = Network(directed=True, height='800px', width='100%', bgcolor='#222222', font_color='white') # 遍历模型的每一层,添加节点和连接 for idx, layer in enumerate(model.layers): # 节点标签包含层名称和神经元数量 node_label = f"{layer.name}\n神经元数量: {layer.output_shape[-1]}" net.add_node(f"layer_{idx}", label=node_label, size=20) # 连接当前层和上一层 if idx > 0: net.add_edge(f"layer_{idx-1}", f"layer_{idx}") # 保存为HTML文件,打开就能交互查看 net.write_html('interactive_network.html')
方法三:用Matplotlib自定义绘图(完全可控)
要是你不想依赖第三方库,也可以用Matplotlib手动绘制,完全按照你想要的样式调整:
- 核心思路:
- 先提取模型每一层的神经元数量:
layer_sizes = [layer.output_shape[-1] for layer in model.layers] - 用
plt.scatter绘制每一层的神经元节点,用直线连接相邻层的节点 - 添加层名称、坐标轴标注等元素,调整颜色、大小等样式
- 先提取模型每一层的神经元数量:
- 简单示例片段:
import matplotlib.pyplot as plt layer_sizes = [layer.output_shape[-1] for layer in model.layers] num_layers = len(layer_sizes) # 绘制节点 for i, size in enumerate(layer_sizes): x = [i]*size y = range(size) plt.scatter(x, y, s=100, color='blue') # 添加层名称标注 plt.text(i, size//2, f"Layer {i}\n({size} units)", ha='center', va='center') # 绘制连接线条 for i in range(num_layers-1): for y1 in range(layer_sizes[i]): for y2 in range(layer_sizes[i+1]): plt.plot([i, i+1], [y1, y2], color='gray', linewidth=0.5) plt.axis('off') plt.title('自定义神经网络结构图') plt.show()
这些方法里,ann_visualizer生成的图和你贴的示例样式最匹配,优先推荐试试这个哦!
内容的提问来源于stack exchange,提问作者Sa Na
相关产品推荐
相关产品推荐

