Tensorflow学习系列一:对于Tensorflow训练模型的理解

[Tensorflow学习系列]Tensorflow学习一 :对于Tensorflow训练模型的理解


本文是Tensorflow学习系列之第一篇


深度学习之TensorFlow构建训练模型

1.指数衰减的学习率设置
2.正则化避免过拟合
3.滑动平均使得最终模型更健壮


学习率的设置

在训练神经网络时,通过设置学习率(learning rate)来控制参数更新幅度,对于学习率而言,过小将会导致收敛过慢,导致训练时间过长;幅度过大,将会导致在最优解附近来回震荡。

学习率衰减


学习率公式:

a = 1 1 + ( d e c a y − r a t e ) ∗ ( e p o c h − n u m ) ∗ a 0 a=\frac{1}{1+(decay-rate)*(epoch-num)}*a_0 a=1+decayrateepochnum1a0

验证:假设初始学习率为 a 0 a_0 a0=0.2,衰减率为decay_rate=1,epoch_num为代数,根据公式推论出:

Epoch_num a a a
1 a 1 = 0.2 1 + 1 ∗ 1 = 0.1 a_1=\frac{0.2}{1+1*1}=0.1 a1=1+110.2=0.1
2 a 1 = 0.2 1 + 1 ∗ 2 = 0.067 a_1=\frac{0.2}{1+1*2}=0.067 a1=1+120.2=0.067
3 a 1 = 0.2 1 + 1 ∗ 3 = 0.05 a_1=\frac{0.2}{1+1*3}=0.05 a1=1+130.2=0.05
4 a 1 = 0.2 1 + 1 ∗ 4 = 0.04 a_1=\frac{0.2}{1+1*4}=0.04 a1=1+140.2=0.04

根据上述公式,你的学习率呈递减趋势。

如果你想用学习率衰减,要做的是要去尝试不同的值,包括超参数a_0,以及超参数衰退率,找到合适的值。如果epoch次数太少,网络有可能发生欠拟合,过多可能导致过拟合。

关于epoch,batch_size等不懂的可以看一下这篇文章tensorflow学习笔记–深度学习中的epochs,batch_size,iterations详解

简单举例:
训练集有1000个样本,batchsize=10,那么:
训练完整个样本集需要:100次iteration,1次epoch。

指数衰减

tf.train.exponential_decay(learning_rate, global_step, decay_steps, decay_rate, staircase=False, name=None)


tf.train.exponential_decay函数实现了指数衰减学习率。通过这个函数,可以先使用较大的学习率来快速得到一个比较优的解,然后随着迭代的继续逐步减小学习率,使得模型在训练后期更加稳定。 exponential_decay 函数会指数级地减小学习率.
如果staircase=True,那就表明每decay_steps次计算学习速率变化,更新原始学习速率,如果是False,那就是每一步都更新学习速率。

计算公式:
decayed_learning_rate = learning_rate * decay_rate ^ (global_step / decay_steps)

#tf.train.exponential_decay(learning_rate, global_step, decay_steps,decay_rate, staircase=False, name=None)
#红色为False,蓝色为True
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
learning_rate = 0.1  # 初始学习速率时0.1
decay_rate = 0.96  # 衰减率
global_steps = 1000  # 总的迭代次数
decay_steps = 100  # 衰减次数
global_ = tf.Variable(tf.constant(0))
c = tf.train.exponential_decay(learning_rate, global_, decay_steps, decay_rate, staircase=True)
d = tf.train.exponential_decay(learning_rate, global_, decay_steps, decay_rate, staircase=False)
T_C = []
F_D = []
with tf.Session() as sess:
   for i in range(global_steps):
       T_c = sess.run(c, feed_dict={global_: i})
       T_C.append(T_c)
       F_d = sess.run(d, feed_dict={global_: i})
       F_D.append(F_d)
plt.figure(1)
plt.plot(range(global_steps), F_D, 'r-')
plt.plot(range(global_steps), T_C, 'b-')
# 关于函数的值的计算0.96^(3/1000)=0.998
plt.show()

在这里插入图片描述代码有看不懂的可以参考一下我另一篇博文, tensorflow运行机制

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值