神经网络可视化函数详解

  1. 1. 神经网络可视化函数详解
    1. 1.1. plot_model()参数详解与使用
    2. 1.2. model_to_dot()
    3. 1.3. pydot的安装与配置
      1. 1.3.1. 安装GraphViz软件
      2. 1.3.2. 安装pydot包

神经网络可视化函数详解

网上查不到有关的参数以及详解,官方中文文档又摆烂,那么只好自己动手,记录一下。

plot_model()参数详解与使用

1
2
3
4
5
6
7
8
9
10
11
from keras.utils.vis_utils import plot_model
plot_model(MODEL,
to_file:str = 'modle.png',
show_shapes:bool = True,
show_dtype:bool = True,
show_layer_names:bool = True,
dpi=int: 96,
layer_range=None,
rankdir:str = 'TB',
show_layer_activations:bool = True,
expand_nested:bool = False,)
  • model:传入的模型文件,可以使用keras.models.load_model()函数加载模型文件。

  • to_file:将神经网络模型保存为图片,传入保存图片的名称。

  • show_shapes:是否显示网络形状信息,这个建议为True。

  • show_dtype:是否显示网络层数据类型。

  • show_layer_names :是否显示网络层名称。

  • dpi:图像精度。

  • layer_rangelist 的输入包含两个 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
2
3
4
5
6
7
8
9
10
11
12
tf.keras.utils.model_to_dot(
model,
show_shapes=False,
show_dtype=False,
show_layer_names=True,
rankdir="TB",
expand_nested=False,
dpi=96,
subgraph=False,
layer_range=None,
show_layer_activations=False,
)

将 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
2
pip install pydot
pip install pydotplus

@Nakkar