2016-06-27 17 views
0

ステートメントsess.run()を複数回実行する必要があります。 コードの最初にsessを作成します。しかし、各sess.run()ステートメントは、私のCPUマシン上で約0.5-0.8秒かかる。私はこれを最適化する方法はありますか? Tensorflowは遅延読み込みを行うので、それをやり直す方法はないのですか?複数の実行でTensorflowを最適化する

私はイメージ分類の例のInceptionモデルを使用しています。

def load_network(): 
    with gfile.FastGFile('model.pb', 'rb') as f: 
     graph_def = tf.GraphDef() 
     data = f.read() 
     graph_def.ParseFromString(data) 
     png_data = tf.placeholder(tf.string, shape=[]) 
     decoded_png = tf.image.decode_png(png_data, channels=3) 
     _ = tf.import_graph_def(graph_def, name=input_map={'DecodeJpeg': decoded_png}) 
     return png_data 

def get_pool3(sess, png_data, imgBuffer): 
    pool3 = sess.graph.get_tensor_by_name('pool_3:0') 
    pool3Vector = sess.run(pool3, {png_data: imgBuffer.getvalue()}) 
    return pool3Vector 

def main(): 
    sess = getTensorSession() 
    png_data = load_network() 

    # The below line needs to be called multiple times, which is what takes 
    # nearly 0.5-0.8 seconds. 
    # imgBuffer contains the stored value of the image. 
    pool3 = get_pool3(sess, png_data, imgBuffer) 
+0

プレースホルダを使用していますか?キューを使用する方が効率的です –

+0

私は1つのプレースホルダを追加しました。残りはテンソルフローが与える開始モデルです。 – n00b

答えて

2

Tensorflowはlazily操作を実行します---実際にはsess.run()が呼び出されるまで何も計算されません。 sess.run()を呼び出すと、Tensorflowは計算グラフ内のすべての操作を実行します。したがって、sess.run()が0.5〜0.8秒かかる場合、計算自体が0.5〜0.8秒かかる可能性があります。

は、()(sess.runするためにいくつかのオーバーヘッドがありますが、それは半秒のオーダー近くのどこかではありません。)助け

願っています!

を追加しました:ここ

はあなたの計算をスピードアップするために見えるかもしれないいくつかのものです:

  • は、あなたの計算のどの部分を見てTensorflowのプロファイリングツールを使用する時間を取っています。彼らはまだ文書化されていませんが、あなたはこのgithubの問題でそれらに関するいくつかの情報を見つけることができます:https://github.com/tensorflow/tensorflow/issues/1824

  • は小さい画像を使用して、モデルの複雑さを軽減---あなたの計算を安く作る、など

  • をCPUではなくGPUで計算を実行します。

+0

こんにちは、コードスニペットも追加しました。 – n00b

+0

はい、私の答えは正しいと思います。 sess.run()を呼び出すと、実際にグラフが演算子 'pool3'まで実行されます。これは0.5秒かかる計算そのものです。 –

+0

申し訳ありませんが、もっと詳しく教えてください。私は何を変えるべきですか? – n00b

関連する問題