【发布时间】:2016-10-22 16:24:00
【问题描述】:
长话短说。下一段代码描述了期望的行为,即优化器修改了变量值
x = tf.Variable(5.0)
# x = x.assign(tf.constant(5.0))
opt = tf.train.MomentumOptimizer(learning_rate=0.0001, momentum=0.9)
train_op = opt.minimize(x)
with tf.Session() as sess:
sess.run(tf.initialize_all_variables())
sess.run(train_op)
print(x.eval()) # => 4.9999 - Desired result
虽然在旅途中将值分配给变量被认为是不值得梯度的操作:
x = tf.Variable(5.0)
x_ = x.assign(tf.constant(5.0))
opt = tf.train.MomentumOptimizer(learning_rate=0.0001, momentum=0.9)
train_op = opt.minimize(x_)
with tf.Session() as sess:
sess.run(tf.initialize_all_variables())
sess.run(train_op) # => ERROR: No gradients provided for any variable
print(x.eval())
有没有办法将变量设置为某个值,但由于火车运行而通过梯度修改其值?
编辑:代码修复
【问题讨论】:
-
你应该最小化
x,而不是x_。x_是一个赋值操作,可以在单独的sess.run调用中调用以修改值 -
@YaroslavBulatov 的目标是最小化 x_ ,它不仅代表分配,而且代表整个模型。说
x_ = large_network(x.assign(const)),我的目标是优化loss(x_),但在x中捕捉渐变 -
如果您想在
x中保存渐变,您可以执行tf.assign(x, gradient)之类的操作。如果要将x设置为某个值,然后将其最小化,可以运行tf.assign(x, somevalue),然后运行tf.assign_add(x, gradient)
标签: tensorflow backpropagation