Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
15
Help us understand the problem. What is going on with this article?
@surumetic

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

More than 1 year has passed since last update.

背景

  • 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()を使いましょう!
15
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
15
Help us understand the problem. What is going on with this article?