2016-12-23 45 views

回答

1

沒有,有這兩種,如果你唯一的目標是讓梯度,因爲RMSPropOptimizer(或任何特定的優化)已經導入它具有compute_gradients功能,反過來使用tf.gradients實現從這裏基類Optimizer沒有什麼區別tf.gradients用於計算與簡單地使用tf.gradients相同的梯度。

相反,如果您正在訓練需要計算梯度的神經網絡,那麼使用tf.train.RMSPropOptimizer(..)將是明智的,因爲RMSProp優化是在小批量設置中更快學習的方法之一。

RMSProp:將權重(w)的學習率(lr)除以該權重近期梯度的運行平均值。

背後採用不同的優化之類的想法(動量,AdaGrad,RMSProp)的梯度是計算梯度之後,你想做的事對他們一些處理,然後應用這些處理梯度。這是爲了更好的學習。

因此,在RMSProp中,您不需要始終使用恆定的學習率。它取決於「近期梯度大小的運行平均值」

tf.gradients(..)只是計算梯度。如果您使用tf.train.Optimizer中的某個優化器,它會自動計算圖形上的漸變。

+0

compute_gradients返回一個壓縮列表,您可以通過調用sess.run()獲取梯度和trainable_variables來分別查看這兩個部分 – ihadanny