日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

深度学习(6)构造简单的神经网络

發布時間:2023/11/27 生活经验 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深度学习(6)构造简单的神经网络 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

一、激勵函數

?二、創建數組(初始輸入和輸出)

三、更新權重

1、創建權重(w0和w1)

2、限值(-1~1)?

3、正向傳播

4、反向傳播

4-1、求l2差錯

4-2、求l1差錯

五、更新權重

總代碼


一、激勵函數

# 激勵函數
def Sigmoid(x, deriv = False):# 反向傳播if deriv == True:return x*(x-1)          #求導# 正向傳播else:return 1/(1+np.exp(-x)) #1/[1+e^(-x)]

?二、創建數組(初始輸入和輸出)

# 創建數組(輸入參數、標簽)x, y = Create_Array()
# 創建數組(輸入和標簽)
def Create_Array():# 輸入# (這里有5個數據,3個特征)x = np.array([[0, 0, 1],[0, 1, 1],[1, 0, 1],[1, 1, 1],[0, 0, 1]])print(x.shape)# 標簽(類別標簽)# 這里有5個標簽(對應5個數據),共2種標簽y = np.array([[0],[1],[1],[0],[0]])print(y.shape)return x,y

?

三、更新權重

1、創建權重(w0和w1)

# 1、創建w0和w1w0 = np.random.random((3, 4))     #3:輸入特征有3個     4:神經元數量w1 = np.random.random((4, 1))     #4:輸入特征4個       1:神經元數量(輸出特征)

?

可以看出來它的取值在0~1,我們想把它限制在-1~1。

2、限值(-1~1)?

# 2、限值在-1~1(本來是0~1)w0 = w0 * 2 - 1w1 = w1 * 2 - 1

?

3、正向傳播

矩陣:例如w0[3,4],可以理解為:前面輸入為3,后面輸出為4。

# 3、正向傳播l0 = x                          #輸入層(第一層)l1 = Sigmoid(np.dot(l0, w0))    #中間層(第二層)l2 = Sigmoid(np.dot(l1, w1))    #輸出層(第三層)

?

4、反向傳播

?

矩陣:例如w0[3,4],可以理解為:前面輸入為3,后面輸出為4。?

4-1、求l2差錯

l2誤差 = l2值 - 預期值?

# l2l2_loss = l2 - y                                # l2誤差(損失)(預測值和真實值的差)l2_delta = l2_loss * Sigmoid(l2, deriv=True)    # l2每個樣本錯了多少

4-2、求l1差錯

?l1誤差 = l2誤差 * w1轉置

# l1l1_loss = l2_delta.dot(w1.T)                    # l1誤差(損失)(l2差錯矩陣*w1轉置)l1_delta = l2_loss * Sigmoid(l2, deriv=True)    # l1每個樣本錯了多少

五、更新權重

w1 -= l1轉置 * l2差錯

w0 -= l0轉置 * l1差錯

# 5、更新權重:w1和w0w1 -= l1.T.dot(l2_delta)w0 -= l0.T.dot(l1_delta)
#每10000次打印一次(觀察優化效果)if i%10000 == 0:print('w1:', w1)print('w0', w0)print('---------------------------------------------')

觀察優化效果:?

