2017-08-12 46 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) 
相关问题