Tensorflow: tf.get_variable はどのように機能しますか? 質問する

Tensorflow: tf.get_variable はどのように機能しますか? 質問する

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、まず次の操作を行います。

  1. tf.Variableを に置き換える必要がありますtf.get_variable。 で作成された変数はtf.Variable共有できませんが、後者は共有できます。

  2. scopeの が何であるかを把握しvar1reuse参照を宣言するときにそのスコープの を許可します。

コードを見るのが理解するより良い方法です

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

おすすめ記事