26.3_从DOT语言转换为图像
26.3 从DOT语言转换为图像
get_dod_graph函数将计算图转换为DOT语言。之后要将DOT语言转换成图像,需要(手动)执行dot命令。但是,每次都执行dot命令实在太麻烦了,
所以,我们要实现一个能执行dot命令的函数。代码如下所示。
dezero/util.py
import os
import subprocess
def plot_dod_graph(output, verbose=True, to_file='graph.png'): dot_graph = get_dod_graph(output, verbose) # ①将dot数据保存至文件 tmp_dir = os.path.join(os.path-expanduser('~'), '.dezero') if not os.path.exists(tmp_dir): # 如果~/.dezero目录不存在,就创建该目录 os.mkdir(tmp_dir) graph_path = os.path.join(tmp_dir, 'tmp_graph.dot') with open(graph_path,'w') as f: f.write琮_graph) # ②调用dot命令 extension $=$ os.path.splitext(to_file)[1][1:] # 扩展名(png、pdf等) cmd $=$ 'dot{}-T{}-o{}'.format/graph_path,extension,to_file) subprocess.run(cmd, shell $\equiv$ True)首先,①处调用前面实现的get_DOT_graph函数来将计算图转换成DOT语言(文本)。然后,将文本保存至文件。保存的目标目录为~/.dezero,文件名为tmp_graph.dot(该文件只是临时使用,所以文件名包含tmp)。代码中的os.path.expanduser('')的作用是展开主目录的路径“”。
② 处指定保存的文件名,并调用dot命令。这里将plot_dod_graph函数的to_file参数用作目标文件名。为了调用外部程序,这部分代码使用了subprocess.run函数。

除了上面展示的代码,实际的plot_dod_graph函数中还添加了另外几行代码,这些代码用于应对使用Jupyter Notebook开发的情况。具体来说,这些代码的作用是当程序在Jupyter Notebook中运行时,能直接在Jupyter Notebook的单元格中显示图像。
这样就实现了计算图可视化函数。这里实现的函数会添加到dezero/
utils.py中,以便将来在不同的地方使用。这么操作之后,我们通过fromdezero.utils import plot_DOT_graph即可导入该函数使用。