Keras有一个回调函数,当指定的指标达到平台期时会降低学习率,这个回调函数称为ReduceLROnPlateau
。
如何在原生Tensorflow中创建这样的功能?在Tensorflow模型中,是否可以调用Keras的回调函数?还是需要使用原生Tensorflow编写?如果是后者,如何在训练过程中中间调整学习率?
回答:
遗憾的是,Tensorflow本身并不支持这种功能(Keras的回调函数也无法直接使用)。以下是支持的学习率调度技术列表:所有这些都是不同的算法,但都是自包含的,即与训练性能无关。
但好消息是,所有优化器都可以接受学习率的张量。因此,您可以为学习率创建一个变量或占位符,并根据验证性能(您也需要自己计算)来更改其值。以下是来自这个精彩回答的一个示例:
learning_rate = tf.placeholder(tf.float32, shape=[])# ...train_step = tf.train.GradientDescentOptimizer( learning_rate=learning_rate).minimize(mse)sess = tf.Session()# 向每个训练步骤提供不同的学习率值。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})