• tensorflow笔记之滑动平均模型


    tensorflow使用tf.train.ExponentialMovingAverage实现滑动平均模型,在使用随机梯度下降方法训练神经网络时候,使用这个模型可以增强模型的鲁棒性(robust),可以在一定程度上提高模型在测试数据集上的表现。

    滑动平均模型为每个变量维护一个影子变量,其初始值是变量的初始值,每次变量更新时,影子变量的值会更新为:

    shadow_variable = shadow_variable * decay + (1-decay) * variable

    其中shadow_variable为影子变量,variable为初始变量,decay为衰减率。

    decay决定了模型更新的速度,decay越大,模型跟新越慢,越稳定。实际工作中,decay一般设置为非常接近1的数(0.99或0.999之类),为了在训练初期加快更新速度,可以提供num_steps参数,提供这个参数后,decay的取值变为:

    min(decay, (1+num_step)/(10+num_step))

    num_step表示实际的训练步数。

    如果提供了num_steps那么在num_step还比较小的时候,min()会取到右边比较小的部分,也就是有一个比较小的decay,这个时候模型更新会很快,当step增大时,模型更新速度会逐渐降低。

    在应用滑动平均模型后,并不会改变变量的值,但是会维护一个影子变量来记录其滑动平均值,获取变量的滑动平均值实际上就是获取变量的影子变量的值,影子变量的值是当前值和更新后的值之间的一个值,相当与限制参数的更新速度,让更新比较缓慢,比较稳妥,但是在训练初期会导致更新比较慢,所以才有提供num_steps参数使之在训练初期更新比较快。

  • 相关阅读:
    [Java学习] Java包装类、拆箱和装箱详解
    [Java学习] Java多态和动态绑定
    [Java学习] Java继承的概念与实现
    [Java学习] Java super关键字
    [Java代码] Java是自学好还是参加培训班好?
    [Java学习] Java字符串(String)
    [Java学习] Java方法重载
    [.NET源码] EF的增删改查
    C#面向服务WebService从入门到精通
    CoordinatorLayout-带图片伸缩工具栏
  • 原文地址:https://www.cnblogs.com/buxizhizhoum/p/8301284.html
Copyright © 2020-2023  润新知