LoginSignup
8
7

More than 1 year has passed since last update.

Win環境でkeras.utils.plot_model使ってkerasモデルを表示する

Last updated at Posted at 2019-09-06

2022/1/21追記

久しぶりに環境を作ってみたところgraphvizをpipインストールするだけでgraphviz本体もインストールしてくれるようになっていました。また、pydot3が上手く入らなかったのでpydotをインストールしたところ上手く動いたので以下で2022/1/21現在は以下でインストールしてもらうのがよさげです。

terminal
pip install pydot, graphviz

tensorflow側の挙動は変わってなかったので以下で出る筈です。

python
import tensorflow as tf
if tf.__version__.split('.')[0]=='2':
    from tensorflow import keras
else:
    import keras

# モデルをつくります
inputs = keras.layers.Input(shape=(28, 28))
x = keras.layers.Flatten()(inputs)
x = keras.layers.Dense(128, activation='relu')(x)
x = keras.layers.Dropout(0.2)(x)
x = keras.layers.Dense(10, activation=None)(x)
predictions = keras.layers.Activation('softmax')(x)
model = keras.Model(inputs=inputs, outputs=predictions)
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

# モデルを可視化します
keras.utils.plot_model(model, show_shapes=True, expand_nested=True)

やりたいこと

kerasのモデルを下みたいに表示してくれるkeras.utils.plot_modelをWindows環境で使えるようにします。

試行環境

Windows10
python 3.6

graphvizのインストール

keras.utils.plot_modelはgraphvizを使用しますが、pipでは入らないのでgraphvizをインストールしておく必要があります。

こちらの手順がとても分かりやすいのでそのままやってみます
http://ruby.kyoto-wu.ac.jp/info-com/Softwares/Graphviz/

ダウンロードしてインストールする

まず、graphvizを公式ページからダウンロードします。

graphviz公式
http://www.graphviz.org/

Downloadページに各OSのページへのリンクがあります。Windowsの場合はStable 2.38 Windows install packagesになります。インストーラーが置いてありますのでダウンロードしてインストールします。

PATHを通す

環境変数のPATHにgraphvizのbinフォルダを追加します。今回はgraphviz 2.38を使うのでPATHは以下になります。

C:\Program Files (x86)\Graphviz2.38\bin

PATHが通ったか確認しておきます。コマンドプロンプトからdot.exeを呼んでみましょう。

コマンドプロンプト
c:\> dot -V
dot - graphviz version 2.38.0 (20140413.2041)

PATHが通っているのを確認できました。

python側のpackageをインストールする

pydotではなくpydot3をインストールします。tensorflow2.0.0はpydot3を呼ぶようでpydotでは動きません。pydot, pydot3, pydot-ng, pydotplusなどいろいろあってよく分からないんですが、python3だとpydot3という事なのかな?誰か教えてほしいです。

コマンドプロンプト
pip install pydot3
pip install graphviz

モデルを出力してみる

python
import tensorflow as tf
if tf.__version__.split('.')[0]=='2':
    from tensorflow import keras
else:
    import keras

# モデルをつくります
inputs = keras.layers.Input(shape=(28, 28))
x = keras.layers.Flatten()(inputs)
x = keras.layers.Dense(128, activation='relu')(x)
x = keras.layers.Dropout(0.2)(x)
x = keras.layers.Dense(10, activation=None)(x)
predictions = keras.layers.Activation('softmax')(x)
model = keras.Model(inputs=inputs, outputs=predictions)
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

# モデルを可視化します
keras.utils.plot_model(model, show_shapes=True, expand_nested=True)


出来ました!

エラーと原因

ざっくり2つエラーが出る原因があると思います。

以下が出る場合はpython packageのpydotまたはgraphvizが入ってないという意味です。tensorflow2.0はpydot3を呼びますので、pydotではなくpydot3をインストールしてください。

Failed to import pydot. You must install pydot and graphviz for `pydotprint` to work.

以下が出る場合はgraphviz本体がインストールされていないかPATHが通っていません。コマンドプロンプトからdot.exe -Vが呼べる場合はこのエラーは出ない筈です。

InvocationException: GraphViz's executables not found

注意点

jupyter notebookでやってる場合、kerasがimportされた時点でpydotとgraphvizもimportされますが、なくてもそのまま進行します。逆に言うとkerasがimportされた時点でpydotとgraphvizがなかったら、その後でインストールしても以下のメッセージは変わりません。

Failed to import pydot. You must install pydot and graphviz for `pydotprint` to work.

kernelをrestartしてimport kerasをやり直さないと反映されませんので注意してください。

8
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
7