2017-08-12 45 views
0

作爲一個大系統,我想批量應用梯度更新的一部分。理想的情況是我想要做的線沿線的東西(在僞代碼):損失函數的設定值時/將我使用TensorFlow梯度

grads_and_vars = tf.gradients(loss, [vars]) 
list_of_losses = [2, 1, 3, ...] 
for loss_vals in list_of_losses: 
    tf.apply_gradients(grads_and_vars, feed_dict = {loss : loss_vals} 

我的損失函數依賴於先前的預測從我的神經網絡,它需要很長的時間來計算。因此我需要這個。

回答

0

當你調用tf.gradients,參數grad_ys讓你指定從上游backprop圖形自定義值。如果你沒有指定它們,你最終會得到假設上游backprop是1的張量(Fill節點)的節點。因此,您可以使用佔位符來呼叫tf.gradients,該佔位符可以指定自定義上游值,也可以只填充填充節點。

IE

tf.reset_default_graph() 
a = tf.constant(2.) 
b = tf.square(a) 
grads = tf.gradients(b, [a]) 
sess.run(grads, feed_dict={"gradients/Fill:0": 0}) 
0

(發佈代表OP的。)

感謝您的建議雅羅斯拉夫!以下是我根據您的建議整理的代碼。我想,這解決了我的問題:

tf.reset_default_graph() 
with tf.Session() as sess: 
    X = tf.placeholder("float", name="X") 
    W = tf.Variable(1.0, name="weight") 
    b = tf.Variable(0.5, name="bias") 
    pred = tf.sigmoid(tf.add(tf.multiply(X, W), b)) 

    opt = tf.train.AdagradOptimizer(1.0) 
    gvs = tf.gradients(pred, [W, b], grad_ys=0.5) 

    train_step = opt.apply_gradients(zip(gvs, [W, b])) 
    tf.global_variables_initializer().run() 
    for i in range(50): 
     val, _ = sess.run([pred, train_step], feed_dict= {X : 2}) 
     print(val) 
相關問題