わかめの備忘録

Kerasのplot_modelでコケたときに見る記事

TL;DR

  • pydot の開発が再開?され
  • 最新版のpydotはPython3.5と3.6に対応したので
  • pydot 1.2.4を入れよう

github.com

記事の元ネタ

teratail.com

なぜこの記事を書いたのか

例えば「Keras plot_model error」などのキーワードでググると出てくるこの記事。

qiita.com

pydotは現在開発が止まっており、python3.5および3.6では動きません。 これらのバージョンのpythonを用いている環境では、 pydotplusまたはpydot-ngを代わりに使用することで対処できます。 私はpydotplusを使いました。

引用文より、繰り返しになりますがpydotは現在開発が止まっており、python3.5および3.6では動きません。という問題に対し
解決策としてpydotではなくpydotplusまたはpydot-ngを利用するとあります。
しかし最新版のKeras、具体的には2.1.6以降でこの解決策を適用しようとすると余計にハマります。
なぜかというと、Keras 2.1.6以降ではpydotのみImportしようとするからです。

# `pydot` is an optional dependency,
# see `extras_require` in `setup.py`.
try:
    import pydot
except ImportError:
    pydot = None

keras/vis_utils.py at 2.2.0 · keras-team/keras · GitHub

それに対し前のバージョン、具体的には2.0.5から2.1.5の間ではpydotとpydotplust、pydot-ngそれぞれImportしようとします。

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

keras/vis_utils.py at 2.1.5 · keras-team/keras · GitHub

したがって、pydotの代わりにpydotplus、pydot-ngを利用しようとすると余計にハマるわけです。