前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >解决 Windows OSError - pydot failed to call GraphViz.Please install GraphViz 报错

解决 Windows OSError - pydot failed to call GraphViz.Please install GraphViz 报错

作者头像
为为为什么
发布2022-08-05 10:24:27
发布2022-08-05 10:24:27
72100
代码可运行
举报
文章被收录于专栏:又见苍岚又见苍岚
运行总次数:0
代码可运行

Windows操作系统下,运行pydot相关程序时(我的是keras.utils.plot_model)报错,提示没有安装GraphViz,事实上并不都是因为GraphViz没有安装,本文记录错误解决方法。

问题复现

操作系统:Win10 keras版本:2.2.4 在Win10系统下(Windows系列都可能出这个问题)keras建立简单的模型,执行 plot_model,报错:

代码语言:javascript
代码运行次数:0
复制
import keras 
from keras.models import Model
from keras.layers import Input
from keras.layers import Conv2D
from keras.layers import GlobalAveragePooling2D
from keras.layers import Dense

import numpy as np

from keras.utils import plot_model

import os
os.environ["PATH"] += os.pathsep + r'E:\Program Files (x86)\Graphviz2.38\bin'


A = Input(shape=(16,16,3))
x = Conv2D(filters=10, kernel_size=(3,3), padding='same', activation='relu')(A)
x = Conv2D(filters=10, kernel_size=(3,3), padding='same', activation='relu')(x)
x = GlobalAveragePooling2D()(x)
x = Dense(units = 5, activation='softmax')(x)

model = Model(A,x)

model.summary()

test_input = np.random.rand(1,16,16,3)

results = model.predict(test_input)

plot_model(model)

错误信息:

代码语言:javascript
代码运行次数:0
复制
builtins.OSError: `pydot` failed to call GraphViz.Please install GraphViz (https://www.graphviz.org/) and ensure that its executables are in the $PATH.

问题原因与解决方案

情况 1

  • 原因 :真的没有安装GraphViz
  • 解决方案:
    • 安装相应模块
代码语言:javascript
代码运行次数:0
复制
pip install pydot-ng 
pip install graphviz 
pip install pydot 

如果问题没有排除,可能是GraphViz程序没有加入到系统路径,考虑情况2

情况 2

  • 原因:GraphViz程序没有加入到系统路径
  • 解决方案:

目前为止是网上大多数存在的解决方案,相信大部分的同学到此为止已经解决了问题。 如果错误继续,那么我和你一样,进入情况3。

情况 3

  • 原因:依赖模块已经安装、程序已经加入系统变量,仍然出现上述提示,是因为pydot在建立Dot类时查找的dot程序的名字是 ’dot‘ 而不是我们 Windows 里的可执行程序文件名 ‘dot.exe’
  • 解决方案:改过来就好了,具体方法如下
    • 在报错的位置找到pydot
    • 找到Dot类
    • 类的开头代码是这样的:
代码语言:javascript
代码运行次数:0
复制
class Dot(Graph):
    """A container for handling a dot language file.

    This class implements methods to write and process
    a dot language file. It is a derived class of
    the base class 'Graph'.
    """

  • 找到其中的 self.prog = 'dot'
  • 讲这句话替换为:
代码语言:javascript
代码运行次数:0
复制
import platform
system = platform.system()
            
if system == 'Windows':
    self.prog = 'dot.exe'
else:
    self.prog = 'dot'

  • 保存再次运行程序即可
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020年5月20日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题复现
  • 问题原因与解决方案
    • 情况 1
    • 情况 2
    • 情况 3
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档