我想知道是否有任何方法可以重新计算图形中具有更新权重的梯度,或者是否有更好的方法可以做到这一点。例如,为了估计粗麻布范数,我们需要计算
delta ~ N(0, I)
hessian_norm = 1/M \sum_{1}^{M} gradient(f(x+delta))- gradient(f(x-delta))/(2*delta)
我们需要在
x+delta
上渐变值。当前,如果我们直接在None
上使用tf.gradient
,则将获得var+delta
类型。更具体地说,如果我们定义
a = tf.Variable
b = some_function(a)
grad = tf.gradients(b, a)
这是正常的梯度计算,但如果我们这样做
grad_delta = tf.gradients(b, a+delta)
它将返回
None
。此功能似乎使使用上述方法无法近似粗麻布范数。 最佳答案
b
不是a+delta
的功能,因此得到None
。您要么需要创建依赖于b2
的新值a+delta
,要么只需将a
变量移动delta
并再次求值即可获得第二个值。
这与您line search in TensorFlow的操作类似。
关于python - 如何使用 tensorflow 逼近黑森州矩阵的范数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46672168/