2017-12-11 5 views
1

variable_scopeを使用する場合、通常は最初の引数(name_or_scope)をvariable_scopeの名前として設定します。また、再利用変数を 'True'に設定すると、変数をvariable_scope内で共有できます。 しかし、私はテンソルフローAPI(Bahdanauの注意、またはtf.layers.Denseなど)の中に、最初の引数(name_or_scope)がNoneに設定され、2番目の引数(default_name)がスコープ名。 私はtf.variable_scopeのコードをチェックしていることが見つかりました:Noneでないname_or_scope = Noneでのvariable_scopeの使い方

name_or_scope場合であるとして、それが使用されています。 scopeがNoneの場合、 、次にdefault_nameが使用されます。その場合、同じ名前で が以前に同じスコープで使用されていた場合は、 によって一意になり、_Nが追加されます。

この場合、variable_scopeが呼び出されるたびに異なる名前のvariable_scopeが作成されるため、このループでは使用できません。

私はこの機能について説明できません(name_or_scopeNoneと設定されています)。

誰でもこれを説明できますか?

+0

これを確認できます。https://stackoverflow.com/questions/38545362/tensorflow-variable-scope-reuse-if-variable-exists?answertab=active#tab-top –

+0

@ManojJadhav私の質問は、どのようにvariable_scope name_or_scope = Noneのときに作業してください –

答えて

1

tf.variable_scopename_or_scope=Noneで呼び出された場合は、default_name引数が使用され、それは一意です。ループで呼び出すと、異なるスコープが作成されます。

Bahdanauの注目わからない

が、tf.layers.Dense_scope引数を経由してカスタムのスコープを使用して作成することができます。

layer = Dense(units, ..., _scope=name) 

実際には、あなたが指定したnametf.layers.denseを呼び出すことができますし、この名前を定義しようとしていますtf.variable_scope(name)。この方法でループ内に密なレイヤーを作成することができます。

+0

あなたの答えは私には大いに役立ちます。ありがとうございます。しかし、なぜ彼らがそのような機能を作ったのかについてもう少し説明できますか?つまり、どのような状況で、None value 'name_or_scope = None'の引数を使用する必要があります。 –

+0

ユースケースの1つは、変数の再利用を禁止する、つまりユニークなスコープを強制することです。また、ネストされたスコープ名を避けて、テンソルボードでよりよく見えるようにすることもできます。 tfソースベースの例は次のとおりです。https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/feature_column/feature_column.py#L192 – Maxim

関連する問題