Tensorflow Adam优化器vs Keras Adam优化器

时间:2019-01-08 19:01:20

标签: python tensorflow keras

我最初是在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代码段中?

2 个答案:

答案 0 :(得分:3)

您可以在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中实现了类似于以下的衰减,它在张量流中非常接近inverse_time_decay

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

答案 1 :(得分:0)

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

为回答您的问题,我引用此消息来源:

  

尽管回调函数会调整优化算法使用的学习率,但它们与优化算法分开运行。建议在使用学习费率时间表回调时使用SGD

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