タイトルが示唆するように、私は同じSession.run()
呼び出しで複数のTensorflow操作を実行したいと思います。具体的には、問題をより具体的にするために、1回の呼び出しで複数のトレーニング反復を実行するとします。同じSession.run()コールでの複数のシーケンシャルTensorflow操作
複数でSession.run()
の呼び出しはこのようなものになるだろうことを行うための標準的な方法:我々は、複数のセッションの呼び出しを行っているので、
# Declare the function that we want to minimize
func = ...
# Create the optimizer which will perform a single optimization iteration
optimizer = tf.train.AdamOptimizer().minimize(func)
# Run N optimization iterations
N = 10
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for i in range(N):
sess.run(optimizer)
しかし、もちろんこれは、いくつかのオーバーヘッドを持っています。私は、何らかの形で操作をグループ化することによって、いくらかの重大なオーバーヘッドを取り除くことができると考えていますgroup
またはcount_up_to
のいずれかを使用する必要がありますが、このケースで使用する方法を示す例は見つかりません。誰かが正しい方向に私を指差してくれますか?
究極の目標は、上記のようなものに変換することができるように、単一の呼び出しでN
の反復を実行しますいくつかの化合物の操作を定義することです:
# Declare the function that we want to minimize
func = ...
# Create the optimizer which will perform a single optimization iteration
optimizer = tf.train.AdamOptimizer().minimize(func)
# Create the compound operation that will run the optimizer 10 times
optimizeNIterations = ?????
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
sess.run(optimizeNIterations)
EDIT ::
として、 musically_ut
が指摘するように、問題を強制的にフィード辞書に入れることで、私は実際に操作を連鎖させることができます。しかし、それは非常に特定した問題の解決策のように感じます。私の全体的な関心事は、1回のセッション実行で順次操作を実行する方法です。私はあなたがこれを望む理由をもう一つ挙げることができます....
私のオプティマイザを実行したいだけでなく、最適化された値を取得したいと思います。これらは変数X
にあります。私は最適化し、最適化された値を取得したい場合は、私はこの
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
o, x = sess.run([ optimizer, X ])
ようしかし、操作(オプティマイザ、X)を順次実行していないので、これは動作しません、実際に何かをしようとすることができます。私は基本的に2つのセッションコールを持つ必要があります:
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
o = sess.run(optimizer)
x = sess.run(X)
質問は、これら2つの呼び出しを1つに結合する方法です。
あなたは 'feed_dict'を使用していないとして、私はあなたがキューを使用して入力に供給していると仮定?その場合、おそらく 'sess.run([optimizer] * N)'も同様に効率的です。しかし、オーバーヘッドが最適化するのに十分なほど重要かどうかはわかりませんが、手元にある数字はありますか? –
私は両方のシナリオを持っています(フィードdictsの有無にかかわらず)。私の理解は、あなたが提案していることは、順番に実行することを保証されていないということでした... –
私はちょうどチェックしました。あなたが提案するものは、同じコマンドを何度も実行しません。結果は 'sess.run(optimizer)'と同等です。 –