【问题标题】:What is the difference between tf.gradients and tf.train.RMSPropOptimizer(lr_rate).compute_gradients?tf.gradients 和 tf.train.RMSPropOptimizer(lr_rate).compute_gradients 有什么区别?
【发布时间】:2017-05-09 12:43:10
【问题描述】:

有什么区别

tf.gradients

和

tf.train.RMSPropOptimizer(LR_RATE).compute_gradients

如果有区别,比如说我想使用tf.train.RMSPropOptimizer(self.lr_rate).apply_gradients(),哪个更适合?

谢谢!

【问题讨论】:

    标签: python numpy machine-learning tensorflow deep-learning


    【解决方案1】:

    不,如果您的唯一目标是获得渐变,这两者之间没有区别,因为RMSPropOptimizer(或任何特定的优化器)必须导入基类Optimizer,它具有compute_gradients 函数,而该函数又使用tf.gradients 实现从这里 tf.gradients 用于计算梯度,这与简单地使用 tf.gradients 相同。

    相反,如果您正在训练需要计算梯度的神经网络,则建议使用tf.train.RMSPropOptimizer(..),因为RMSProp 优化是在小批量设置中更快学习的方法之一。

    RMSProp:将权重 (w) 的学习率 (lr) 除以该权重最近梯度幅度的运行平均值。

    对梯度应用不同优化(如(Momentum、AdaGrad、RMSProp)的想法是,在计算梯度后,您希望对它们进行一些处理然后应用这些处理后的梯度。这是为了更好的学习。

    因此,在 RMSProp 中,您只是不要自始至终使用恒定的学习率。相反,它依赖于“最近梯度幅度的运行平均值”

    而tf.gradients(..) 只是计算梯度。如果您使用来自 tf.train.Optimizer 的优化器之一,它会自动计算您图形上的梯度。

    【讨论】:

    • compute_gradients 返回一个压缩列表,你可以通过调用 sess.run() 来分别查看梯度和 trainable_variables 的两个部分
    猜你喜欢
    • 2010-10-02
    • 2011-12-12
    • 2010-09-16
    • 2012-03-14
    • 2012-02-06
    • 2011-02-25
    • 2011-11-22
    • 2015-03-26
    • 2013-08-19
    相关资源
    最近更新 更多