zoukankan      html  css  js  c++  java
  • 训练中的基础技巧(数据处理,验证集设置,参数处理)

    训练中的基础技巧(数据处理,验证集设置,参数处理)

    首先,对于数据
    我们需要统一其量纲。通用的做法是数据标准化。
    就是让一个样本内的均值为0,不同样本类内方差尽量一致
    然后就是为标签做one-hot encoding



    对于权重
    1.随机初始化
    2.均值为0,且尽量不同意义的权重间尽量有一致的方差

    这是因为初始化对最后的结果实际上很重要,如果我们有机器学习基础,我们就知道。而对于神经网络这样一个较复杂的模型,我们并不知道初始化在哪里比较合适,我们想尽量避免初始化对模型产生较大影响,就采用随机初始化的方法较为合适。
    而均值为0的道理,还记得我们之前解析神经网络中的激励函数嘛,如果采用sigmoid这样的函数,均值偏大或者偏小都会导致更新较慢。

    1.梯度方向往往受到解平面某点附近的变化趋势影响,不见得会向着目标局部极小值收敛。所以在我们训练过程中会出现错误率是螺旋式下降的。那么对于这个问题,我们可以这样子解决。让
    新的梯度方向=0.9×前一个梯度方向+0.1新的梯度方向
    得到新的梯度方向。当然这个参数是可以变的

    2.而学习速率这里我们直接上一张图
    训练中的基础技巧(数据处理,验证集设置,参数处理)

    可以看到,虽然大的学习速率比小的更快收敛,但是大的也更加快地到达了‘平原区域’
    这是因为学习速率高很可能进不去小的‘坑’,而小坑下面连接的可能是更低的谷底
    所以小的学习速率总是可以在最终收敛结果上比大的要好。但是如果一直采用小学习速率,在一开始的下降过程又太慢了。这时候我们想要学习率在step增加时逐渐减小。

    我以上说的这两点被总结起来叫做AdaGD,自适应梯度下降。tf中为我们提供的就是它,所以我们不需要关心学习速率和梯度方向的问题。当然,如果到很熟练需要定制的最优化方法时,可以去改动。但目前还用不到。

    对于训练集、验证集、测试集
    我这里的观点是,在参加竞赛之类的不需要我们自己设置测试集,而发paper时需要设置小部分测试集。

    我以上说的这两点被总结起来叫做AdaGD,自适应梯度下降。tf中为我们提供的就是它,所以我们不需要关心学习速率和梯度方向的问题。当然,如果到很熟练需要定制的最优化方法时,可以去改动。但目前还用不到。

    对于训练集、验证集、测试集
    我这里的观点是,在参加竞赛之类的不需要我们自己设置测试集,而发paper时需要设置小部分测试集。

  • 相关阅读:
    struts2中<s:select>标签的使用
    正则表达式(括号)、[中括号]、{大括号}的区别小结
    解读邮箱正则表达式:^w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$
    Struts2国际化-getText()方法
    Eclipse的Tomcat热部署,免重启的方法
    hdu 5056Boring count
    纸板上的虚拟现实和代码中的Cardboard
    OC-Protocol实现业务代理
    UVA 11237
    mysql相关日志汇总
  • 原文地址:https://www.cnblogs.com/is-Tina/p/7724801.html
Copyright © 2011-2022 走看看