pytorch == 1.1.0
torchvision == 0.3.0
hiddenlayer == 0.2
提前说:做好版本之间的匹配能避免很多错误,少走很多弯路。
打开 Anaconda Prompt 进入自己的 pytorch 环境,运行代码安装 hiddenlayer0.2:
pip install hiddenlayer==0.2
运行 python 进入交互式环境,导入 hiddenlayer 包如果不报错则表示安装成功。
进入自己的 python 编辑器,解释器选择自己 pytorch 环境下的 python.exe,运行代码:
import torch
import hiddenlayer as h
from torchvision.models import resnet18 # 以 resnet18 为例
myNet = resnet18() # 实例化 resnet18
x = torch.randn(16, 3, 64, 64) # 随机生成一个输入
myNetGraph = h.build_graph(myNet, x) # 建立网络模型图
# myNetGraph.theme = h.graph.THEMES['blue'] # blue 和 basic 两种颜色,可以不要
myNetGraph.save(path='./demoModel.png', format='png') # 保存网络模型图,可以设置 png 和 pdf 等
运行代码后会在当前工程路径下生成一个文件,本例会生成一张名为 demoModel.png 的图片,打开图片可以看到网络的结构如图(为方便展示只截取一部分)。
可以看到在输出的图片中不仅有当前网络结构,还包括输入数据的流向和变化情况,简单实用。
错误 ①:AttributeError: module ‘torch.jit’ has no attribute ‘get_trace_graph’.
错误 ②:AttributeError: ‘torch._C.Value’ object has no attribute ‘uniqueName’.
解决办法: 以上两个错误都是版本不适配问题,改变 pytorch 和 hiddenlayer 版本,可以搭配的版本为 pytorch1.1.0 + hiddenlayer0.2。
警告 ③:Pango-WARNING **: couldn’t load font “Times Not-Rotated 10”, falling back to “Sans Not-Rotated 10”, expect ugly output.
解决办法: Times 字体没办法加载,考虑是系统没有这个字体,有兴趣的可以装个 Times 系统字体看看,我的解决办法是选中 THMES 属性,右击打开 graph.py 文件。
直接修改 graph.py 文件中 THEMES 里 basic 分支选项中的 font_name对应的 Times 为 Times-Roman 即可,当然改成其他可行的字体也是可以的,觉得没必要的也可以忽视这个警告。
其实仔细看原代码的话可以发现,原来只提供了 basic 和 blue 两种主题,我们完全可以根据自己需要再设计一种主题,比如在 blue 后再加上一个 red,如下:
"red": {
"background_color": "#FFFFFF", # 背景色
"fill_color": "#DC143C", # 填充色
"outline_color": "#0000FF", # 边框色
"font_color": "#000000", # 字体颜色
"font_name": "SimHei", # 字体
"font_size": "10", # 字体大小
"margin": "0,0",
"padding": "1.0,0.5",
},
输出的网络结果图是这样的(净整些没用的,哈哈):