我定义了一个张量流模型,并希望通过自己的优化器对其进行训练。但我遇到一个问题。
以下代码忽略模型的定义,仅保留优化部分。
P = tf.global_variables()
lr = 0.1
update_ops = []
grads1 = tf.gradients(loss, P)
for p,g in zip(P, grads1):
update_ops.append(tf.assign(p, p - lr * g))
with tf.control_dependencies(update_ops):
update_ops_2 = []
grads2 = tf.gradients(loss, P)
for p,g in zip(P, grads2):
update_ops_2.append(tf.assign(p, p - lr * g))
我循环跑步:
for i in range(1000):
_ = sess.run(update_ops_2, feed_dict={myinput: mydata})
但损失无法减少,但我却奔跑
for i in range(1000):
for j in range(2):
_ = sess.run(update_ops, feed_dict={myinput: mydata})
损失可以减少。
它们之间有什么不同?我想一次sess.run
两次获得梯度怎么办?
答案 0 :(得分:0)
此代码示例中的优化工作顺利进行,您能否提供完整的代码?
import tensorflow as tf
# from tensorflow.python.ops.resource_variable_ops import ResourceVariable
# x = ResourceVariable(2.)
x = tf.Variable(2.)
loss = tf.square(x)
P = tf.global_variables()
lr = 0.1
update_ops = []
grads1 = tf.gradients(loss, P)
for p, g in zip(P, grads1):
update_ops.append(tf.assign(p, p - lr * g))
with tf.control_dependencies(update_ops):
update_ops_2 = []
grads2 = tf.gradients(loss, P)
for p, g in zip(P, grads2):
update_ops_2.append(tf.assign(p, p - lr * g))
sess = tf.Session()
sess.run(tf.global_variables_initializer())
for i in range(20):
_, l, xx = sess.run((update_ops_2, loss, x))
print(l, xx)