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

针对上节的风景图片分类,我们也可以使用多层感知器的神经网络

我们将样本图片分块提取特征,然后这些特征做为样本所属类的输入,训练的输出目标我们使用下面的矩阵来表示

[0,0,1]

[0,1,0]

[1,0,0]

第一行表示第一类,以此类推,最后一行表示最后一类

本博客所有内容是原创,如果转载请注明来源

http://blog.csdn.net/myhaspl/


整理输入样本与输出目标的代码如下:

#x和d样本初始化
train_x =[]
d=[]
sp_d=[]
sp_d.append([0,0,1])
sp_d.append([0,1,0])
sp_d.append([1,0,0])
#读取图片
for ii in xrange(1,4):
    for jj in xrange(1,3):
        fn='p'+str(ii)+'-'+str(jj)+'.jpg'
        pictz=readpic(fn)
        train_x.append(pictz)
        d.append(sp_d[ii-1])


myinput=np.array(train_x) 
mytarget=np.array(d)
mymax=np.max(myinput)
训练完成,我们用样本和未知图片进行测试

    print u'\n训练神经网络完毕'        
    pl.subplot(111)
    pl.plot(err)  
    pl.xlabel('Epoch number')
    pl.ylabel('error (default SSE)')
    print u"对样本进行测试"
    simd= bpnet.sim(myinput)
    mysimd=getresult(simd)
    print mysimd
    print u"进行仿真"
    testpictz=np.array([readpic('ptest1.jpg')])
    simtest=bpnet.sim(testpictz) 
    mysimtest=getresult(simtest)
    print mysimtest
    testpictz=np.array([readpic('ptest2.jpg')])
    simtest=bpnet.sim(testpictz)
    mysimtest=getresult(simtest)
    print mysimtest
    testpictz=np.array([readpic('ptest3.jpg')])
    simtest=bpnet.sim(testpictz)
    mysimtest=getresult(simtest)
    print mysimtest    
    pl.show()
另外,为了保证神经网络的泛化性,我们将训练的目标误差率设得较高,为0.2,另外对仿真输出结果通过一个函数运算得出最终的输出结果,这个函数的功能就是取输出矩阵的3个元素最大值,输出最大值所在的位置,因为仿真输出结果数组索引以0为起点,所以将其加上1后即为图片属于的类型。

def getresult(simjg):
    jg=[]
    for j in xrange(0,len(simjg)):
        maxjg=-2
        nowii=0
        for i in xrange(0,len(simjg[0])):
            if simjg[j][i]>maxjg:
                maxjg=simjg[j][i]
                nowii=i
        jg.append(len(simjg[0])-nowii)
    return jg

泛化性指对一个映射给出一定的必要的训练样本训练后,网络能否对样本以外的样本给出较为准确的预测,泛化能力也就是神经网络用于对未知数据预测的能力。

运行后,效果不错,泛化能力也不错。

>>> runfile(r'I:\book_prog\ann_bppicsb1.py', wdir=r'I:\book_prog')
http://blog.csdn.net/myhaspl
myhaspl@qq.com


正在处理中


正在建立神经网络


训练神经网络中...
Epoch: 5; Error: 1.0814420868;
Epoch: 10; Error: 0.441414239355;
Epoch: 15; Error: 0.282786951037;
Epoch: 20; Error: 0.265960631109;
Epoch: 25; Error: 0.264202738281;
Epoch: 30; Error: 0.2235438277;
The goal of learning is reached


训练神经网络完毕
对样本进行测试
[1, 1, 2, 2, 3, 3]
进行仿真
===ptest1.jpg===
[[-0.49165957  0.23890683  0.98145658]]
[1]
===ptest2.jpg===
[[ 0.6871799   0.97719221  0.63006021]]
[2]
===ptest3.jpg===
[[ 0.76380555  0.35239096  0.44558729]]
[3]
>>> 

下面是该 神经网络的误差训练效果,我们调用了第三方的纯python神经网络库来实现,每个样本的输入项有600个元素,训练速度较慢,但训练过程的误差下降比较平滑。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值