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

来源:互联网 发布:火线精英开挂软件 编辑:程序博客网 时间:2024/06/06 08:24

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

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

[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个元素,训练速度较慢,但训练过程的误差下降比较平滑。




原创粉丝点击