本文是《TensorFlow从浅入深》系列之第1篇

【TensorFlow】TensorFlow从浅入深系列之一 -- 教你如何设置学习率(指数衰减法)

在训练神经网络时,需要设置学习率(learning rate)控制参数更新的速度 。学习率决定了参数每次更新的幅度 。如果幅度过大,
那么可能导致参数在极优值的两侧来回移动。如优化 函数,在优化中使用的学习率为1,则整个优化过程表4-1所示:

从表格可以看出,无论进行多少轮法代,参数将在 5 和,5 之间摇摆,而不会收敛到一个极小值 。
相反,当学习率过小时,虽然能保证收敛性,但是这会大大降低优化速度 。我们会需要更多轮的法代才能达到一个比较理想的优化效果 。


所以学习率既不能过大,也不能过小 。为了解决设定学习率的问题, TensorFlow提供了 一种更加灵活的学习率设置方法一一指数衰减法

tf.train.exponential_decay函数实现了指数衰减学习率。通过这个函数,可以先使用较大的学习率来快速得到一个比较优的解,然后随着迭代的继续逐步减小学习率,使得模型在训练后期更加稳定。 exponential_decay 函数会指数级地减小学习率,它实现了以下代码的功能:

其中 :

  1. decayed_learning_rate 为每一轮优化时使用的学习率 ;
  2. learning_rate 为事先设定的初始学习率;
  3. decay_rate 为衰减系数;
  4. decay_steps 为衰减速度 。decay_steps 通常代表了完整的使用一遍训练数据所需要的迭代轮数。这个迭代轮数也就是总训练样本数除以每一个 batch 中的训练样本数 。

tf.train.exponential_decay函数可以通过设置参数staircase选择不同的衰减方式。staircase的默认值为False,这时学习率随法代轮数变化的趋势如4-13图灰色曲线所示(连续衰减)。当staircase 的值被设置为True 时,global_stepIdecay_steps会被转化成整数。这使得学习率成为一个阶梯函数(staircase function )。4-13图中黑色曲线显示了阶梯状的学习率。(这种设置的常用场景是每完整地过完一遍训练数据,学习率就减小一次。这可以使得训练数据集中的所有数据对模型训练有相等的作用。当使用连续的指数衰减学习率时,不同的训练数据有不同的学习率,而当学习率减小时,对应的训练数据对模型训练结果的影响也就小了。)


TensorFlow中使用tf.train.exponential_decay实现指数衰减率。

tf.train.exponential_decay格式:

tf.train.exponential_decay(learning_rate, global_, decay_steps, decay_rate, staircase=True/False)

参数说明:

  1. learning_rate:初始学习率
  2. global_step:当前迭代次数
  3. decay_steps:衰减速度
  4. decay_rate:衰减系数,通常介于0-1之间。
  5. staircase=False:衰减方式,(默认值为False,当为True时,(global_step/decay_steps)则被转化为整数) 式。

一段代码来示范如何在 TensorFlow 中使用 tf.train .exponential_decay函数 。

上面这段代码中设定了初始学习率为 0.1 ,因为指定了 staircase=True,所以每训练100轮后学习率乘以 0.96 。

