有什么区别
tf.gradients
和
tf.train.RMSPropOptimizer(LR_RATE).compute_gradients
如果存在差异,请说我想使用tf.train.RMSPropOptimizer(self.lr_rate).apply_gradients(),哪一个更受欢迎?
谢谢!
解决方法:
不,这两者之间没有区别,如果你的唯一目标是获得渐变,因为RMSPropOptimizer
(或任何特定的优化器)必须导入具有compute_gradients
功能的基类优化器,而compute_gradients
功能又使用tf.gradients实现从tf.gradients开始计算与简单使用tf.gradients相同的渐变.
相反,如果您正在训练需要计算梯度的神经网络,那么使用tf.train.RMSPropOptimizer(..)是可取的,因为RMSProp优化是在小批量设置中更快学习的方法之一.
RMSProp: Divide the learning rate (lr) for a weight (w) by a running average of the magnitudes of recent gradients for that weight.
将(Momentum,AdaGrad,RMSProp)等不同优化应用于渐变的想法是,在计算渐变之后,您希望对它们进行一些处理,然后应用这些处理过的渐变.这是为了更好的学习.
因此,在RMSProp中,您不需要始终使用恒定的学习率.它取决于“近期梯度的运行平均值”
而tf.gradients(..)只是计算渐变.如果使用tf.train.Optimizer中的一个优化器,它会自动计算图形上的渐变.