在计算/应用渐变时设置损失函数的值

时间:2017-08-12 17:44:29

标签: tensorflow

我使用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}

我的损失函数取决于我神经网络的早期预测,因此需要很长时间来计算我对此的需求。

2 个答案:

答案 0 :(得分:0)

当您调用tf.gradients时,参数grad_ys允许您从上游backprop图中指定自定义值。如果不指定它们,最终会得到节点,该节点假定上游backprop是张量的1(填充节点)。因此,您可以使用占位符调用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})

答案 1 :(得分:0)

(代表OP发表。)

感谢Yaroslav的建议!以下是我根据您的建议汇总的代码。我认为这解决了我的问题:

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)