【TensorFlow】TensorFlow从浅入深系列之一 -- 教你如何设置学习率(指数衰减法)相关推荐

  1. 【TensorFlow】TensorFlow从浅入深系列之八 -- 教你学会变量管理

    本文是<TensorFlow从浅入深>系列之第8篇 TensorFlow从浅入深系列之一 -- 教你如何设置学习率(指数衰减法) TensorFlow从浅入深系列之二 -- 教你通过思维导 ...

  2. 【TensorFlow】TensorFlow从浅入深系列之七 -- 教你使用验证数据集判断模型效果

    本文是<TensorFlow从浅入深>系列之第7篇 TensorFlow从浅入深系列之一 -- 教你如何设置学习率(指数衰减法) TensorFlow从浅入深系列之二 -- 教你通过思维导 ...

  3. 【TensorFlow】TensorFlow从浅入深系列之六 -- 教你深入理解经典损失函数(交叉熵、均方误差)

    本文是<TensorFlow从浅入深>系列之第6篇 TensorFlow从浅入深系列之一 -- 教你如何设置学习率(指数衰减法) TensorFlow从浅入深系列之二 -- 教你通过思维导 ...

  4. 【TensorFlow】TensorFlow从浅入深系列之五 -- 教你详解滑动平均模型

    本文是<TensorFlow从浅入深>系列之第5篇 TensorFlow从浅入深系列之一 -- 教你如何设置学习率(指数衰减法) TensorFlow从浅入深系列之二 -- 教你通过思维导 ...

  5. 【TensorFlow】TensorFlow从浅入深系列之四 -- 教你深入理解过拟合问题(正则化)

    本文是<TensorFlow从浅入深>系列之第4篇 TensorFlow从浅入深系列之一 -- 教你如何设置学习率(指数衰减法) TensorFlow从浅入深系列之二 -- 教你通过思维导 ...

  6. 【TensorFlow】TensorFlow从浅入深系列之三 -- 教你如何对MNIST手写识别

    本文是<TensorFlow从浅入深>系列之第3篇 TensorFlow从浅入深系列之一 -- 教你如何设置学习率(指数衰减法) TensorFlow从浅入深系列之二 -- 教你通过思维导 ...

  7. 【TensorFlow】TensorFlow从浅入深系列之十三 -- 教你深入理解模型持久化(模型保存、模型加载)

    本文是<TensorFlow从浅入深>系列之第13篇 TensorFlow从浅入深系列之一 -- 教你如何设置学习率(指数衰减法) TensorFlow从浅入深系列之二 -- 教你通过思维 ...

  8. 【TensorFlow】TensorFlow从浅入深系列之十二 -- 教你深入理解卷积神经网络中的池化层

    本文是<TensorFlow从浅入深>系列之第12篇 TensorFlow从浅入深系列之一 -- 教你如何设置学习率(指数衰减法) TensorFlow从浅入深系列之二 -- 教你通过思维 ...

  9. 【TensorFlow】TensorFlow从浅入深系列之十一 -- 教你深入理解卷积神经网络中的卷积层

    本文是<TensorFlow从浅入深>系列之第11篇 TensorFlow从浅入深系列之一 -- 教你如何设置学习率(指数衰减法) TensorFlow从浅入深系列之二 -- 教你通过思维 ...

最新文章

  1. java-mybaits-00101-基础安装配制
  2. decode函数_decode函数的妙用网友的两个问题解答
  3. 计算机信息管理和计算机及应用,计算机信息管理及应用浅析
  4. MyBatis(四)MyBatis插件原理
  5. Python time.time()方法
  6. 清华源离线安装pytorch_【Pytorch】pytorch安装的时候下载不动
  7. 国内现在web前端高手薪资都拿多少?
  8. Shell.ItemTemplate
  9. Exchange 2010 迁移至Exchange 2013系列之六:创建信任关系并安装ADMT Server
  10. 值-结果参数(socket编程中的函数举例)
  11. 计算机多媒体处理的是什么意思,多媒体处理的是什么信号
  12. LabView制作登录界面
  13. yylabel 加载html,YYLabel的富文本设置
  14. 石头剪刀布程序流程图_民间传统体育游戏 | 石头剪刀布
  15. db_recovery_file_dest与log_archive_dest、log_archive_dest_n
  16. 1000句英语经典口语(3)
  17. 武汉大学计算机学院樊浩南,今年高考光荣榜?谁能告之??谢谢!!
  18. Android2.3触摸屏功能详解
  19. 创新实训(46)——基于ElasticSearch的Completion Suggest实现搜索提示
  20. 重型音乐金属核后期分轨混音教程教学培训(基础+进阶+重型音色调音指南+剪辑+修音+美感设计+实战+母带处理)|MZD Studios

热门文章

  1. 3dvary灯光材质为什么不亮_关机后电脑灯光闪瞎狗眼?在这里关闭它
  2. 计算机老师任课教师寄语,任课老师寄语大全
  3. 计算机辅助功能包括什么,CAD软件是什么?有什么功能?
  4. clone git 要输入yes_GitHub,git与python连接使用
  5. 什么人不在生死簿_地府在孙悟空划掉生死簿以后,因为什么原因不组织重写?...
  6. 比特币全节点(bitcoind) eth 全节点
  7. 位运算之二进制中1的个数
  8. Java第二次作业第一题
  9. Arduino 002 --- 在Ubuntu(Linux) 中搭建Arduino开发环境
  10. 配置Servlet3.0的方式和注意事项!