首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何为GradientDescentOptimizer设置自适应学习率?

如何为GradientDescentOptimizer设置自适应学习率?
EN

Stack Overflow用户
提问于 2015-11-25 23:08:58
回答 4查看 110.4K关注 0票数 108

我正在使用TensorFlow来训练神经网络。这就是我初始化GradientDescentOptimizer的方法

init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)

mse        = tf.reduce_mean(tf.square(out - out_))
train_step = tf.train.GradientDescentOptimizer(0.3).minimize(mse)

这里的问题是,我不知道如何为学习率或衰减值设置更新规则。

如何在这里使用自适应学习率?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-11-26 01:28:00

首先,tf.train.GradientDescentOptimizer被设计为在所有步骤中对所有变量使用恒定的学习率。TensorFlow还提供了开箱即用的自适应优化器,包括tf.train.AdagradOptimizertf.train.AdamOptimizer,这些可以作为替代。

但是,如果您希望使用普通的梯度下降来控制学习率,则可以利用tf.train.GradientDescentOptimizer constructorlearning_rate参数可以是Tensor对象这一事实。这允许您在每个步骤中计算不同的学习率值,例如:

learning_rate = tf.placeholder(tf.float32, shape=[])
# ...
train_step = tf.train.GradientDescentOptimizer(
    learning_rate=learning_rate).minimize(mse)

sess = tf.Session()

# Feed different values for learning rate to each training step.
sess.run(train_step, feed_dict={learning_rate: 0.1})
sess.run(train_step, feed_dict={learning_rate: 0.1})
sess.run(train_step, feed_dict={learning_rate: 0.01})
sess.run(train_step, feed_dict={learning_rate: 0.01})

或者,您可以创建保存学习率的标量tf.Variable,并在每次要更改学习率时指定它。

票数 197
EN

Stack Overflow用户

发布于 2015-11-26 14:14:54

Tensorflow提供了一个op来自动将指数衰减应用于学习率张量:tf.train.exponential_decay。有关它的使用示例,请参阅this line in the MNIST convolutional model example。然后使用上面的@mrry建议将这个变量作为learning_rate参数提供给您选择的优化器。

要看的关键摘录是:

# Optimizer: set up a variable that's incremented once per batch and
# controls the learning rate decay.
batch = tf.Variable(0)

learning_rate = tf.train.exponential_decay(
  0.01,                # Base learning rate.
  batch * BATCH_SIZE,  # Current index into the dataset.
  train_size,          # Decay step.
  0.95,                # Decay rate.
  staircase=True)
# Use simple momentum for the optimization.
optimizer = tf.train.MomentumOptimizer(learning_rate,
                                     0.9).minimize(loss,
                                                   global_step=batch)

注意要最小化的global_step=batch参数。这告诉优化器在每次训练时为你增加'batch‘参数。

票数 90
EN

Stack Overflow用户

发布于 2017-03-21 16:35:14

来自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)

# Passing global_step to minimize() will increment it at each step.
learning_step = (
tf.train.GradientDescentOptimizer(learning_rate)
.minimize(...my loss..., global_step=global_step))
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33919948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档