数学之路(3)-机器学习(3)-机器学习算法-神经网络[21]
2013-09-08 20:31
316 查看
针对上节的风景图片分类,我们也可以使用多层感知器的神经网络
我们将样本图片分块提取特征,然后这些特征做为样本所属类的输入,训练的输出目标我们使用下面的矩阵来表示
[0,0,1]
[0,1,0]
[1,0,0]
第一行表示第一类,以此类推,最后一行表示最后一类
整理输入样本与输出目标的代码如下:
泛化性指对一个映射给出一定的必要的训练样本训练后,网络能否对样本以外的样本给出较为准确的预测,泛化能力也就是神经网络用于对未知数据预测的能力。
运行后,效果不错,泛化能力也不错。
>>> 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,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个元素,训练速度较慢,但训练过程的误差下降比较平滑。
相关文章推荐
- 数学之路(3)-机器学习(3)-机器学习算法-神经网络[2]
- 数学之路(3)-机器学习(3)-机器学习算法-神经网络[3]
- 数学之路(3)-机器学习(3)-机器学习算法-神经网络[4]
- 数学之路(3)-机器学习(3)-机器学习算法-神经网络[16]
- 数学之路(3)-机器学习(3)-机器学习算法-神经网络[20]
- 数学之路(3)-机器学习(3)-机器学习算法-神经网络[3]
- 数学之路(3)-机器学习(3)-机器学习算法-神经网络[7]【感知器】视频教程
- 数学之路(3)-机器学习(3)-机器学习算法-神经网络[19]
- 数学之路(3)-机器学习(3)-机器学习算法-神经网络[20]
- 数学之路(3)-机器学习(3)-机器学习算法-神经网络[14]
- 数学之路(3)-机器学习(3)-机器学习算法-神经网络[18]
- 数学之路(3)-机器学习(3)-机器学习算法-神经网络[9]
- 数学之路(3)-机器学习(3)-机器学习算法-神经网络[4]
- 数学之路(3)-机器学习(3)-机器学习算法-神经网络[13]
- 数学之路(3)-机器学习(3)-机器学习算法-神经网络[15]
- 数学之路(3)-机器学习(3)-机器学习算法-神经网络[12]
- 数学之路(3)-机器学习(3)-机器学习算法-神经网络[16]
- 数学之路(3)-机器学习(3)-机器学习算法-神经网络[6]
- 数学之路(3)-机器学习(3)-机器学习算法-神经网络[9]
- 数学之路(3)-机器学习(3)-机器学习算法-神经网络[12]