尝试使用 keras.utils.plot_model 时出错

Sab*_*ina 5 python keras tensorflow

我正在尝试使用 Keras 包在 Python 中制作深度学习模型的绘图/图形,但不幸的是它不断给我一个错误,这不是很有用。

我在 Linux 上使用 Python 3.5.2、Anaconda 4.2.0、Keras 2.1.6 运行 python,我使用 tensorflow-gpu 1.7.0 后端。

这是错误消息:

keras.utils.plot_model(unet, to_file='model.png', show_shapes=False, show_layer_names=True, rankdir='TB')

['dot', '-Tps', '/tmp/tmphesl1j0c'] return code: 127

stdout, stderr:
 b''
b'dot: error while loading shared libraries: libexpat.so.0: cannot open shared object file: No such file or directory\n'

---------------------------------------------------------------------------
AssertionError                            Traceback (most recent call last)
<ipython-input-9-60bb0e3b97bd> in <module>()
----> 1 keras.utils.plot_model(unet, to_file='model.png', show_shapes=False, show_layer_names=True, rankdir='TB')

/.../anaconda3-4.2.0/lib/python3.5/site-packages/keras/utils/vis_utils.py in plot_model(model, to_file, show_shapes, show_layer_names, rankdir)
    132             'LR' creates a horizontal plot.
    133     """
--> 134     dot = model_to_dot(model, show_shapes, show_layer_names, rankdir)
    135     _, extension = os.path.splitext(to_file)
    136     if not extension:

/.../anaconda3-4.2.0/lib/python3.5/site-packages/keras/utils/vis_utils.py in model_to_dot(model, show_shapes, show_layer_names, rankdir)
     53     from ..models import Sequential
     54 
---> 55     _check_pydot()
     56     dot = pydot.Dot()
     57     dot.set('rankdir', rankdir)

/.../anaconda3-4.2.0/lib/python3.5/site-packages/keras/utils/vis_utils.py in _check_pydot()
     24         # Attempt to create an image of a blank graph
     25         # to check the pydot/graphviz installation.
---> 26         pydot.Dot.create(pydot.Dot())
     27     except OSError:
     28         raise OSError(

/.../anaconda3-4.2.0/lib/python3.5/site-packages/pydot.py in create(self, prog, format, encoding)
   1882                      out=stdout_data,
   1883                      err=stderr_data))
-> 1884         assert p.returncode == 0, p.returncode
   1885         return stdout_data

AssertionError: 127
Run Code Online (Sandbox Code Playgroud)

如果有人可以帮助我解决此错误,我将不胜感激。

注意:pydot和graphviz都安装了

小智 8

对我来说,解决方案是像这样导入:

from keras.utils.vis_utils import plot_model
Run Code Online (Sandbox Code Playgroud)


smo*_*are 6

对我来说,解决方案是:

  • conda install pydotplus(据说pydot-ng无法与tensorflow-gpu一起安装)。
  • 在anaconda目录中搜索viz_utils.py并全部打开。确保在所有地方导入 pydot,它是通过以下方式完成的:
尝试:
  # pydot-ng 是 pydot 的一个分支,维护得更好。
  将 pydot_ng 导入为 pydot
除了导入错误:
  # pydotplus是pydot的改进版本
  尝试:
    将 pydotplus 导入为 pydot
  除了导入错误:
    # 如果有必要,可以使用 pydot。
    尝试:
      导入pydot
    除了导入错误:
      pydot = 无

其中一份文件上面写着import pyplot。改变之后,它对我有用。


小智 5

我将 keras.utils 更改为 tensorflow.keras.utils,它帮助了我


f4.*_*f4. -1

评论说

 24         # Attempt to create an image of a blank graph
 25         # to check the pydot/graphviz installation.
Run Code Online (Sandbox Code Playgroud)

所以我想你需要安装 graphviz 和 pydot

假设您使用的是 ubuntu 或类似系统:

sudo apt install graphviz
Run Code Online (Sandbox Code Playgroud)

在你的 anaconda 环境中:

pip install pydot
Run Code Online (Sandbox Code Playgroud)