首页 > 解决方案 > Tensorflow Adam 优化器与 Keras Adam 优化器

问题描述

我最初在 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 代码片段中看到的相同学习率衰减应用到我的 Tensorflow 片段?

标签: pythontensorflowkeras

解决方案


您可以在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对学习率应用指数衰减。

其他衰变:

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

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

推荐阅读