TensorFlow中学习率衰减的简单笔记

跑实验的时候出现时间过长的情况,如下图的情况:TensorFlow中学习率衰减的简单笔记
猜测原因可能是参数设置的问题,所以将batch_size由原来的的64调整为32,运行时间确实缩小了一倍:

TensorFlow中学习率衰减的简单笔记

举例子(个人理解):
iteraions = 100000,batch_size=32,dataset = 890

decay_steps=10000
learning_rate=0.1
decay_rate=0.9
作用:每次经过10000次迭代,学习率变为原来的0.9

dataset /batch_size=13
i = 1-100000(总训练次数)
j = 1 - 13
作用:从dataset中随机取32张图片,一共取13次

decay_steps/13=76
作用:每次经过76次迭代,学习率更新一次,变为原来的0.9

下述具体细节参考博客:https://www.cnblogs.com/baby-lily/p/10962574.html

在TensorFlow的优化器中, 都要设置学习率。学习率是在精度和速度之间找到一个平衡:

学习率太大,训练的速度会有提升,但是结果的精度不够,而且还可能导致不能收敛出现震荡的情况。

学习率太小,精度会有所提升,但是训练的速度慢,耗费较多的时间。

因而我们可以使用退化学习率,又称为衰减学习率。它的作用是在训练的过程中,对学习率的值进行衰减,训练到达一定程度后,使用小的学习率来提高精度。

在TensorFlow中学习率衰减的方法:tf.train.exponential_decay()

附代码:

import tensorflow as tf
import numpy as np

global_step = tf.Variable(0, trainable=False)
initial_learning_rate = 0.1

learning_rate = tf.train.exponential_decay(initial_learning_rate,
                                           global_step=global_step,
                                           decay_steps=10,
                                           decay_rate=0.5)

opt = tf.train.GradientDescentOptimizer(learning_rate)
add_global = global_step.assign_add(1)

with tf.Session() as sess:
    tf.global_variables_initializer().run()
    print(sess.run(learning_rate))

    for i in range(50):
        g, rate = sess.run([add_global, learning_rate])
        print(g, rate)

参数如下:

learning_rate, 初始的学习率的值

global_step, 迭代步数变量

decay_steps, 带迭代多少次进行衰减

decay_rate, 迭代decay_steps次衰减的值

staircase=False, 默认为False,为True则不衰减

上一篇:js 查看浏览器缩放比例,不是100% 则给出提示


下一篇:从零开始学python数据分析与挖掘第2章学习笔记