LoginSignup
18
17

More than 5 years have passed since last update.

Kerasにおける"_make_predict_function()"の重要性

Last updated at Posted at 2018-09-02

背景

  • 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()を使いましょう!
18
17
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
18
17