学习率衰减函数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
文件中获取训练样例的数量,或者根据时期而非步骤设置学习率衰减?
答案 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)
我建议您根据培训或评估损失的变化设置学习率衰减。如果损失正在振荡,您可以降低学习率。在培训开始之前,您几乎无法预测应该从哪个时期或步骤减少它。