是什麼tf.gradients和tf.train.RMSPropOptimizer(lr_rate).compute_gradients有什麼區別?
tf.gradients
和
tf.train.RMSPropOptimizer(LR_RATE).compute_gradients
如果是有區別的區別,說我想要再使用tf.train.RMSPropOptimizer(self.lr_rate).apply_gradients()
,其中之一將是首選?
謝謝!
是什麼tf.gradients和tf.train.RMSPropOptimizer(lr_rate).compute_gradients有什麼區別?
tf.gradients
和
tf.train.RMSPropOptimizer(LR_RATE).compute_gradients
如果是有區別的區別,說我想要再使用tf.train.RMSPropOptimizer(self.lr_rate).apply_gradients()
,其中之一將是首選?
謝謝!
沒有,有這兩種,如果你唯一的目標是讓梯度,因爲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中的某個優化器,它會自動計算圖形上的漸變。
compute_gradients返回一個壓縮列表,您可以通過調用sess.run()獲取梯度和trainable_variables來分別查看這兩個部分 – ihadanny