26.1_可视化代码的使用示例
26.1 可视化代码的使用示例
我们将在dezero/util.py中实现一个名为getDOT_graph的函数来可视化计算图。首先看一下该函数的使用示例。
import numpy as np
fromdezero import Variable
fromdezero.utils import getDOT_graph
$\mathbf{x0} =$ Variable(np.array(1.0))
x1 $=$ Variable(np.array(1.0))
y $=$ x0+x1 #某种计算命名变量
$\mathbf{x0}$ .name $\equiv$ 'x0'
$\mathbf{x1}$ .name $=$ 'x1'
y.name $=$ 'y'
txt $\equiv$ get_dod_graph(y, verbose=False)
print(txt)保存为dot文件
with open('sample.dot', 'w') as o: o.write(txt)运行结果
digraph g{
4423761088 [label="y", color=orange, style=filled]
4423742632 [label="Add", color=lightblue, style=filled, shape $\equiv$ box]
4403357456 -> 4423742632
4403358016 -> 4423742632
4423742632 -> 4423761088
4403357456 [label $=$ "x0", color=orange, style $\equiv$ filled]
4403358016 [label $=$ "x1", color=orange, style $\equiv$ filled]
}上面的代码将作为最终输出的变量y传给了get_DOT_graph函数。函数随后把从输出变量y开始的计算过程以用DOT语言编写的字符串的形式返回(后面会解释verbose参数)。另外,上面的代码在调用get_DOT_graph函数之前,通过x0.name='x0'和x1.name='x1'等设置了Variable实例的name属性。这几行代码的目的是在可视化计算图时,在变量节点上绘制标签名。
有了上面输出的字符串后,就可以把它写到sample.dot之类的文件中。这样一来,我们就可以在终端通过dot sample.dot -T png -o sample.png命令将其转换为图像。得到的图像如图26-1所示。

图26-1 计算图可视化的示例(参见彩图)
以上就是计算图的可视化流程。综上所述,我们要做的是用DOT语言编写从输出变量开始的计算过程。其实我们已经知道该怎么做了,因为在反向传播中实现的逻辑基本可以直接使用。

反向传播从输出变量开始回溯所有节点(变量和函数)。活用这个机制,我们就可以将计算图的节点转换为DOT语言。