【发布时间】:2016-06-29 12:07:59
【问题描述】:
我想根据损失函数 w.r.t 的梯度值实现一个停止条件。权重。 例如,假设我有这样的事情:
optimizer = tf.train.AdamOptimizer()
grads_and_vars = optimizer.compute_gradients(a_loss_function)
train_op = optimizer.apply_gradients(grads_and_vars)
然后我想用这样的东西运行图表:
for step in range(TotSteps):
output = sess.run([input], feed_dict=some_dict)
if(grad_taken_in_some_way < some_treshold):
print("Training finished.")
break
我不确定我应该将什么传递给 sess.run() 以获得梯度的输出(除了我需要的所有其他东西)。我什至不确定这是否是正确的方法,或者我应该采取不同的做法。我做了一些尝试,但每次都失败了。希望有人有一些提示。 提前谢谢!
编辑:英文更正
EDIT2:Iballes 的回答正是我想要做的。不过,我不确定如何对所有梯度进行规范和求和。由于我的 CNN 中有不同的层和不同形状的不同权重,如果我按照您的建议进行操作,我会在 add_n() 操作中出错(因为我试图将不同形状的矩阵相加)。所以也许我应该这样做:
grad_norms = [tf.nn.l2_normalize(g[0], 0) for g in grads_and_vars]
grad_norm = [tf.reduce_sum(grads) for grads in grad_norms]
final_grad = tf.reduce_sum(grad_norm)
谁能证实这一点?
【问题讨论】:
标签: python machine-learning neural-network tensorflow