Tensorflow optimizer.apply_gradients()的结果为无
我试图在梯度上应用一个额外的步骤,比如简单的乘法,关于可训练变量的子集。以下是我们所拥有的:Tensorflow optimizer.apply_gradients()的结果为无,tensorflow,gradient-descent,Tensorflow,Gradient Descent,我试图在梯度上应用一个额外的步骤,比如简单的乘法,关于可训练变量的子集。以下是我们所拥有的: def do_something(tgvt): new_tgvt = [] for gv in tgvt: if gv[0] == None: sh = tf.shape(gv[1]) gv0 = tf.zeros(sh) gv0t = tf.convert_to_tensor(gv0) new_tgvt.append((gv0t,
def do_something(tgvt):
new_tgvt = []
for gv in tgvt:
if gv[0] == None:
sh = tf.shape(gv[1])
gv0 = tf.zeros(sh)
gv0t = tf.convert_to_tensor(gv0)
new_tgvt.append((gv0t, gv[1]))
else:
new_tgvt.append((gv[0]*5, gv[1]))
return new_tgvt
optimizer = tf.train.GradientDescentOptimizer(learning_rate = 1e-5)
params = tf.trainable_variables()
pars = [params[27], params[29]]
gradients = optimizer.compute_gradients(cost,pars)
tgv = [(g,v) for (g,v) in gradients]
new_gradients = do_something(tgv)
train_op = optimizer.apply_gradients(new_gradients)
session = tf.Session()
session.run(tf.global_variables_initializer())
total_iterations = 0 # record the total iterations
for i in range(total_iterations,total_iterations + num_iterations):
x_batch, y_batch = data.train.next_batch(batch_size)
feed_dict = {X: x_batch, y_true: y_batch, keep_prob: 0.5}
result = session.run([train_op, pars], feed_dict=feed_dict)
当我打印结果时
,渐变为None
:
print(result[0])
print((result[1][0]).shape)
print((result[1][1]).shape)
None
(5, 5, 1, 36)
(5, 5, 36, 64)
知道如何解决这个问题吗?来自文档:
列车运行
应返回:
应用指定渐变的操作
在train\u op
上调用sess.run
预计将给出None
,因为此操作不会产生值,而是应用
为什么不自己打印一个变量的旧值和更新值来检查它呢???哦,那么我只是误解了应用梯度步骤及其作用。我在更改前后检查了变量的值,结果与我预期的一样。但是,我认为我应该看到新成分是apply_gradients()的结果。感谢您的澄清。文档总是很有帮助的。