TensorFlow:如何设置基于时代的学习率衰减?

TensorFlow:如何设置基于时代的学习率衰减?,tensorflow,Tensorflow,学习率衰减函数tf.train.指数衰减采用一个衰减步骤参数。要每num\u epochs降低学习速率,您可以设置decation\u steps=num\u epochs*num\u train\u examples/batch\u size。但是,当从.tfrecords文件中读取数据时,您不知道其中有多少训练示例 要获取num\u train\u示例,您可以: 使用num\u epochs=1设置tf.string\u input\u producer 通过tf.TFRecordRead

学习率衰减函数
tf.train.指数衰减
采用一个
衰减步骤
参数。要每
num\u epochs
降低学习速率,您可以设置
decation\u steps=num\u epochs*num\u train\u examples/batch\u size
。但是,当从
.tfrecords
文件中读取数据时,您不知道其中有多少训练示例

要获取
num\u train\u示例
,您可以:

  • 使用
    num\u epochs=1设置
    tf.string\u input\u producer
  • 通过
    tf.TFRecordReader
    /
    tf.parse\u single\u示例运行此命令
  • 循环并计算它在停止之前产生某些输出的次数
然而,这不是很优雅


有没有一种更简单的方法可以从
.tfrecords
文件中获取培训示例的数量,或者根据年代而不是步骤设置学习率衰减?

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

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

在下面的学习率中

learning_rate = tf.train.exponential_decay(starter_learning_rate, global_step,
                                           100000, 0.96, staircase=True)
通过定义以下函数,可以在所需的时间后更改初学者学习率:

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
注意

全局_步长变量未在以下位置更改:

decayed_learning_rate = starter_learning_rate *
                        decay_rate ^ (global_step / decay_steps)

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

decayed_learning_rate = starter_learning_rate *
                        decay_rate ^ (global_step / decay_steps)