2017-02-06 9 views
3

n(たとえばn = 3)のスコープとx(たとえばx = 4)のスコープで定義された変数はありません。 スコープは、次のとおりです。1つのスコープの変数を抽出するためのtf.get_collection

model/generator_0 
model/generator_1 
model/generator_2 

私は損失を計算したら、私が抽出し、実行時に基準に基づいて、一つだけのスコープのからすべての変数を提供したいです。明らかに動作しませんでした

train_vars = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES, 'model/generator_'+tf.cast(idx, tf.string)) 

:したがって、私は選択範囲idxの指数は、私はすでに試してみましたint32の

<tf.Tensor 'model/Cast:0' shape=() dtype=int32> 

にキャストargminテンソルです。 idxを使用して特定のスコープに属する変数xをすべてオプティマイザに渡す方法はありますか?

ありがとうございます!あなたはTF 1.0 RC1以降では、このような何かを行うことができ

ビネーシュスリニバサン

答えて

3

v = tf.Variable(tf.ones(())) 
loss = tf.identity(v) 
with tf.variable_scope('adamoptim') as vs: 
    optim = tf.train.AdamOptimizer(learning_rate=0.1).minimize(loss) 
optim_vars = tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES, scope=vs.name) 
print([v.name for v in optim_vars]) #=> prints lists of vars created 
+0

は、残念ながら、optim_varsはすべてのスコープからのすべての変数が含まれています。 (tf.variable_scopeで V1 = tf.Variable(tf.ones(())) loss1 = tf.identity(V1) :私の問題は、私はtf.variable_scope( 'generator_0')で〜 を持っているということですv2 = tf.Variable(tf.ones())) loss2 = tf.identity(v2) 〜 次に、tf.minimum(loss、loss2)を見つけて変数を渡したいと思いますオプティマイザにその損失に属しています。 – viggie

+0

私はちょうど最新バージョン(夜間)でそれをテストし、 'optim_vars'には' adapoptim'スコープの変数が含まれています –

+0

あなたは以前には分かっていないのと同じ損失を定義しています。私は 'min_idx = tf.cast(tf.argmin(tf.stack([loss1、loss2])、0)、tf.int32)'を見つけて、この 'loss = tf.stack([loss1、loss2 ])[min_idx] 'をオプティマイザに送ります。それで、私は、すべての変数をurの提案を使って定義しているのです。 – viggie

関連する問題