神经网络可视化函数详解
网上查不到有关的参数以及详解,官方中文文档又摆烂,那么只好自己动手,记录一下。
plot_model()参数详解与使用
1 | from keras.utils.vis_utils import plot_model |
-
model:传入的模型文件,可以使用
keras.models.load_model()
函数加载模型文件。 -
to_file:将神经网络模型保存为图片,传入保存图片的名称。
-
show_shapes:是否显示网络形状信息,这个建议为True。
-
show_dtype:是否显示网络层数据类型。
-
show_layer_names :是否显示网络层名称。
-
dpi:图像精度。
-
layer_range:
list
的输入包含两个str
项,它们是起始层名称和结束层名称(包括两者),指示将为其生成绘图的层范围。 它还接受正则表达式模式而不是确切的名称。 在这种情况下,开始谓词将是它匹配到layer_range[0]
的第一个元素,结束谓词将是它匹配到layer_range[1]
的最后一个元素。 默认情况下,考虑所有模型层的“无”。 请注意,您必须传递范围,以便生成的子图必须是完整的。 -
rankdir:传递给 PyDot,一个指定绘图格式的字符串:'TB' 创建一个垂直绘图; 'LR' 创建一个水平图。
-
show_layer_activations:显示层激活(仅适用于具有
activation
属性的层)。 -
expand_nested:是否将嵌套模型扩展为集群。
对于to_file
参数可以导出为PDF,同时使用dpi
控制打印精度,该参数对于图片无效。
注意:在中文文档中存在expand_dim
一项,但我并没有找到这一项,我查阅了英文文档与日文文档,并没有发现这一参数,日文中有expand_nested
这一项,合理怀疑中文文档译者编辑时expand_nested
出了问题,特此标注
对于layer_range的举例:
1 | layer_range=["add_4","add_33"] |
绘制从add_4层开始到add_33层结束。如果存在捷径,那么绘制会包含完整的捷径层。
model_to_dot()
1 | tf.keras.utils.model_to_dot( |
将 Keras 模型转换为点格式。为使用IPython绘制SVG时使用。
例
1 | SVG(model_to_dot(model,show_shapes=True).create(prog='dot',format='svg')) |
- model:传入的 Keras 模型实例。
- show_shapes : 是否显示网络形状信息,这个建议为True。
- show_dtype : 是否显示网络层数据类型。
- show_layer_names:是否显示网络层名称。
- rankdir :传递给 PyDot,一个指定绘图格式的字符串:'TB' 创建一个垂直绘图; 'LR' 创建一个水平图。
- expand_nested : 是否将嵌套模型扩展为集群。
- dpi:图像精度。
- subgraph : 是否返回一个
pydot.Cluster
实例。 - layer_range :
list
的输入包含两个str
项,它们是起始层名称和结束层名称(包括两者),指示将为其生成绘图的层范围。 它还接受正则表达式模式而不是确切的名称。 在这种情况下,开始谓词将是它匹配到layer_range[0]
的第一个元素,结束谓词将是它匹配到layer_range[1]
的最后一个元素。 默认情况下,考虑所有模型层的“无”。 请注意,您必须传递范围,以便生成的子图必须是完整的。 - show_layer_activations:显示层激活(仅适用于具有
activation
属性的层)。
pydot的安装与配置
安装GraphViz软件
在官网下载安装。https://www.graphviz.org/,安装之后记得添加环境变量。
1 | 安装位置\Graphviz\bin |
安装pydot包
pydot也可以使用pydotplus替代
1 | pip install pydot |