TensorFlow:如何根据时代设置学习率衰减?

时间:2016-08-11 15:00:54

标签: tensorflow

学习率衰减函数tf.train.exponential_decay采用decay_steps参数。要降低每num_epochs的学习率,您需要设置decay_steps = num_epochs * num_train_examples / batch_size。但是,在从.tfrecords文件中读取数据时,您不知道其中有多少个培训示例。

要获得num_train_examples,您可以:

  • 使用tf.string_input_producer设置num_epochs=1
  • 通过tf.TFRecordReader / tf.parse_single_example
  • 运行此操作
  • 循环并计算停止前产生一些输出的次数。

然而,这并不是很优雅。

是否有更简单的方法可以从.tfrecords文件中获取训练样例的数量,或者根据时期而非步骤设置学习率衰减?

3 个答案:

答案 0 :(得分:3)

您可以使用以下代码获取.tfrecords文件中的记录数:

def get_num_records(tf_record_file):
  return len([x for x in tf.python_io.tf_record_iterator(tf_record_file)])

答案 1 :(得分:0)

在下面的learning_rate中,

learning_rate = tf.train.exponential_decay(starter_learning_rate, global_step,
                                           100000, 0.96, staircase=True)

starter_learning_rate可以在所需的纪元之后通过定义如下函数来更改:

def initial_learning_rate(epoch):
    if (epoch >= 0) and (epoch < 100):
        return 0.1
    if (epoch >= 100) and (epoch < 200):
        return 0.05
    if (epoch >= 200) and (epoch < 500):
        return 0.001

然后你可以在for循环(迭代纪元)中初始化你的starter_learning_rate:

for epoch in range(epochs): #epochs is the total number of epochs
starter_learning_rate = initial_learning_rate(epoch)
...

注意

global_step变量未在:

中更改
decayed_learning_rate = starter_learning_rate *
                        decay_rate ^ (global_step / decay_steps)

答案 2 :(得分:0)

我建议您根据培训或评估损失的变化设置学习率衰减。如果损失正在振荡,您可以降低学习率。在培训开始之前,您几乎无法预测应该从哪个时期或步骤减少它。