您的位置:首页 > 理论基础 > 计算机网络

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

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

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个样本----------

前向计算中...

反向计算中...

训练成功,正在进行检验

仿真计算中

仿真计算中

仿真计算中

仿真计算中

仿真计算中

仿真计算中

训练成功,误差为: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型非线性神经元,输出不会太接近极限

如下面输入的 数据分布



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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: