在keras和pydot中使用plot_model的问题

时间:2018-02-17 14:22:31

标签: python keras graphviz pydot

我已经阅读了类似的问题 - 我的错误似乎有所不同,因为提出的解决方案无法解决我的问题。

我无法绘制keras模型的图表。

我已经使用自制软件安装了graphviz二进制文件

我已经使用pip安装了graphviz python包装器和pydot(也尝试使用conda,因为这似乎是过去的一个问题)。

使用python 3.5

运行:

from keras.utils import plot_model plot_model(cnn_model, to_file='cnn_model.png')

我收到错误:

  

ImportError:无法导入pydot。你必须安装pydot和   iconviz pydotprint可以使用。

跟踪:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
/Users/jusjosgra/anaconda/lib/python3.5/site-packages/keras/utils/vis_utils.py in _check_pydot()
     26         # so no specific class can be caught.
---> 27         raise ImportError('Failed to import pydot. You must install pydot'
     28                           ' and graphviz for `pydotprint` to work.')

AttributeError: 'NoneType' object has no attribute 'Dot'

During handling of the above exception, another exception occurred:

ImportError                               Traceback (most recent call last)
<ipython-input-450-82ff54d9260b> in <module>()
      1 from keras.utils import plot_model
----> 2 plot_model(cnn_model, to_file='cnn_model.png')

/Users/jusjosgra/anaconda/lib/python3.5/site-packages/keras/utils/vis_utils.py in plot_model(model, to_file, show_shapes, show_layer_names, rankdir)
    133     if not extension:
    134         extension = 'png'
--> 135     else:
    136         extension = extension[1:]
    137     dot.write(to_file, format=extension)

/Users/jusjosgra/anaconda/lib/python3.5/site-packages/keras/utils/vis_utils.py in model_to_dot(model, show_shapes, show_layer_names, rankdir)
     54     dot.set('rankdir', rankdir)
     55     dot.set('concentrate', True)
---> 56     dot.set_node_defaults(shape='record')
     57 
     58     if isinstance(model, Sequential):

/Users/jusjosgra/anaconda/lib/python3.5/site-packages/keras/utils/vis_utils.py in _check_pydot()
     29 
     30 
---> 31 def model_to_dot(model,
     32                  show_shapes=False,
     33                  show_layer_names=True,

我可以独立成功导入pydot和graphviz。

keras和graphviz之间似乎存在错误的历史。关于解决方案的任何想法?

3 个答案:

答案 0 :(得分:3)

我使用了“ conda install graphviz”,它解决了问题。

答案 1 :(得分:2)

错误消息不明确:当成功导入pydot(或模块vis_utils中提到的任何分支)时,也可能引发异常,但调用pydot.Dot.create失败。来自https://github.com/keras-team/keras/blob/4eab0556d29f11ff41758d80c15d6457263f6a93/keras/utils/vis_utils.py

def _check_pydot():
    try:
        # Attempt to create an image of a blank graph
        # to check the pydot/graphviz installation.
        pydot.Dot.create(pydot.Dot())
    except Exception:
        # pydot raises a generic Exception here,
        # so no specific class can be caught.
        raise ImportError('Failed to import pydot. You must install pydot'
                          ' and graphviz for `pydotprint` to work.')

并且方法pydot.Dot.create尝试调用可执行文件dot(由GraphViz安装):

https://github.com/erocarrera/pydot/blob/d6ac9e9244d1a882103422ac2b35ceef96f5dfe3/pydot.py#L1856

如果dot不在环境的PATH变量中,则pydotsite-packages不可见,尽管机器上已存在。

在Python解释器中导入包意味着它们在python setup.py develop下可用,或者在开发模式下安装的位置(例如,使用pip install -e .graphviz)。 GraphViz的可执行文件是否在路径上是一个单独的问题。

此外,Python包pydotpydot无关,并且不需要通过Sheet1!A1 is "2015" and Sheet1!A2 is "01" Sheet1!B1 is "2016" and Sheet1!B2 is "01" Sheet1!C1 is "2017" and Sheet1!C2 is "01" 使用GraphViz。有关此问题的更多信息,请参阅:

https://stackoverflow.com/a/47209738/1959808

答案 2 :(得分:1)

我用

解决了

sudo apt-get install graphviz