2016-04-10 10 views
26

内のすべての変数私はこのような一定の範囲内で作成されたいくつかの変数を持っているを取得しますオプティマイザ。これを行う正しい方法は何ですか?Tensorflowはスコープ

答えて

54

私はあなたがほしいと思うと思うtf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES, scope='my_scope')。スコープ内のすべての変数が取得されます。

オプティマイザに渡す場合は、すべてという変数を使用します。これらはデフォルトのコレクションでもあり、tf.GraphKeys.TRAINABLE_VARIABLESです。

+17

'tf.GraphKeys.VARIABLES'はv0.12で非推奨になりました(私はこの回答から学んだように:http://stackoverflow.com/a/40918792/1827383)。代わりに 'tf.GraphKeys.GLOBAL_VARIABLES'を使用してください。 –

+0

opを作成してセッションで実行する必要がありますか?コードが不完全なようですが、自己完結型にするのは気になりますか? –

+0

あなたの答えをありがとう!この状況については、スコープ 'tf.variable_scope(main)'の中に2つのサブスコープ 'tf.variable_scope(1st)'と 'tf.variable_scope(2nd)'があり、 '1st'スコープの2つのリストを取得したい別々に最適化するように「2nd」を設定します。 – ytutow

8

ユーザーは正しくtf.get_collection()が必要であることを指摘しました。私はこれを行う方法を簡単な例を与える:

がスコープ:あなたがgraphKeysのいずれかを提供することができ、適用範囲が正規表現である

import tensorflow as tf 

with tf.name_scope('some_scope1'): 
    a = tf.Variable(1, 'a') 
    b = tf.Variable(2, 'b') 
    c = tf.Variable(3, 'c') 

with tf.name_scope('some_scope2'): 
    d = tf.Variable(4, 'd') 
    e = tf.Variable(5, 'e') 
    f = tf.Variable(6, 'f') 

h = tf.Variable(8, 'h') 

for i in tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES, scope='some_scope'): 
    print i # i.name if you want just a name 

お知らせ(オプション)を指定した場合、結果のリストは にフィルタされ、name属性がre.matchを使用して一致する項目のみが含まれます。項目 がname属性なしで返される場合は、スコープが指定されていて、 という選択肢またはre.matchは、特別なトークンを持たないスコープが接頭辞でフィルタリングすることを意味します。

したがって、「some_scope」を渡すと6つの変数が得られます。

+0

他のすべての変数を別のコレクションに入れたい場合はどうすればいいですか?たとえば、GLOBAL_VARIABLESには〜hが含まれており、 'some_scope'には〜fが付きますが、他のコレクションに含まれていないもの(正規表現を使用しないもの) – reese0106

関連する問題