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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ubuntu的ssh连不上_ubuntu网络连接没有显示出来

    ubuntu的ssh连不上_ubuntu网络连接没有显示出来之前发在其他的博客上的,现在移动以下位置之前的链接:http://blog.chinaunix.net/uid-69944074-id-5831708.html(原创文章)使用Ubuntu,经常需要需要SSH远程连接,但是有时候会出现问题,难以捉摸,下面参考别人的,在结合自己的尝试总结下吧。服务器配完ubuntu系统以及LNMP环境以后,想用WINSCP远程登录,就需要开启SSH服务才能支持。SSH服务分为客户端和服务器。顾名思义,我想用putty远程登录Ubuntu服务器,所以需要安装SSH s

    2022年8月8日
    8
  • pycharm彻底卸载_pycharm如何更新

    pycharm彻底卸载_pycharm如何更新用过Windows系统的朋友应该都体验过被系统强制更新的烦恼,经常玩电脑玩着玩着就觉得网速很慢或者电脑变卡了,打开设置一看,发现是Windows系统正在更新。然后当关机的时候,选项变成了”更新并关机”和”更新并重启”,但是它更新的速度还很慢。更新完成之后打开电脑,很多人也都遇到过蓝屏或者卡死机的情况,至于原因,不得而知。实际上系统设置和控制面板里面都有暂停更新选项,但是那个时效只有一个月,之后又会…

    2022年8月25日
    4
  • STL空间配置器解析和实现

    1.一级空间配置器实现1.1接口1.2实现2.二级空间配置器实现2.1接口2.2实现3.配置器标准接口4.测试

    2021年12月28日
    53
  • 优先队列的数据结构_低优先级队列一天只能一场

    优先队列的数据结构_低优先级队列一天只能一场目录一.PriorityQueuePriorityQueue简介继承关系PriorityQueue示例二.Comparable比较器Compara接口三.Comparator比较器Comparator接口四.底层原理一.PriorityQueuePriorityQueue简介PriorityQueue,即优先级队列。优先级队列可以保证每次取出来的元素都是队列中的最小或最大的元素<Java优先级队列默认每次取出来的为最小元素&gt.

    2022年9月23日
    1
  • 0xC0000005: 写入位置 0x00000000 时发生访问冲突的解决办法「建议收藏」

    0xC0000005: 写入位置 0x00000000 时发生访问冲突的解决办法「建议收藏」我是新手,其实对这个东西我自己也不是很清楚,当更不可能将有的情况都列举出来,在这里我只是将自己见到的,可能的情况做一个汇总:上面的意识就是你吧值付给了不该赋给的变量,或者说你把值付给了不能付给的变量(或者常量)(1)最简单也最直接的错误可能就是scanf()的问题,我们都知道输入的时候都是scanf(“%格式”,&变量),那么除了字符串(可要&,可不要)之外,所有的输入都需要&,如果你

    2022年10月3日
    1
  • acwing-240. 食物链(并查集+边权值)[通俗易懂]

    acwing-240. 食物链(并查集+边权值)[通俗易懂]动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形。A 吃 B,B 吃 C,C 吃 A。现有 N 个动物,以 1∼N 编号。每个动物都是 A,B,C 中的一种,但是我们并不知道它到底是哪一种。有人用两种说法对这 N 个动物所构成的食物链关系进行描述:第一种说法是 1 X Y,表示 X 和 Y 是同类。第二种说法是 2 X Y,表示 X 吃 Y。此人对 N 个动物,用上述两种说法,一句接一句地说出 K 句话,这 K 句话有的是真的,有的是假的。当一句话满足下列三条之一时,这句

    2022年8月10日
    15

发表回复

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

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