TensorFlow中学习率[通俗易懂]

TensorFlow中学习率[通俗易懂]学习率学习率属于超参数。学习率决定梯度下降速度的快慢,学习率越大,速度越快;学习率越小,速度越慢。如果学习率过大,很可能会越过最优值;反而如果学习率过小,优化的效率可能过低,长时间算法无法收敛。所以学习率对于算法性能的表现至关重要。指数衰减学习率指数衰减学习率是在学习率的基础上增加了动态变化的机制,会随着梯度下降变化而动态变化tf.train.expo…

大家好,又见面了,我是你们的朋友全栈君。

学习

学习率属于超参数。学习率决定梯度下降速度的快慢,学习率越大,速度越快;学习率越小,速度越慢。如果学习率过大,很可能会越过最优值;反而如果学习率过小,优化的效率可能过低,长时间算法无法收敛。所以学习率对于算法性能的表现至关重要。

 

 

 

指数衰减学习率

 

指数衰减学习率是在学习率的基础上增加了动态变化的机制,会随着梯度下降变化而动态变化

 

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

 

  • learn_rate:事先设定的初始学习率
  • global_step:训练轮数
  • decay_steps:衰减速度。staircase=True:代表了完整的使用一遍训练数据所需要的迭代轮数(=总训练样本数/每个batch中的训练样本数)
  • decay_rate:衰减系数
  • staircase:默认为False,此时学习率随迭代轮数的变化是连续的(指数函数);为 True 时,global_step/decay_steps 会转化为整数,此时学习率便是阶梯函数

步骤:

  1. 首先使用较大学习率(目的:为快速得到一个比较优的解);
  2. 然后通过迭代逐步减小学习率(目的:为使模型在训练后期更加稳定);

模板:


global_step = tf.Variable(0)

 

learning_rate = tf.train.exponential_decay(0.1, global_step, 1, 0.96, staircase=True)     #生成学习率

 

learning_step = tf.train.GradientDescentOptimizer(learning_rate).minimize(....., global_step=global_step)  #使用指数衰减学习率

 

实例代码:

TRAINING_STEPS = 100
global_step = tf.Variable(0)
LEARNING_RATE = tf.train.exponential_decay(
    0.1, global_step, 1, 0.96, staircase=True)

x = tf.Variable(tf.constant(5, dtype=tf.float32), name="x")
y = tf.square(x)
train_op = tf.train.GradientDescentOptimizer(LEARNING_RATE).minimize(
    y, global_step=global_step)

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    for i in range(TRAINING_STEPS):
        sess.run(train_op)
        if i % 10 == 0:
            LEARNING_RATE_value = sess.run(LEARNING_RATE)
            x_value = sess.run(x)
            print("After %s iteration(s): x%s is %f, learning rate is %f." %
                  (i + 1, i + 1, x_value, LEARNING_RATE_value))

 

关于global_step的探究:

  • global_step – 用于衰减计算的全局步骤。 一定不为负数。
  • 喂入一次 BACTH_SIZE 计为一次 global_step
  • 每间隔decay_steps次更新一次learning_rate值

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/137629.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月1日 下午5:46
下一篇 2022年6月1日 下午6:00


相关推荐

  • 不要再叫他们「爸爸」了,一声「孙子」送给天下甲方!

    哈喽狗子们好 最近网上有个哥们吐槽甲方火了! 他说甲方其实不是「爸爸」 而是「孙子」…… 乍一听甲方可能就不满意了 但你仔细一想就会点头同意了 因为真的有理…

    2021年6月21日
    158
  • 解决Ubuntu Pycharm无法输入中文

    解决Ubuntu Pycharm无法输入中文解决 UbuntuPychar 无法使用中文输入法百度有很多解决 Pycharm 无法使用中文输入法的问题 但我试了很多中方法 各种配置和重启都不能解决 UbuntuPychar 无法使用中文输入法的问题 后来发现清除 Pycharm 的缓存就可以正常输入中文了 清除 Pycharm 的缓存的方法 1 删除 home dm PyCharm2018 1 system caches 2 重启 Pycharm 即可正常使用中文输入法了

    2026年3月17日
    2
  • MariaDB安装教程

    MariaDB安装教程注:从MariaDB10.4.3开始,不再提供预构建的数据目录,并且用户需要运行mysql_install_db.exe来创建数据目录1、解压到自定义路径E:\MariaDB\mariadb-10.5.4-winx642、将其中的bin加入path系统环境路径3、用管理员方式打开cmd,并打开bin目录4、输入mysql_install_db.exe–datadir=E:\MariaDB\mariadb-10.5.4-winx64\data–service=MyMar..

    2022年6月14日
    32
  • SqlServer时间与字符串相互转换[通俗易懂]

    SqlServer时间与字符串相互转换[通俗易懂]convert(目标类型[datatime/varchar],’输入内容'[时间/字符串],格式); –字符串转为时间类型(当表字段为时间格式时使用) –1.Style=101时,表示日期字符串为:mm/dd/yyyy格式SELECTCONVERT(datetime,’11/1/2003′,101)–结果:2003-11-0100:00:00.000应用:…

    2022年10月8日
    4
  • 华硕 X201E 拆机

    华硕 X201E 拆机每次笔记本拆机,装好之后,就会发现多了几个螺丝,忘了从哪拧下来了下面记录下华硕X201E清灰拆机过程

    2022年6月27日
    39
  • JavaScript 引擎性能比较之一SpiderMonkey[通俗易懂]

    JavaScript 引擎性能比较之一SpiderMonkey[通俗易懂]1.下载https://people.mozilla.org/~sstangl/mozjs-31.2.0.rc0.tar.bz2bunzip2mozjs-31.2.0.rc0.tar.bz2tarxvfmozjs-31.2.0.rc0.tar2.构建https://developer.mozilla.org/en-US/docs/Mozilla/Projects/

    2022年10月8日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号