2017-09-21 5 views
1

私は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) 

答えて

2

これがあります。実際にはlr.winitの親ではないため、TensorFlowはそれを実行しないため、手動で実行する必要があります。

編集: 私はあなたが(あなたのケースでlogreg方法+ 2に1を追加した割り当て)定義されているすべての変数と操作を保持するTensorFlow graphを意味しました。

init = tf.global_variables_initializer() opが変数のみを初期化し、他の操作を実行しません(特に、割り当て操作は、後で定義します)。

+0

「グラフ」とはどういう意味ですか?私には、変数のインスタンス化で指定された値を適切に割り当てるために 's.run(init)'を実行する必要があるようです(詳細については、私の質問の拡張子を確認できます)。 – Roman

+0

割り当てはオペレーションです。新しい値を割り当てるには、そのオペレーションを実行する必要があります。 –

関連する問題