数学之路(3)-机器学习(3)-机器学习算法-神经网络[11]

2020腾讯云双十一活动,全年最低!!!(领取3500元代金券),
地址https://cloud.tencent.com/act/cps/redirect?redirect=1074

【阿里云】双十一活动,全年抄底价,限时3天!(老用户也有),
入口地址https://www.aliyun.com/1111/home

推荐:数学之路(3)-机器学习(3)-机器学习算法-神经网络[13]

[不用重复造轮子,我们可以直接使用多层感知器的库,目前多层感知器的库较多,我们选择纯python库实现的神经网络库-neurolab,该库基于LGPL协议,下载地址 为:https://cod

多层感知器的代码,需要一个比较复杂的调试过程,不过也有一些方法来加快这一速度,其中有几个地方要注意:

1、输入层、输出层、中间层的学习率和动量参数不能一样,

2、3个层的权值策略不能一样

   输入层的权值的最好效果是能将相差较大的输入样本,输出成分布不能太接近饱和的输出

关于权值初始化的问题,可以考虑 Nguyen-Widrow algorithm,这也是matlab的权值矩阵初始化策略

   采用tanh函数,要意识到,它的输出极限是[-a,+a]

3、在输出层外加上一个硬限幅层,保证输出为需要的结果

硬限幅层要灵活,不一定是下面这种形式

if v>=0:

       return 1

else:

      return 0

因为我们的输出值只有2个,所以可以暂时先设为这种形式,以后进行改进:


def o_func(myy):
        myresult=[]
        for i in xrange(0,len(myy)):
                mean=np.mean(myy)
                if myy[i]>mean:
                        myresult.append(1.0)
                else:
                        myresult.append(0.0)
        return np.array(myresult)





本博客所有内容是原创,未经书面许可,严禁任何形式的转载

http://blog.csdn.net/u010255642



最后,总结一下,多层感知器网络是门艺术,不能说是一个非常严谨的科学,带有随机性,虽然有梯度下降,动量调整的数学基础

下面是对下面这组输入 数据进行训练,最后对未知样本进行仿真

x = [[4,11],[7,340],[10,95],[3,29],[7,43],[5,128]]
d =[[1,0],[0,1],[1,0],[0,1],[1,0],[0,1]]

结果如下:

.......

......

-------开始第33次训练---------

-------开始第1个样本----------

前向计算中...

反向计算中...

-------开始第2个样本----------

前向计算中...

反向计算中...

-------开始第3个样本----------

前向计算中...

反向计算中...

-------开始第4个样本----------

前向计算中...

反向计算中...

-------开始第5个样本----------

前向计算中...

反向计算中...

-------开始第6个样本----------

前向计算中...

反向计算中...

训练成功,正在进行检验

仿真计算中

仿真计算中

仿真计算中

仿真计算中

推荐:数学之路(3)-机器学习(3)-机器学习算法-神经网络[6]

[梯度下降法一、基本概念梯度下降法,就是利用负梯度方向来决定每次迭代的新的搜索方向,使得每次迭代能使待优化的目标函数逐步减小。梯度下降法是2范数下的最速下降法。

仿真计算中

仿真计算中

训练成功,误差为:0.000000

样本:4===11 => 

仿真计算中

[ 1.  0.]

=====正确目标值=====

[1, 0]

样本:7===340 => 

仿真计算中

[ 0.  1.]

=====正确目标值=====

[0, 1]

样本:10===95 => 

仿真计算中

[ 1.  0.]

=====正确目标值=====

[1, 0]

样本:3===29 => 

仿真计算中

[ 0.  1.]

=====正确目标值=====

[0, 1]

样本:7===43 => 

仿真计算中

[ 1.  0.]

=====正确目标值=====

[1, 0]

样本:5===128 => 

仿真计算中

[ 0.  1.]

=====正确目标值=====

[0, 1]

测试值:9.000000===80.000000 

仿真计算中

[ 1.  0.]

正确目标值:[1,0]

测试值:6.500000===272.000000 

仿真计算中

[ 0.  1.]

正确目标值:[0,1]

>>>



同时因为输入数据五花八门,在训练之前要对数据进行预处理,通过预处理权值矩阵使其数值不能过大或过小,这样能较好得保证,

在随后的训练中通过S型非线性神经元,输出不会太接近极限

如下面输入的 数据分布



通过调整后转换成下面的均匀分布,将更有助于后面的训练




推荐:数学之路(3)-机器学习(3)-机器学习算法-神经网络[1]

[二、机器学习算法(一)神经网络1、感知器Rosenblatt感知器建立在一个非线性神经元上,神经元模型的求和节点计算作用于突触上的输入的线性组合,同时结合外部作用的偏置。

相关推荐