[算法]神经网络的使用

  • ①创建计算图:由于神经网络类似于脚本编程,所以这里的计算图类似一个程序的逻辑图,根据逻辑图来进行对应的计算脚本的编码。
  • ②有了图之后,就要把计算的图实现成脚本代码了。一般需要定义:输入层、输出层以及隐藏层,然后还需要定义权重、偏置等模型参数。构成一个完整的计算逻辑:这里的输入层一般和数据特征有关,比如一个分类问题,有20个特征值,那么输入层一般就会定义20个神经元。而如果是想要分成5类,那么输出层就是5个神经元(这个都有具体的函数提供进行定义,其实只是调用一下函数,提供一些入参即可),当然还需要设置各个特征值的权重、偏置以及梯度下降法中所需要定义的内容,例如下降的步长等。注意,这里的权重和偏置一般是通过训练得到的,所以一般初始化的时候,给一组随机值即可。这里,输入和输出其实差不多都是固定死的,输入就是和特征数量相关,而输出和需要分的类别相关,唯一可以设计的就是中间的隐藏层了,隐藏层其实是对数据做一次空间维度转换,从而使得在平面上很难进行线性划分的数据,在高纬度空间中变成可以被划分的。类似支持向量机算法的原理。通过核函数将平面二维空间映射到更高维度的空间中,最后再映射回去的一个过程。这个就是建立神经网络的前面两个步骤,即做出计算图+设计出中间的隐藏层。
  • ③最最基础的全连接神经网络的两个要素(事实上,卷积和递归的网络基本上也是针对这种类似的过程来实现的,即这个是基础框架),其中隐藏层的层数和数量是比较关键的设计因素之一,但是往往也有一些限制(主要是由于目前的随机梯度下降算法在传递层数过多后,容易出现梯度弥散或者爆炸的现象,导致网络的训练结果不好。这个就好像我们在造一个建筑之前首先需要画一张设计图纸一样的道理,在网络中,设计这个图纸,其中关键的因素就是隐藏层的相关参数。一般来说需要用到多少隐藏层和需要分类的具体的问题有关系,并不是完全固定的,根据具体的问题,从小到大进行尝试,看看随着数量或者层数的增加,整体拟合的准确率是否有提升,如果没有一般来说,要么就是超过了当前的BP算法的可以容忍的层数,或者超过了问题本身可以确定的部分的准确率了。由于神经网络解决的实际上都是一些现实实际存在的问题,这就会导致难免存在一些问题很难被非常完美的,像以前的逻辑函数那样的方式实现100%的完美实现,那种其实是不太现实的。这点需要注意。一般来说,这块尝试的过程也是神经网络的魅力所在,蕴藏着太多的可能性,调整层数、每层神经元个数,调整激活函数等,都有可能提升神经网络的准确性。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值