2017-02-16 8 views
2

私は、RESTエンドポイントから呼び出され、画像のURLとして渡されるTensorflowのpythonクラスを持っています。新しい要求が開始されるたびに、ローカルの.pbファイルを読み取るcreate_graphメソッドが呼び出されます。このファイルは要求から要求に変更されません。だから、私は、毎回のリクエストでこのファイルを読むのがリソースと時間を有効に活用していないと感じています。Tensorflowで各リクエストのグラフを読み取らないようにする方法

コードは以下の通りです:

import numpy as np 
import tensorflow as tf 
import urllib2 

class MyTensorflow: 

    def __init__(self, url): 
    self.imageUrl = imageUrl 

    def create_graph(self): 
    with tf.gfile.FastGFile("/path/to/model.pb", 'rb') as f: 
     graph_def = tf.GraphDef() 
     graph_def.ParseFromString(f.read()) 
     _ = tf.import_graph_def(graph_def, name='') 

    def run_inference_on_image(self): 
    image_string = urllib2.urlopen(self.imageUrl).read() 
    with tf.Session() as sess: 
     ... 
     ... 
     return a_text_value 

上記のコードは、このようなflask_restfulから呼び出される:

c = my_tensorflow.MyTensorflow(args['url']) 
    c.create_graph() 
    returned = c.run_inference_on_image() 

質問

だけでcreate_graphをコールする方法はあります最初に要求し、サービスが再起動されるまで呼び出さないでください。

+0

'before_first_request(f)' アプリケーションのこのインスタンスへの最初の要求の前に実行される関数を登録します。それはどうですか? – metmirr

答えて

0

サービングの場合:プロセスごとに1回のみセッションを作成します。 Session.run()を何度も呼び出すことができます。

関連する問題