2017-09-26 5 views
1

を解決する...私はTensorflowと、次のような問題では「ワット」の値を解決しようとしている:Tensorflowは:マトリックスに変数を埋め込み、タイトルは非常に明確でない場合は申し訳ありませんが

Y = X*B(w) + e 

Yは、22x5行列であり、Xは、22x3行列であり、Bは(W)は、以下の構造を有する3×5マトリックスである:

B = [[1, 1, 1, 1, 1], 
    [exp(-3w), exp(-6w), exp(-12w), exp(-24w), exp(-36w)], 
    [3*exp(-3w), 6*exp(-6w), 12*exp(-12w), 24*exp(-24w), 36*exp(-36w)]] 

ここに私のコードは次のとおり

# Parameters 
learning_rate = 0.01 
display_step = 50 
tolerance = 0.0000000000000001 

# Training Data 
Y_T = df.values 
X_T = factors.values 


X = tf.placeholder("float32", shape = (22, 3)) 
Y = tf.placeholder("float32", shape = (22, 5)) 
w = tf.Variable(1.0, name="w") 

def slope_loading(q): 
    return tf.exp(tf.multiply(tf.negative(q),w)) 

def curve_loading(q): 
    return tf.multiply(w,tf.exp(tf.multiply(tf.negative(q),w))) 

B = tf.Variable([[1.0, 1.0, 1.0, 1.0, 1.0], 
       [slope_loading(float(x)) for x in [3, 6, 12, 24, 36]], 
       [curve_loading(float(x)) for x in [3, 6, 12, 24, 36]]]) 

pred = tf.matmul(X,B) 
cost = tf.matmul(tf.transpose(Y-pred), (Y-pred))/22 
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost) 

# Initializing the variables 
init = tf.global_variables_initializer() 

# Launch the graph 
with tf.Session() as sess: 

    # Set initial values for weights 
    sess.run(init) 

    # Set initial values for the error tolerance 
    tol = abs(sess.run(cost, feed_dict={X: X_T, Y: Y_T})[0][0]) 

    iteration = 0 

    while tol > tolerance: 

     c_old = sess.run(cost, feed_dict={X: X_T, Y: Y_T})[0][0] 
     sess.run(optimizer, feed_dict={X: X_T, Y: Y_T}) 
     c_new = sess.run(cost, feed_dict={X: X_T, Y: Y_T})[0][0] 
     tol = abs(c_new - c_old) 

     iteration = iteration + 1 

     if iteration % display_step == 0: 
      print("Iteration= ", iteration, "Gain= ", tol) 

    training_cost = sess.run(cost, feed_dict={X: X_T, Y: Y_T}) 

しかし、私はエラー "FailedPreconditionError(上記のトレースバック参照)を取得しています:初期化されていない値を使用しようとしています..."

私はこれがBの構築方法と関係していると推測していますコスト関数に沿って、私は間違って何をしているか見るためにTensorflowにはあまりにも新しいです。

助けが必要ですか?

+0

私はこれを修正できます。今すぐそれに取り組む。 – Aaron

答えて

1

変数を使用して、別の変数の初期値を定義することはできません。 Bを構築するより良い方法は次のようなものです

ones = tf.ones(5) 
vals = tf.constant([3.0, 6.0, 12.0, 24.0, 36.0]) 
slopes = slope_loading(vals) 
curves = curve_loading(vals) 

B = tf.stack([ones, slopes, curves]) 
関連する問題