2017-11-13 13 views
1

variable scopeを参照するTensorFlowウェブサイトの2つのリンクがあり、1つはtf.variable_scopeであり、もう1つはtf.VaribleScopeです。TensorFlow - tf.VariableScopeとtf.variable_scopeの相違点

tf.VariableScopeのアプリケーションの例はありません。ドキュメントを読むだけで、2つの違いがあるかどうかを区別できませんでした。

Traceback (most recent call last): 
    File "/home/NER/window_model.py", line 105, in <module> 
    model = NaiveNERModel(embeddings) 
    File "/home/NER/window_model.py", line 64, in __init__ 
    pred = self.add_prediction_op(embed) 
    File "/home/NER/window_model.py", line 82, in add_prediction_op 
    with tf.VariableScope('Layer1', initializer=tf.contrib.layers.xavier_initializer()): 
AttributeError: __enter__ 

(いくつかの違いがそこにいる示している)tf.VariableScopetf.variable_scopeを交換することによって実現しようとしましたが、次のエラーを得たオリジナルの実行可能なコードのスニペット

with tf.variable_scope('Layer1', initializer=tf.contrib.layers.xavier_initializer()): 
     W = tf.get_variable("W", [self.dim * self.window_size, self.dim * self.window_size]) 
     b1 = tf.get_variable("b1", [self.dim * self.window_size]) 
     h = tf.nn.relu(tf.matmul(embed, W) + b1) 

答えて

1

tf.VariableScopeは保持している実際の範囲クラスですname,initializer,regularizer,partitionerなど多くのプロパティが、そのスコープで定義された変数に伝播されます。このクラスは、コンテキストマネージャではなくプロパティのコレクションのほうが多いので、withステートメント(エラーが示すもの)で使用することはできません。

範囲は(内部クラスtensorflow _VariableStoreこの責任がある)、第一のスタックの上にプッシュされなければならないので、その後、バックスタックからポップ、tf.VariableScopeの手動インスタンス化は退屈でエラーが発生しやすいです。ここでコンテキストマネージャが来ます。

は、可変スコープでの作業を容易にするコンテキストマネージャです。ドキュメントには次のように書かれています。

変数(レイヤー)を作成するopsを定義するためのコンテキストマネージャーです。

このコンテキストマネージャは、(オプションの)値が同じグラフからのものであることを検証し、グラフがデフォルトのグラフであることを確認し、名前スコープと変数スコープをプッシュします。

変数を使用した実際の作業は、フードの下に作成されたtf.VariableScopeオブジェクトに委任されます。

関連する問題