python**實現效果很不好,當學習率不太大的時候還行,一旦大於乙個值就完全崩了,暫時不知道什麼問題,先貼在這
#coding=utf-8
import numpy as np
from math import e
import matplotlib.pyplot as plt
import scipy.io as sio
def 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
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()
PHP的學習 可變函式
php 支援可變函式的概念。這意味著如果乙個變數名後有圓括號,php 將尋找與變數的值同名的函式,並且嘗試執行它。可變函式可以用來實現包括 函式,函式表在內的一些用途。可變函式不能用於例如 echo,print,unset isset empty include,require 以及類似的語言結構。...
Python學習 可變型別和不可變型別
不可變資料型別在第一次宣告賦值宣告的時候,會在記憶體中開闢一塊空間,用來存放這個變數被賦的值,而這個變數實際上儲存的,並不是被賦予的這個值,而是存放這個值所在空間的記憶體位址,通過這個位址,變數就可以在記憶體中取出資料了.所謂不可變就是說,我們不能改變這個資料在記憶體中的值,所以當我們改變這個變數的...
python新手學習可變和不可變物件
python中有可變物件和不可變物件,可變物件 list,dict.不可變物件有 int,string,float,tuple.python不可變物件 int,string,float,tuple 先來看乙個例子 def int test i 77 j 77 print id 77 14039657...