昨日、TensorFlow+Kerasで作ったモデルをTensorFlow Servingで動作させるというネタを書いたのですが、今日はその作業中にちょっとハマったことに関するTipsです。
実行環境は下記のとおりです。
- Windows 10
- Anaconda 2020.02
- Python 3.6
- TensorFlow 1.15
- Keras 2.2.5
Kerasで作ったモデルを可視化する
昨日の記事で作ったモデルを可視化するには、下記のようなコードを実行します。
import tensorflow as tf
import keras
from IPython.display import SVG
from keras.utils.vis_utils import model_to_dot
model = keras.models.load_model('iris-20200719.h5')
SVG(model_to_dot(model, show_shapes=True).create(prog='dot', format='svg'))
基本、これで良いのですが、ちょっとハマったんですよね。
Graphvizが必要
上記のコードを実行する前に、必要なパッケージをインストールしました。
pip install pydot
pip install graphviz
ただ、これだけではGraphVizの実行ファイルが見つからないから、パスを通せというエラー(pydot failed to call GraphViz.Please install GraphViz (https://www.graphviz.org/) and ensure that its executables are in the $PATH.
)になります。これは、pip
でインストールしたgraphviz
が、Pythonラッパーでしかなく、GraphViz本体ではないからです。
ご丁寧にGraphVizのURLまで教えてくれるので、Windows用のGraphVizをインストールし、実行ファイルの存在するパス("C:\Program Files (x86)\Graphviz2.38\bin\"
)を通したのですがなぜか、ダメ。Jupyter Notebook自体の再起動とかもしたんですがね…。
で、結局解決したのは下記の方法。
conda install graphviz-python
graphviz-python
というのもPythonラッパーだと思うんですけど、これをインストールすると、先ほどインストールしたWindows用のGraphVizをアンインスールしても問題なくモデルが可視化できました。AnacondaのどこかにGraphVizの実行ファイルが入っているんだろうか?(特にパスを通すとかもしていない。)
可視化された画像が切れてしまう
いちおう、モデルを可視化した画像が表示されるようになったのですが、このように画像が切れてしまいました。
この問題は、下記のようにdpi=None
を追加すると解決しました。
SVG(model_to_dot(model, show_shapes=True, dpi=None).create(prog='dot', format='svg'))
ということで、こんな感じにモデルの可視化ができると各レイヤーのインプットとアウトプットの型などが分かって便利なので、積極的に使っていきましょう。