zoukankan      html  css  js  c++  java
  • 单隐层神经网络调参经验总结

    在学习了吴恩达老师的单隐层神经网络之后,用python编写了一个单隐层神经网络(github链接)在实际应用发现神经网络的参数很多,之间存在耦合关系,在这里总结一些自己的经验。

    测试样例

    首先说一下自己的测试样例。我的测试样例有两组,都是二分类问题。第一组,由中心在(1,1)和(2,2),方差都为0.4的正态分布构成,每个分布都有100个采样点,中心在(1,1)的采样点标记为0,中心在(2,2)标记为1。很明显这是一个简单的二分类问题。第二组有三个分布,中心在(1,1),(2,2),(3,3)。其中中心在(1,1)和(3,3)的采样点各有50个,标记为0。中心在(2,2)的采样点有100个,标记为1。这是一个非线性分类问题

    程序功能

    然后说明一下我的程序实现的功能。这个程序只针对单隐层神经网络,但是各层神经结点数据可变,且每层结点的激活函数可选。目前实现了sigmoid函数,tanh函数,ReLU函数和leaky ReLU函数。

    可调参数

    那么对于这样的测试环境与样例,可以调整的参数有,隐藏层神经节点数目,每次改进的步进常数,目标准确率,最大迭代次数,隐藏层的激活函数。

    对于隐藏层的神经节数目,刚开始预估样本空间的复杂程度,设置尽可能少的数目。例如对于一个线性可分的问题,两个就可以了。至于再复杂的可以安排8个或者以上。

    建议将步进常数设定为0.01或者更小,防止参数不收敛。

    目标准确率一开始可以设定为0.9

    迭代次数可以设置为1000或者更高,这个要结合样本量具体考量。总之在可以接受的时间范围内,将迭代次数设置的大一点。

    我个人建议先使用tanh函数作为隐藏层的激活函数。虽然ReLU函数收敛快,但如果步进常数或者隐藏层结点数目一开始设置不好,很容易产生震荡,无法收敛。相反tanh函数就稳定一点。

    调整顺序

    在调参中,我们先调整步进常数。就是观察成本函数下降的速率,修正步进常数,一方面快速下降,另一方面防止不收敛。调整合适之后再调整隐藏层结点数目。逐渐增加,准确率理论上应该是先增大,后减小。找到合适的结点数目。最后逐步调高目标准确率。若一切稳定可以将激活函数换为ReLU函数在细调一下。

  • 相关阅读:
    2015/12/26 十六、 八 、二 进制转十进制
    2015/12/25 ① 图灵测试 ② 安装jdk出现的问题 ③ 配置环境变量
    java如何产生随机数
    二分查找法
    冒泡排序法
    计算阶乘
    九九乘法小练习
    数组循环语句练习
    经典循环例题练习
    如何用循环语句输出一个三角形
  • 原文地址:https://www.cnblogs.com/sgdd123/p/8025205.html
Copyright © 2011-2022 走看看