2017-10-10 136 views
1

我不知道是否有任何方法來重新計算圖中更新權重的梯度,或者是否有更好的方法來做到這一點。例如,用於估計粗麻布規範,我們需要計算如何使用張量流來逼近hessian矩陣的規範

delta ~ N(0, I) 
hessian_norm = 1/M \sum_{1}^{M} gradient(f(x+delta))- gradient(f(x-delta))/(2*delta) 

我們需要在x+delta梯度值。目前,如果我們直接在var+delta上使用tf.gradient,我們將獲得None類型。

更多specifally說,如果我們定義

a = tf.Variable 
b = some_function(a) 
grad = tf.gradients(b, a) 

,這是一個正常的梯度計算,但如果我們這樣做

grad_delta = tf.gradients(b, a+delta) 

它將返回None。這個特徵似乎使得使用上述方法不可能逼近hessian規範。

回答

1

b不是a+delta的功能,所以你得到None s。您需要創建新值b2,這取決於a+delta,或者只需將a變量移動delta並再次獲取第二個值。

這與您的工作方式line search in TensorFlow相似。

+0

非常感謝。但是,如果我做了a2 = a + delta,grad = tf.gradients(b,a2),它仍然會發生。 –

+0

在你的計算圖中有b和a2之間的路徑嗎? –