誤差: [[ 0.32966685][-0.67656896][-0.66531841][ 0.32919543][ 0.32966685]]
w1: [[ 0.12175521][-0.31912182][-0.25200495][-0.81755089]]
w0 [[-0.92863401  0.44797085 -0.13338118 -0.47594584][ 0.18454401  0.58964472  0.20720542 -0.15294761][-0.75583748 -0.05354275  0.88698458  0.44581214]]
---------------------------------------------
誤差: [[ 9.99991933e-01][-7.32072362e-06][-9.10900613e-06][ 9.99991930e-01][ 9.99991933e-01]]
w1: [[2.69487986][2.64026488][3.62495426][3.06034898]]
w0 [[-0.74974059  0.62686427  0.04551225 -0.29705242][ 0.40014002  0.80524073  0.42280143  0.0626484 ][ 2.92079498  3.62308971  4.56361704  4.1224446 ]]
---------------------------------------------
誤差: [[ 9.99995932e-01][-3.69171529e-06][-4.46189795e-06][ 9.99996035e-01][ 9.99995932e-01]]
w1: [[2.85382632][2.80498355][3.79129229][3.22544424]]
w0 [[-0.69432892  0.68227594  0.10092392 -0.24164074][ 0.45555183  0.86065254  0.47821324  0.11806021][ 3.08851435  3.79080908  4.73133641  4.29016397]]
---------------------------------------------
誤差: [[ 9.99997276e-01][-2.47455531e-06][-2.94423290e-06][ 9.99997376e-01][ 9.99997276e-01]]
w1: [[2.94760072][2.90159829][3.88874508][3.3222891 ]]
w0 [[-0.66229777  0.71430709  0.13295506 -0.2096096 ][ 0.48758301  0.89268372  0.51024442  0.15009139][ 3.18666302  3.88895776  4.82948508  4.38831264]]
---------------------------------------------
誤差: [[ 9.99997951e-01][-1.86322517e-06][-2.19361346e-06][ 9.99998039e-01][ 9.99997951e-01]]
w1: [[3.01447732][2.97028531][3.95798219][3.39113988]]
w0 [[-0.63969395  0.73691091  0.15555889 -0.18700578][ 0.51018686  0.91528756  0.53284826  0.17269523][ 3.25635009  3.95864483  4.89917215  4.45799971]]
---------------------------------------------
誤差: [[ 9.99998358e-01][-1.49514816e-06][-1.74651365e-06][ 9.99998435e-01][ 9.99998358e-01]]
w1: [[3.06653951][3.02364596][4.01174561][3.44462675]]
w0 [[-0.62221616  0.7543887   0.17303668 -0.16952798][ 0.52766466  0.93276537  0.55032607  0.19017304][ 3.31043959  4.01273433  4.95326165  4.51208921]]

可以發現誤差在不斷減小,說明我們的神經網絡優化起了效果。

總代碼

# 簡單的神經網絡
import numpy as np# 激勵函數
def Sigmoid(x, deriv = False):# 反向傳播if deriv == True:return x*(x-1)          #求導# 正向傳播else:return 1/(1+np.exp(-x)) #1/[1+e^(-x)]# 創建數組(輸入和標簽)
def Create_Array():# 輸入# (這里有5個數據,3個特征)x = np.array([[0, 0, 1],[0, 1, 1],[1, 0, 1],[1, 1, 1],[0, 0, 1]])print(x.shape)# 標簽(類別標簽)# 這里有5個標簽(對應5個數據),共2種標簽y = np.array([[0],[1],[1],[0],[0]])print(y.shape)return x,y# 更新權重
def Update_Weight(x, y):# 1、創建w0和w1w0 = np.random.random((3, 4))     #3:輸入特征有3個     4:神經元數量w1 = np.random.random((4, 1))     #4:輸入特征4個       1:神經元數量(輸出特征)# 2、限值在-1~1(本來是0~1)w0 = w0 * 2 - 1w1 = w1 * 2 - 1# 遍歷for i in range(60000):# 3、正向傳播l0 = x                          #輸入層(第一層)l1 = Sigmoid(np.dot(l0, w0))    #中間層(第二層)l2 = Sigmoid(np.dot(l1, w1))    #輸出層(第三層)# 4、反向傳播# l2l2_loss = l2 - y                                # l2誤差(損失)(預測值和真實值的差)l2_delta = l2_loss * Sigmoid(l2, deriv=True)    # l2每個樣本錯了多少# l1l1_loss = l2_delta.dot(w1.T)                    # l1誤差(損失)(l2差錯矩陣*w1轉置)l1_delta = l2_loss * Sigmoid(l2, deriv=True)    # l1每個樣本錯了多少# 5、更新權重:w1和w0w1 -= l1.T.dot(l2_delta)w0 -= l0.T.dot(l1_delta)#每10000次打印一次(觀察優化效果)if i%10000 == 0:print('誤差:', l2_loss)print('w1:', w1)print('w0', w0)print('---------------------------------------------')if __name__ == '__main__':# 創建數組(輸入參數、標簽)x, y = Create_Array()# 更新權重Update_Weight(x, y)

????????以后深度學習,一般不會自己寫,一般都是用別人寫好的框架,比如caffe、tensorflow等等框架。

總結

以上是生活随笔為你收集整理的深度学习(6)构造简单的神经网络的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。