参考的解决方法是:https://blog.csdn.net/sinat_40282753/article/details/85046871,实际上参考方案只是提供了思路,按照参考方案并未解决。
1.pip3 install pydot
2.pip3 install graphviz
3.Windows 安装 graphviz-install-2.44.1-win64.exe
4.将安装bin路径添加进环境的Path,如知乎专栏所述。
5.步骤4功能同在代码中添加:
import os
os.environ["PATH"] += os.pathsep + '自己安路径/bin/'
结果:
运行还会出现: Failed to import pydot. You must `pip install pydot` and install graphviz (https://graphviz.gitlab.io/download/), ', 'for `pydotprint` to work.')
第一、尝试pip3 install pydot_ng (不是必须的)
import pydot_ng as pydot
print (pydot.find_graphviz())
可以解决部分问题。如还是报错,用下面方案。
第二、按chutongz大神博客更改pydot.py的代码
结果:
运行还会出现: Failed to import pydot. You must `pip install pydot` and install graphviz (https://graphviz.gitlab.io/download/), ', 'for `pydotprint` to work.')
将先前所有更改的代码都进行还原,进行debug看程序在那个地方出现问题,发现:
keras.utils.plot_model初始化的时候
1、keras.utils.vis_utils中初始化话顺序是这样的
try:
# pydot-ng is a fork of pydot that is better maintained.
import pydot_ng as pydot
except ImportError:
# pydotplus is an improved version of pydot
try:
import pydotplus as pydot
except ImportError:
# Fall back on pydot if necessary.
try:
import pydot
except ImportError:
pydot = None
也就是pydot优先绑定pydot_ng,然后pydotplus,最后pydot,因为当前安装了pydot_ng,当前就是pydot_ng
2、pydot.Dot.create(pydot.Dot())调用方法为
当前绑定的pydot_ng,对应的_init_方法中,有如下代码:
p = subprocess.Popen(
cmdline,
cwd=tmp_dir,
stderr=subprocess.PIPE, stdout=subprocess.PIPE)
stderr = p.stderr
stdout = p.stdout
stdout_output = list()
while True:
data = stdout.read()
if not data:
break
stdout_output.append(data)
stdout.close()
debug发现,已经拿到dot.exe的正确位置,最终是因为stdout_output没有数据导致异常,外面的异常统一抛出为:Failed to import pydot. You must `pip install pydot` and install graphviz (https://graphviz.gitlab.io/download/), ', 'for `pydotprint` to work.') 这个异常没说清楚太恶心了,怀疑是dot需要什么配置
3、命令行下
dot -v 啥也没有, -v 的命令解释是:
-v - Enable verbose mode
查找官方,用dot -c配置一下,然后dot -v看下配置信息,如下:
再次运行程序,可以正常的生成深度学习的网络结构图
最终安装成功环境信息:
win7系统,python 3.6.6, pydot_ng版本2.0.0, python中graphviz包是0.15,graphviz的二进制版本2.44.1