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

最佳答案

您可以在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))
    

    关于python - Tensorflow Adam优化器vs Keras Adam优化器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54098077/

    10-12 19:39