跑实验的时候出现时间过长的情况,如下图的情况:
猜测原因可能是参数设置的问题,所以将batch_size由原来的的64调整为32,运行时间确实缩小了一倍:
举例子(个人理解):
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则不衰减