我想知道是否有任何方法可以重新计算图形中具有更新权重的梯度,或者是否有更好的方法可以做到这一点。例如,为了估计粗麻布范数,我们需要计算

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/

10-12 19:26