tf.train.exponential_decay()
功能:实现指数衰减学习率;先使用一个较大的学习率来快速得得到一个比较优的解,然后随着迭代的继续逐步减小学习率。
例子:
import tensorflow as tf;
import numpy as np;
#step1: 创建数据类型
#定义占位符;运行时必须传入值
x = tf.placeholder(tf.float32, shape=[None, 1], name='x')
y = tf.placeholder(tf.float32, shape=[None, 1], name='y')
#创建变量w;其初始化值为0.0
w = tf.Variable(tf.constant(0.0))
#设置存储训练轮数的变量
#意思是第一次训练、第二次训练。。。
global_steps = tf.Variable(0, trainable=False)
#设置指数衰减学习率
#tf.train.exponential_decay(learning_rate, global_steps, decay_steps, decay_rate, staircase=True/False):
#实现指数衰减学习率;先使用一个较大的学习率来快速得得到一个比较优的解,然后随着迭代的继续逐步减小学习率。
#learning_rate-学习率
#global_steps-训练轮数
#decay_steps-完整的使用一遍训练数据所需的迭代轮数;=总训练样本数/batch
#decay_rate-衰减速度
#staircase-衰减方式;=True,那就表明每decay_steps次计算学习速率变化,更新原始学习速率;=alse,那就是每一步都更新学习速率。
learning_rate = tf.train.exponential_decay(0.1, global_steps, 10, 0.5, staircase=False)
#step2:定义损失函数
#tf.pow-求幂函数
loss = tf.pow(w*x-y, 2)
#step3: 定义优化函数
train_step = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss, global_step=global_steps)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for i in range(10):
sess.run(train_step, feed_dict={x:np.linspace(1,2,10).reshape([10,1]),\
y:np.linspace(1,2,10).reshape([10,1])})
print(sess.run(learning_rate))
print(sess.run(global_steps))
结果:
0.0933033
1
0.0870551
2
0.0812252
3
0.0757858
4
0.0707107
5
0.0659754
6
0.0615572
7
0.0574349
8
0.0535887
9
0.05
10