私はTensorFlowで書かれたロジスティック分類モデルを作成しました。今私は手動でモデルパラメータの値を設定し、いくつかの予測を生成する必要があります。これは私が行うことです:TensorFlowの変数に値を正しく割り当てる方法は?
# instantiate the model
lr = logreg(inp_dim = 4, out_dim = 3)
# generate model parameters
w = np.array([
[ 1.0, 2.0, 3.0],
[ 4.0, 5.0, 6.0],
[ 7.0, 8.0, 9.0],
[10.0, 11.0, 12.0]
])
b = np.array([13.0, 14.0, 15.0])
# assign the values to the model
lr.w = tf.assign(lr.w, w)
lr.b = tf.assign(lr.b, b)
明らかに、それだけでは不十分です。モデルはまだ(モデルがインスタンス化されたときにランダムに生成された)古いパラメータを使用します。だから、私は次の追加手順を実行する必要があります。
init = tf.global_variables_initializer()
s = tf.Session()
s.run(init)
I(私はすべてのグローバル変数を初期化しているため)こと、そのステップの後にモデルはパラメータの新しい値を使用する必要がありますけれども。しかし、そうではありません。モデルは、私は、次の追加コマンドを実行する場合にのみ、パラメータの新しい値を確認するために開始します。
s.run(lr.w)
s.run(lr.b)
だから、実際に私が欲しかったものを達成するために管理しますが、最初にしている、私は鮮明な画像を持っていません第2に、モデルパラメータの値を設定するのが適切な方法であるとは確信していません。
誰かがTensorFlowにおけるモデル変数に設定値の背後にあるロジックを説明していただけますか?
を追加しました:私は実行を実行する必要が割り当てる実行した後
。この方法でのみ、変数はその値を取得します。例えば:私は、変数をインスタンス化時に与えられたその値を取得したい場合
w = tf.assign(w, 3.0)
sess.run(w)
しかし、なぜ同じ論理が適用されません。例えば実行する場合
w = tf.Variable(3.0, tf.float32)
変数は値を取得しません。私はこの問題を解決するために、以前と同じトリックを行うと思います(sess.run(w)
)。しかし、それはそうではありません、私は次の魔法のコマンドを実行する必要があります:あなたはs.run(init)
を実行するときにのみ、あなたのグラフとその両親が、他に絶対に何もして初期化子OPを実行するため
init = tf.global_variables_initializer()
sess.run(init)
「グラフ」とはどういう意味ですか?私には、変数のインスタンス化で指定された値を適切に割り当てるために 's.run(init)'を実行する必要があるようです(詳細については、私の質問の拡張子を確認できます)。 – Roman
割り当てはオペレーションです。新しい値を割り当てるには、そのオペレーションを実行する必要があります。 –