keras中plot_model报Failed to import pydot. You must `pip install pydot` and install graphviz问题解决

参考的解决方法是:https://blog.csdn.net/sinat_40282753/article/details/85046871,实际上参考方案只是提供了思路,按照参考方案并未解决。

步骤1:简单处理

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.')

 

步骤2: 安装其他包和更改原代码

第一、尝试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.')

 

步骤3: 跟踪源代码

将先前所有更改的代码都进行还原,进行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看下配置信息,如下:

keras中plot_model报Failed to import pydot. You must `pip install pydot` and install graphviz问题解决_第1张图片

再次运行程序,可以正常的生成深度学习的网络结构图

最终安装成功环境信息:

win7系统,python 3.6.6, pydot_ng版本2.0.0, python中graphviz包是0.15,graphviz的二进制版本2.44.1

2、总结

2.1 注意事项

  1. pydot优先绑定pydot_ng,然后pydotplus,最后pydot,这个兼容太魔性了,会搞的很混乱,最好直接用pydot_ng
  2. python中graphviz只是个封装,需要本地安装二进制包
  3. graphviz的二进制版本2.44.1需要手动配置下,要不验证过程中调用dot生成图片会失败

2.2 正确方法

  1. pip install  pydot_ng
  2. pip install graphviz
  3. windows下安装二进制graphviz包,并且加到系统路径中
  4. cmd命令下,执行dot -c进行配置,并且dot -v验证是否配置成功
  5. 大功告成

你可能感兴趣的:(大数据与自然语言处理,tensorflow,深度学习,Keras)