2022/1/21追記
久しぶりに環境を作ってみたところgraphvizをpipインストールするだけでgraphviz本体もインストールしてくれるようになっていました。また、pydot3が上手く入らなかったのでpydotをインストールしたところ上手く動いたので以下で2022/1/21現在は以下でインストールしてもらうのがよさげです。
pip install pydot, graphviz
tensorflow側の挙動は変わってなかったので以下で出る筈です。
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
モデルを出力してみる
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をやり直さないと反映されませんので注意してください。