我使用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 :(得分: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)