Why not login to Qiita and try out its useful features?

We'll deliver articles that match you.

You can read useful information later.

18
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

KerasとTensorFlowでCannot interpret feed_dict key as Tensorが出た場合の対応

Last updated at Posted at 2018-05-28

概要

FlaskとKerasを使ってアップロードした画像の識別をするプログラムを動かすと、Cannot interpret feed_dict key as Tensorが出てエラーが出た。

ここにも記載があるが、これはマルチスレッドで動作する場合に、読み込んだモデルが別のスレッドには共有されないため起きる。
Flask + Tensorflow + Keras で モデルからのpredictが動作しない問題

load_modelを使って読み込んだモデルは、tf.get_default_graph()を使ってスレッド間で共有できるようにする必要がある。

修正前
import tensorflow as tf
from keras.models import load_model


@app.route('/', methods=['GET', 'POST'])
def upload_file():
    model = load_model('./sample_model.h5')
    X = data
    result = model.predict(X)

X = dataの部分は、使うモデルに合わせて必要な型のデータを準備する。
修正前は、画像がアップロードされたタイミングでモデルを読み込んでいた。これだと1回目のアップロードは問題ないが、2回目以降にCannot interpret feed_dict key as Tensorが発生した。

修正後

import tensorflow as tf
from keras.models import load_model

model = load_model('./sample_model.h5')
graph = tf.get_default_graph()

@app.route('/', methods=['GET', 'POST'])
def upload_file():
    global graph
    with graph.as_default():
        X = data
        result = model.predict(X)

修正内容は、モデルの読み込みをプログラム起動時に実施し、そのグラフをgraphに保存しておく。
ファイルアップロード時にはgraph.as_default()でプログラム起動時に保存したグラフを読み込んで処理する。
こうするとアップロード2回目以降も、Cannot interpret feed_dict key as Tensorは発生しなくなった。

メモ

修正前のプログラムでは、ファイルアップロード時にモデルの読み込みを実施しているので、
問題ないような気がするが、2回目以降のファイルアップロードでエラーが出た。
修正後の方が、モデルのロードは1回で済むのでスッキリするが、なぜ修正前のプログラムでは
エラーとなったのかが、よくわかっていない。

18
11
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

Comments

No comments

Let's comment your feelings that are more than good

18
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Login to continue?

Login or Sign up with social account

Login or Sign up with your email address