Tensorflow Adam 优化器与 Keras Adam 优化器

Posted

技术标签:

【中文标题】Tensorflow Adam 优化器与 Keras Adam 优化器【英文标题】:Tensorflow Adam optimizer vs Keras Adam optimizer 【发布时间】:2019-01-08 19:01:19 【问题描述】:

我最初在 Keras 中开发了一个分类器,我的优化器很容易应用衰减。

adam = keras.optimizers.Adam(decay=0.001)

最近我尝试将整个代码更改为纯 Tensorflow,但无法弄清楚如何正确地将相同的衰减机制应用于我的优化器。

optimizer = tf.train.AdamOptimizer()
train_op = optimizer.minimize(loss=loss,global_step=tf.train.get_global_step())

如何将我的 Keras 代码 sn-p 中看到的相同学习率衰减应用到我的 Tensorflow sn-p?

【问题讨论】:

【参考方案1】:

您可以在tensorflow 中找到关于衰变的不错的文档:

...
global_step = tf.Variable(0, trainable=False)
starter_learning_rate = 0.1
learning_rate = tf.train.exponential_decay(starter_learning_rate, global_step,
                                           100000, 0.96, staircase=True)

learning_step = ( tf.train.GradientDescentOptimizer(learning_rate)
    .minimize(...my loss..., global_step=global_step)
)

tf.train.exponential_decay 对学习率应用指数衰减。

其他衰变:

inverse_time_decay polynomial_decay linear_cosine_decay exponential_decay cosine_decay cosine_decay_restarts natural_exp_decay noisy_linear_cosine_decay

Keras 在 AdamOptimizer 中实现了类似下面的衰减,与 tensorflow 中的inverse_time_decay 非常接近:

lr = self.lr * (1. / (1. + self.decay * self.iterations))

【讨论】:

谢谢,但问题是如何应用与 keras sn-p 中看到的完全相同的衰减。什么类型的衰变是相同的?指数?线性?...等 keras 的衰减与 inverse_time_decay 非常相似。【参考方案2】:

您可以在这里https://machinelearningmastery.com/understand-the-dynamics-of-learning-rate-on-deep-learning-neural-networks/ 找到一些有用的提示。

为了回答你的问题,我引用这个来源:

回调与优化算法分开运行,但它们会调整优化算法使用的学习率。使用学习率调度回调时建议使用 SGD

根据这篇文章,您将了解如何使用 keras.callbacks,并希望成功地按照您的意愿设置 Adam keras 优化器的学习率。不过,请注意,不建议这样做(我还没有尝试过)

【讨论】:

以上是关于Tensorflow Adam 优化器与 Keras Adam 优化器的主要内容,如果未能解决你的问题,请参考以下文章

SGD、Adam优化器

Adam优化器

是否可以将 Tensorflow Graphics 的 Levenberg-Marquardt 优化器与 Tensorflow 2.0 模型集成?

如何在 tensorflow 2.0.0 中使用 Lazy Adam 优化器

神经网络优化算法如何选择Adam,SGD

Tensorflow Adam Multigpu 梯度