#背景
- Kerasでモデルを作った際(modelという変数としよう)、公式ドキュメントでは、推論するときにmodel.predict関数を使えばいい、としている。
- その中で、実はmodelクラスには_make_predict_functionというものが存在している。この関数は、推論前に以下のようにして実行できる。これは何なのか?と思い調べたら、めちゃくちゃ重要だった。
model._make_predict_function()
_make_predict_function()の意味
- 普通モデルが実行されるとき、「GPU上でのモデルのビルドとコンパイル」そして「実行」という2段階の処理が行われる。
- 以下のページの議論によると、 実は普通にmodel.predict()をいきなり呼ぶと、この2段階の処理が毎回実行されて、めちゃくちゃ遅くなっている のだという。
- そこで、 _make_predict_function()を先に実行しておくと、predictするときに「GPU上でのモデルのビルドとコンパイル」が行われず、単に「実行」だけできるようになり、処理が高速化される らしい。
- しかも、公式ドキュメントには載っていないらしい笑
#まとめ
- 単純にpredictを使っていると、pythonプログラムによってはエラーで落ちてしまい、実行できなくなったりするので、要注意!
- 私の場合は、ROSから画像データを読み込んで画像認識するpythonプロラムで以下のようなエラーがでましたが、_make_predict_function()を使うことでエラーがでなくなりました。
ValueError: Tensor Tensor("0_conv_1x1_parts/BiasAdd:0", shape=(?, 80, 60, 8), dtype=float32) is not an element of this graph.
- Kerasでの推論プログラムでは、_make_predict_function()を使いましょう!