python - 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 片段?
解决方案
您可以在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))
推荐阅读
- hyperledger-fabric - Retrieving data from blockchain with random id's
- sql - SQL:检查约束以强制使用任意长度的正则表达式?
- git - 每次在 pythonanywhere 中克隆或拉取存储库时,我是否必须登录 github 帐户?
- c# - 在 Linux 上使用 .net 核心创建的 Zip 文件缺少读取权限
- sql - 根据范围将总和拆分为类别
- groovy - 如何在 Groovy 中将目录从一个位置复制到另一个位置
- syntax - 奇怪的语法错误'错误:预期是`,`或`:`之一,发现`else`'
- jasperserver - Jasper Reports Server - 生成报告时行下的随机空白
- javascript - Javascript计算分配给对象属性的唯一值总数
- javascript - 我怎样才能拥有多个功能?