指数衰减学习率与自适应学习率

我正使用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)

问题是我不知道如何为学习速率或衰减值设置更新规则。
如何在这里使用自适应学习率呢?

最佳解决办法

首先,tf.train.GradientDescentOptimizer旨在对所有步骤中的所有变量使用恒定的学习率。 TensorFlow还提供现成的自适应优化器,包括tf.train.AdagradOptimizer和tf.train.AdamOptimizer,这些可以作为随时可用的替代品。
但是,如果要通过其他普通渐变下降控制学习速率,则可以利用以下事实:tf.train.GradientDescentOptimizer构造函数的learning_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来保存学习率,并在每次要更改学习率时进行分配

次佳解决办法

Tensorflow提供了一种自动将指数衰减应用于学习速率张量的操作:tf.train.exponential_decay。有关正在使用的示例,请参阅this line in the MNIST convolutional model example。然后使用前文中的建议将此变量作为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’参数。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值