質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.45%
Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

5253閲覧

plot_modelのインポートエラー (TensorFlow 2.x使用)

hkg

総合スコア0

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2021/09/02 08:34

前提・実現したいこと

plot_modelを使ってkerasのモデルを可視化したい。
※GPUの要件から、Python 3.8 および TensorFlow-GPU 2.4.0の使用を前提とします

ソースコード・エラー内容

tf.keras の plot_modelを呼び出すと、下記のようにImportErrorが発生します。
pydotの代わりにpydotplus/pydot_ng/pydot3のインストールを試してみましたが、エラー内容は変わらず。
解決策についてご教示いただけますと幸いです。

Python

1# from tensorflow.keras.utils import plot_model # 確認用(結果は変わらず) 2from tensorflow.python.keras.utils.vis_utils import plot_model # 3 4plot_model( 5 model, 6 show_shapes=True, 7)

error

1Traceback (most recent call last): 2 File "plot_model.py", line 21, in <module> 3 plot_model( 4 File "C:\Anaconda3\envs\gpu38b\lib\site-packages\tensorflow\python\keras\utils\vis_utils.py", line 324, in plot_model 5 dot = model_to_dot( 6 File "C:\Anaconda3\envs\gpu38b\lib\site-packages\tensorflow\python\keras\utils\vis_utils.py", line 116, in model_to_dot 7 raise ImportError(message) 8ImportError: ('Failed to import pydot. You must `pip install pydot` and install graphviz (https://graphviz.gitlab.io/download/), ', 'for `pydotprint` to work.')

試したこと

初めに、import文のフォーマットに誤りがないかを確認しました。(参考①)

次に、pydot, pydotplus, pydot_ng, pydot3のインストール/アンインストールを下記A~Cのパターンで試しましたが、いずれのパターンでも同じImportErrorが出力されました。

A. pydot, pydotplus, graphvizの順でpip install(参考②)
B. pydotの代わりに(pydotをアンインストールして)pydotplus/pydot_ngを単体で使用(参考③)
C. pydotの代わりに(pydotをアンインストールして)pydot3を使用(参考④)

環境

Windows10
Anaconda3
Python 3.8.11
TensorFlow-GPU 2.4.0
Graphviz 2.49.0 インストール/PATH設定済み

PipList

1Package Version 2----------------------- ------------------- 3absl-py 0.13.0 4astunparse 1.6.3 5cachetools 4.2.2 6certifi 2021.5.30 7charset-normalizer 2.0.4 8clang 5.0 9cloudpickle 1.6.0 10cycler 0.10.0 11flatbuffers 1.12 12gast 0.3.3 13google-auth 1.35.0 14google-auth-oauthlib 0.4.6 15google-pasta 0.2.0 16graphviz 0.17 17grpcio 1.32.0 18gym 0.19.0 19gym-ple 0.3 20h5py 2.10.0 21idna 3.2 22keras 2.6.0 23Keras-Preprocessing 1.1.2 24keras-rl2 1.0.5 25kiwisolver 1.3.2 26Markdown 3.3.4 27matplotlib 3.4.3 28numpy 1.19.5 29oauthlib 3.1.1 30opt-einsum 3.3.0 31Pillow 8.3.1 32pip 21.0.1 33protobuf 3.17.3 34pyasn1 0.4.8 35pyasn1-modules 0.2.8 36pydot 1.4.2 37pydotplus 2.0.2 38pyglet 1.5.19 39pyparsing 2.4.7 40python-dateutil 2.8.2 41requests 2.26.0 42requests-oauthlib 1.3.0 43rsa 4.7.2 44setuptools 52.0.0.post20210125 45six 1.15.0 46tensorboard 2.6.0 47tensorboard-data-server 0.6.1 48tensorboard-plugin-wit 1.8.0 49tensorflow-estimator 2.4.0 50tensorflow-gpu 2.4.0 51termcolor 1.1.0 52typing-extensions 3.7.4.3 53urllib3 1.26.6 54Werkzeug 2.0.1 55wheel 0.37.0 56wincertstore 0.2 57wrapt 1.12.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jbpb0

2021/09/02 09:30

Pythonで、下記は実行できますか? import pydot_ng import pydotplus import pydot import graphviz 試すのは、現在入ってる(はずの)ものだけでいいです
hkg

2021/09/03 00:15

確認が遅くなり失礼しました。 下記、今入っている3つを確認しましたが問題なくimportできているようです。 >>> import pydot >>> >>> import pydotplus >>> >>> import graphviz >>>
jbpb0

2021/09/03 01:25

> TensorFlow-GPU 2.4.0 https://github.com/tensorflow/tensorflow/blob/v2.4.0/tensorflow/python/keras/utils/vis_utils.py を参照しながら、エラーを追いかけてみます 324行めの「dot = model_to_dot(...」を実行しようとしてるところでエラーが出てます 「model_to_dot()」の定義は70行目にあり、105行目の「if not check_pydot():」に引っかかって、107行目からのメッセージが表示されてます 「check_pydot()」の定義は44行目にあり、46行目の「if pydot is None:」に引っかかると「False」が返り、上記の「model_to_dot()」での現象になります 「pydot is None」になるのは、29行目からの処理で import pydot_ng as pydot import pydotplus as pydot import pydot が全部失敗した場合です > 今入っている3つを確認しましたが問題なくimportできているようです。 >>> import pydot >>> >>> import pydotplus >>> >>> import graphviz >>> ならば、「import pydotplus as pydot」が成功して、「pydot is None」にはならないはずなのです
jbpb0

2021/09/03 01:36 編集

C:\Anaconda3\envs\gpu38b\lib\site-packages\tensorflow\python\keras\utils\vis_utils.py を、今作業している(自分で書いたPythonコードのファイルがある)場所にコピーして、それの42行目に print(pydot) を追加(行頭インデントは無し)して、 from vis_utils import plot_model を実行したら、どうなりますでしょうか? <module 'pydotplus' from... みたいに表示されたなら、「import pydotplus as pydot」が正常に実行されてます (質問に記載のエラーは表示されるかもしれませんが、それ以外に上記が表示されるか?)
hkg

2021/09/03 01:40

ご確認ありがとうございます。 コメントいただいた通り、importが成功しているのに「if pydot is None:」の条件分岐に引っかかってしまっているようです…。 追加コメントいただいた点を試してみました。 >>> from vis_utils import plot_model 2021-09-03 10:33:31.516521: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library cudart64_110.dll <module 'pydotplus' from 'C:\\Anaconda3\\envs\\gpu38b\\lib\\site-packages\\pydotplus\\__init__.py'> >>>
jbpb0

2021/09/03 02:05 編集

> <module 'pydotplus' from... と表示されてるので、「import pydotplus as pydot」は大丈夫ですね それでしたら、Pythonで下記のみ実行してみてください import pydotplus as pydot pydot.Dot.create(pydot.Dot()) 上記を実行したら、正常な場合は、 「b"%!PS-Adobe-3.0\n%%Creator: graphviz version...」 みたいなので始まり、 「\n%%EOF\n"」 みたいなので終わるような、非常に長い文字列が表示されます 当方のMacのターミナルで実行した場合は、ターミナルの横幅サイズは標準のままで、54行とちょっとになりました Windowsのコマンドプロンプトだと、表示行数は変わるかもしれませんが、それでもかなり長めに表示されると思います もし、それがうまくいかないと、 https://github.com/tensorflow/tensorflow/blob/v2.4.0/tensorflow/python/keras/utils/vis_utils.py の51行目の実行に失敗して、「check_pydot()」から「False」が返ると思います 【追記】 Windowsのコマンドプロンプト(フォントや表示幅は標準)で import pydotplus as pydot pydot.Dot.create(pydot.Dot()) を実行したところ、39.5行になりました graphvizとかのバージョンによって表示される文字列の長さが変わるかもしれないので、表示行数は変わるかもしれません 長々と文字が表示されるかと、文字列の最初や最後がだいたい合ってるかを確認してみてください
hkg

2021/09/03 02:02

早々にご確認いただきありがとうございます。 pydot.Dot.create という工程が上手くいっていない模様です。Graphvizあたりに原因がありそうでしょうか…? >>> import pydotplus as pydot >>> >>> pydot.Dot.create(pydot.Dot()) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "C:\Anaconda3\envs\gpu38b\lib\site-packages\pydotplus\graphviz.py", line 1959, in create raise InvocationException( pydotplus.graphviz.InvocationException: GraphViz's executables not found >>>
jbpb0

2021/09/03 02:12 編集

> GraphViz's executables not found なので、 > Graphviz 2.49.0 インストール/PATH設定済み がうまくいってないような pythonでgraphvizを使う例をググって探して、それが実行できるか確認してみてください もしうまく実行できないなら、それが実行できるように環境を整えてください
hkg

2021/09/03 02:14

graphvizのインストレーションについて再度確認し、PC再起動を実施したところ事象が解消されました。 丁寧にご助言いただき誠にありがとうございました。
guest

回答2

0

自己解決

jbpb0 様のご助言にしたがい切り分けを実施したところ、pydot側がGraphvizを認識できていないことが分かり、PC再起動により事象が解決できました。

投稿2021/09/03 02:28

hkg

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

plain

1ImportError: ('Failed to import pydot. You must `pip install pydot` and install graphviz (https://graphviz.gitlab.io/download/), ', 'for `pydotprint` to work.')

をGoogle翻訳すると以下です。

GoogleTranslation

1ImportError :( 'pydotのインポートに失敗しました。`pydotprint`を機能させるには、 `pip install pydot`とgraphviz(https://graphviz.gitlab.io/download/)、'、 'をインストールする必要があります。')

pip install pydot を実行しなさい。
https://graphviz.gitlab.io/download/ からgraphviz をインストールしなさい。

とのことですので、それを行いましょう。

投稿2021/09/02 09:18

ppaul

総合スコア24666

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hkg

2021/09/03 00:16

コメントありがとうございます。 「試したこと」欄に記載してある通り、pydot, graphvizをインストールした上でのご質問となります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.45%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問