昨天介紹完淺層神經網路演算法,今天要來研究淺層神經網路程式:
首先要先設定學習率和隱藏神經元個數,在此我們使用經驗函數:
所以程式如下:
#設定學習率
a=0.05
#設置調節常數
a_con=2
#隱藏層神經元個數
m=int(np.sqrt(len(x_train.columns)+len(y_train.to_frame().columns))+a_con)
print(m)
所以m就是4,順道一提x_train是4欄位y_train 是1欄位
接下來要設定兩個w的權重,程式如下
np.random.seed(500)
#初始化權重for輸入到隱藏,維度(m,len(x_train.columns)
wi = np.random.uniform(-1,1,(m,len(x_train.columns)))
#初始化權重for隱藏到輸出
wi2 = np.random.uniform(-1,1,m)
此外設置,誤差最小值和誤差放置列表和最大迭帶次數:
#誤差最小值
ep_limit = 10**-3
#誤差放置列表
sum_errorList = []
#設定最大迭帶次數
iter_rate_max=1000
好準備完畢後,接下來要決定啟動函數,這邊取tanh當作啟動函數(因為它在任何點都完全可維):
所以
則
所以確定好啟動函數後:
程式如下:
for j in range(iter_rate_max):
sum_error = 0
for i in range(len(x_train)):
# 正向傳播
#Xi
xi = x_train.iloc[i]
#wxi
d = wi@xi
#fk(d)-->tanh
fk = (np.exp(d)-np.exp(-d))/(np.exp(d)+np.exp(-d))
#W2fk(d)
t = wi2@fk
#predict-true
err = t - y_train.iloc[i]
#SSE
sum_error += err**2
# 若誤差還是比最小誤差大,就去更新wi(反向傳播)
if np.abs(err) > ep_limit:
#fk(d)*a*(t-y)
delta_w=fk*a*err
wi2 = wi2 - delta_w
#fk'(d)*w*a*(t-y)
fk_d =(4/(np.exp(2*d)+2+np.exp(-2*d)))*wi2*a*err
wi = wi - [j*xi for j in fk_d]
#計算MSE
MSE_error=sum_error/len(x_train)
sum_errorList.append(MSE_error)
print("iter:",j,"error:",MSE_error)
# 當連續2次總誤差小於誤差限制而且後一次誤差要比前一次小
if len(sum_errorList) > 2 and (sum_errorList[-2]>sum_errorList[-1]) and sum_errorList[-2] - sum_errorList[-1] < ep_limit:
break
print("最終誤差MSE為:",MSE_error)
print("wi(輸入到隱藏權重):\n",wi)
print("wi2(隱藏到輸入權重):\n",wi2)
結果如下:
最終誤差MSE為: 1.3951452403482179
wi(輸入到隱藏權重):
[[ 4.41274874 -0.32684688 -0.94719543 -3.98609522]
[ 5.19430544 7.87041477 3.6636928 -9.48120797]
[ 2.49395541 0.14613217 -0.76136188 6.40090343]
[11.0882004 5.01234925 1.64783185 7.14010145]]
wi2(隱藏到輸入權重):
[12.68878617 -1.34260065 26.81972859 2.03718612]
有了權重後,把資料帶回去test集,程式如下:
y_pred = []
for i in range(len(x_test)):
# 正向傳播
xi = x_test.iloc[i]
d = wi@xi
fk = (np.exp(d)-np.exp(-d))/(np.exp(d)+np.exp(-d))
t = wi2@fk
y_pred.append(t)
print("test預測y:",y_pred)
print("test實際y:",y_test)
print("test MSE",np.mean((y_test - y_pred)**2))
結果如下:
test預測y: [13.432542081356413, 25.926937743888953, 15.054134713533085, 14.524957997382055]
test實際y: [12.03, 29.0, 21.5, 13.75]
test MSE 13.390143777223878
好,今天淺層網路神經程式算是完成,明天就來研究CNN(卷積神經網路)
此時男孩走到了森林入口,突然他眼神恢復清明,他不知道為甚麼自己原本在木屋前面,怎麼突然走到森林的入口,突然他胸口又發出歌聲,只是這次他驚訝發現是自己聲音,同時他發現遠處,原本他出來的房子裡面好像有一個人站在正中央,這時他突然聽到一陣低語:蒼蠅,狐狸,娃娃,屋子,於是男孩決定往一開始屋子出發
--|失去的會再次出現,遺失的會再度回來|-- MM.CS