可变学习速度的VLBP
来源:互联网 发布:考试作弊软件app 编辑:程序博客网 时间:2024/05/16 19:28
python代码实现效果很不好,当学习率不太大的时候还行,一旦大于一个值就完全崩了,暂时不知道什么问题,先贴在这
#coding=utf-8import numpy as npfrom math import eimport matplotlib.pyplot as pltimport scipy.io as siodef logsig(x): return 1/(1+e**(-x))if __name__=="__main__": er = 1.02 lr = 2.2 # 学习率 mc = 0.1 # 动量因子 dec = 0.8# 乘上学习率的因子ρ inc=1.02#因子η W1=np.array([[2.0],[3.0]]) b1=np.array([[-1.],[1.]]) W2=np.array([[1.,1.]]) b2=np.array([[-1.]]) P=np.array([np.arange(-2,2,0.1)]) #P=np.array([[1]]) a0=P T=logsig(np.dot(W2,logsig(np.dot(W1,P)+b1))+b2) x = 1.0 y = -2.0 ep=100 W1[0,0]=x W2[0,0]=y n1 = np.dot(W1, P)+b1 a1 = logsig(n1) n2 = np.dot(W2, a1)+b2 a2 = logsig(n2) xx=np.zeros([1,ep+1]) yy=np.zeros([1,ep+1]) ee = np.zeros([1, ep + 1]) E=T-a2 xx[0,0]=x yy[0,0]=y SSE=np.sum(E*E) ee[0,0]=SSE v1=np.zeros(W1.shape) v2=np.zeros(W2.shape) s2 = -2 * E * (1 - a2) * a2 s1 = np.dot(W2.T, s2) * a1 * (1 - a1) MC=mc for i in range(1,ep+1): dW2 = np.dot(s2, a1.T) dW1 = np.dot(s1, a0.T) v1 = mc * v1 - lr * dW1 v2 = mc * v2 - lr * dW2 new_W1 = W1 new_W2 = W2 MC=mc newx = W1[0,0]+v1[0,0] new_W1[0,0] = newx newy = W2[0, 0] + v2[0, 0] new_W2[0, 0] = newy new_a1=logsig(np.dot(new_W1,a0)+b1) new_a2=logsig(np.dot(new_W2,new_a1)+b2) new_E=T-new_a2 new_SSE=np.sum(new_E*new_E) #如果军方误差(在整个训练集上)权值在更新后增加了,且超过了某个设置的百分数(3%~5%) #则权值更新被取消,学习速度被乘上一个因子ρ(0<ρ<1),并且动量洗漱被设置为0 if(new_SSE>SSE*er): lr=lr*dec MC=0 #如果平方误差在权值更新后减少,则权值更新被接受,而且学习速度将被乘上一个因子η(η>1). # 如果mc被设置为0,则恢复到以前的值 else: if (new_SSE < SSE): lr = lr * inc # 如果平方误差的增长小于ξ,则权值更新被接受,但学习速度保持不变。如果mc过去被设置为0, # 则恢复到以前的值 W1 = new_W1 W2 = new_W2 a1 = new_a1 a2 = new_a2 x = newx y = newy E = new_E SSE = new_SSE s2 = -2 * E * (1 - a2) * a2 s1 = np.dot(W2.T, s2) * a1 * (1 - a1) ee[0, i] = SSE xx[0, i] = x yy[0, i] = y data=sio.loadmat('nndbp1') p1=plt.subplot(121) p2=plt.subplot(122) x2=data['x2'] y2=data['y2'] E2=data['E2'] x2,y2=np.meshgrid(x2,y2) p1.contour(x2,y2,E2) #p1.plot(xx[0,1:80],yy[0,1:80]) p1.plot(xx[0,1:80],yy[0,1:80]) p2.plot(ee[0,1:50]) plt.show()
0 0
- 可变学习速度的VLBP
- 纹理特征-LBP的扩展VLBP
- 学习C的可变参数
- 学习C的可变参数
- “可变参数列表”的学习
- LBP+DLBP+STLBP+VLBP
- 发生的速度速度速度速度速度速度速度速度
- 我的C可变参数的学习
- JavaSE 学习参考:方法的可变参数
- 学习笔记:可变变量的使用
- ios tableview 那些事(二十二) 使cell高度可变的tableview加载速度更快
- JAVA学习--可变个数的形参的方法
- 2017.04.30 有关c语言的可变参数表的学习
- 可变参数学习笔记
- 可变参数学习笔记
- 可变参数学习笔记
- 可变参数学习
- 可变参数学习笔记
- 万能程序
- 操作系统学习笔记(一)
- Win8.1下如何正确更改语言设置?
- java -- java中调用GraphViz
- Ubuntu安装paramiko _openssl.c:433:30: fatal error: openssl/opensslv.h: No such file or directory
- 可变学习速度的VLBP
- [Mahout in action]--Recommender System
- 把 arrayList转换成Oracle Array (存储过程参数Array)
- jQuery的隐藏显示hide(),show()方法
- HDU1235
- 本机远程执行命令,查看其他机器的文件内容或者文件夹内容
- 网易2017秋招编程题-优雅的点
- HDU 1108
- 单元测试——Android(入门篇)