数学之路(3)-机器学习(3)-机器学习算法-神经网络[14]
来源:互联网 发布:无间道2 吴镇宇 知乎 编辑:程序博客网 时间:2024/05/18 03:30
曲线拟合,俗称拉曲线,是一种把现有数据透过数学方法来代入一条数式的表示方式。科学和工程问题可以通过诸如采样、实验等方法获得若干离散的数据,根据这些数据,我们往往希望得到一个连续的函数(也就是曲线)或者更加密集的离散方程与已知数据相吻合,这过程就叫做拟合 (fitting)
多层感知器的神经网络很适合做函数拟合,我们用500个数据点来拟合,我们将前面的用python实现的多层感知器网络修改后,拟合sin函数,初始权值使用随机生成初始权值矩阵后,选择最优的生成
本博客所有内容是原创,如果转载请注明来源
http://blog.csdn.net/u010255642
部分python代码如下
def simulate(myx,sigmoid_func,delta_sigfun): '''一个样本的仿真计算''' print u"仿真计算中" global ann_yi global ann_w global ann_wj0 global ann_y0 global hidelevel_count global alllevel_count global d global mylnww myd=d[0] myx=np.array(myx) n=len(myx) #清空yi输出信号数组 hidelevel=hidelevel_count alllevel=alllevel_count for i in xrange(0,alllevel): #第一维是层数,从0开始 for j in xrange(0,n): #第二维是神经元 ann_yi[i][j]=0.0 ann_yi=np.array(ann_yi) yi=ann_yi #前向计算 myy=np.array([]) for nowlevel in xrange(0,alllevel): #一层层向前计算 #计算诱导局部域 my_y=[] myy=yi[nowlevel-1] myw=ann_w[nowlevel-1] if nowlevel==0: #第一层隐藏层 my_y=myx yi[nowlevel]=my_y elif nowlevel==(alllevel-1): #线性输出层 my_y=o_func(yi[nowlevel-1,:len(myd)]) yi[nowlevel,:len(myd)]=my_y elif nowlevel==(hidelevel-1): #最后一层隐藏输出层 for i in xrange(0,len(myd)): temp_y=sigmoid_func(np.dot(myw[:,i],myy)) my_y.append(temp_y) yi[nowlevel,:len(myd)]=my_y else: #中间隐藏层 #中间隐藏层需要加上偏置 for i in xrange(0,len(myy)): temp_y=sigmoid_func(np.dot(myw[:,i],myy)) my_y.append(temp_y) yi[nowlevel]=my_y if isdebug: print "=============" print u"***权值矩阵***" print ann_w print u"***输出矩阵***" print yi print "=============" return yi[alllevel-1,:len(myd)] train()delta_sigfun=ann_delta_atanhsigmoid_func=ann_atanhsimd=[]for xn in xrange(0,len(x)): mytemp=simulate(x[xn],sigmoid_func,delta_sigfun) print mytemp[0] simd.append(mytemp[0])temp_x=[]temp_y=simdtemp_d=[]i=0for mysamp in train_x: temp_x.append(mysamp[0]) temp_d.append(d[i][0]) i+=1 x_max=max(temp_x)x_min=min(temp_x)y_max=max(max(temp_y),max(d))+0.2y_min=min(min(temp_y),min(d))-0.2 plt.subplot(211)plt.xlabel(u"x")plt.xlim(x_min, x_max)plt.ylabel(u"y")plt.ylim(y_min, y_max)plt.title(u"http://blog.csdn.net/myhaspl" )lp_x1 = temp_xlp_x2 = temp_ylp_d = temp_dplt.plot(lp_x1, lp_x2, 'r*')plt.plot(lp_x1,lp_d,'b*')x_max=len(err)x_min=1y_max=max(err)+0.2y_min=0.plt.subplot(212)plt.xlabel(u"traincount")plt.xlim(x_min, x_max)plt.ylabel(u"mse")plt.ylim(y_min, y_max)lp_x1 = xrange(1,len(err)+1)lp_x2 = errplt.plot(lp_x1,lp_x2,'g-')plt.show()
通过对一些神经网络参数调整,误差率设为0.02,同时提高收敛速度,将平均训练次数控制在80以内,
>>> runfile(r'K:\book_prog\ann_mybpnhalpha.py', wdir=r'K:\book_prog')
产生权值初始矩阵 . . . . . . . . . . . . . . .
权值矩阵平均:0.002603
权值矩阵方差:0.234924
-------开始第1次训练--------- 误差为:0.595339
-------开始第2次训练--------- 误差为:0.166911
-------开始第3次训练--------- 误差为:0.076678
-------开始第4次训练--------- 误差为:0.061540
-------开始第5次训练--------- 误差为:0.047024
-------开始第6次训练--------- 误差为:0.033671
-------开始第7次训练--------- 误差为:0.029060
-------开始第8次训练--------- 误差为:0.030462
-------开始第9次训练--------- 误差为:0.024737
-------开始第10次训练--------- 误差为:0.022075
-------开始第11次训练--------- 误差为:0.021777
-------开始第12次训练--------- 误差为:0.022006
-------开始第13次训练--------- 误差为:0.019607
训练成功,正在进行检验
仿真计算中
仿真计算中
仿真计算中
- 数学之路(3)-机器学习(3)-机器学习算法-神经网络[14]
- 数学之路(3)-机器学习(3)-机器学习算法-神经网络[3]
- 数学之路(3)-机器学习(3)-机器学习算法-神经网络[1]
- 数学之路(3)-机器学习(3)-机器学习算法-神经网络[2]
- 数学之路(3)-机器学习(3)-机器学习算法-神经网络[4]
- 数学之路(3)-机器学习(3)-机器学习算法-神经网络[5]
- 数学之路(3)-机器学习(3)-机器学习算法-神经网络[6]
- 数学之路(3)-机器学习(3)-机器学习算法-神经网络[7]【感知器】视频教程
- 数学之路(3)-机器学习(3)-机器学习算法-神经网络[8]
- 数学之路(3)-机器学习(3)-机器学习算法-神经网络[9]
- 数学之路(3)-机器学习(3)-机器学习算法-神经网络[10]
- 数学之路(3)-机器学习(3)-机器学习算法-神经网络[11]
- 数学之路(3)-机器学习(3)-机器学习算法-神经网络[13]
- 数学之路(3)-机器学习(3)-机器学习算法-神经网络[12]
- 数学之路(3)-机器学习(3)-机器学习算法-神经网络[15]
- 数学之路(3)-机器学习(3)-机器学习算法-神经网络[16]
- 数学之路(3)-机器学习(3)-机器学习算法-神经网络[17]
- 数学之路(3)-机器学习(3)-机器学习算法-神经网络[18]
- linuxI/O的一些理解
- hdu 1280(前m大的数)
- TreeMap排序 & HashMap分析
- MFC中UpdateData()函数的使用
- ZigZag Conversion
- 数学之路(3)-机器学习(3)-机器学习算法-神经网络[14]
- (Java 功能篇) Java 验证码
- Volatile的陷阱
- [android] eclipse里面的安卓模拟器起不来
- Oracle体系结构简介
- 内存参考网站
- jquery 添加节点的几种方法
- 检测浏览器支持哪些HTML5新特性的方法
- Javascript 面向对象编程