tf.get_variable
私はこれについて読んだ質問また、Tensorflow Web サイトで入手できるドキュメントからも少し学びました。しかし、まだよくわからず、オンラインで答えを見つけることができませんでした。
どのように機能しますかtf.get_variable
? 例:
var1 = tf.Variable(3.,dtype=float64)
var2 = tf.get_variable("var1",[],dtype=tf.float64)
それはつまりvar2は別の初期化が類似した変数var1?それともvar2別名var1(試してみましたが、そうではないようです)?
調子はどうですかvar1そしてvar2関連している?
変数が構築されるとき、変数はどのように構築されるのでしょうか?取得本当に存在しないのでしょうか?
ベストアンサー1
tf.get_variable(name)
テンソルフロー グラフにという新しい変数を作成します(現在のスコープに既に存在するname
場合は _ を追加します)。name
この例では、パイソン変数 と呼ばれますvar1
。
その変数の名前はテンソルフローグラフは ** ではありませんvar1
が、 ですVariable:0
。
定義するすべてのノードには独自の名前があり、それを指定することも、Tensorflow にデフォルト (常に異なる) の名前を指定させることもできます。Python変数のプロパティname
にアクセスして値を確認できますname
。(つまりprint(var1.name)
)。
2行目では、Python変数 var2
名前テンソルフローグラフはvar1
。
スクリプト
import tensorflow as tf
var1 = tf.Variable(3.,dtype=tf.float64)
print(var1.name)
var2 = tf.get_variable("var1",[],dtype=tf.float64)
print(var2.name)
実際には次のように印刷されます:
Variable:0
var1:0
代わりに、テンソルフローグラフで呼び出される変数(ノード)を定義しvar1
、そのノードへの参照を取得したい場合は、できない単に を使用してくださいtf.get_variable("var1")
。これにより、 valled という新しい異なる変数が作成されますvar1_1
。
このスクリプト
var1 = tf.Variable(3.,dtype=tf.float64, name="var1")
print(var1.name)
var2 = tf.get_variable("var1",[],dtype=tf.float64)
print(var2.name)
プリント:
var1:0
var1_1:0
ノードへの参照を作成する場合はvar1
、まず次の操作を行います。
tf.Variable
を に置き換える必要がありますtf.get_variable
。 で作成された変数はtf.Variable
共有できませんが、後者は共有できます。scope
の が何であるかを把握しvar1
、reuse
参照を宣言するときにそのスコープの を許可します。
コードを見るのが理解するより良い方法です
import tensorflow as tf
#var1 = tf.Variable(3.,dtype=tf.float64, name="var1")
var1 = tf.get_variable(initializer=tf.constant_initializer(3.), dtype=tf.float64, name="var1", shape=())
current_scope = tf.contrib.framework.get_name_scope()
print(var1.name)
with tf.variable_scope(current_scope, reuse=True):
var2 = tf.get_variable("var1",[],dtype=tf.float64)
print(var2.name)
出力:
var1:0
var1:0