chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于Numpy實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò):反向傳播

zhKF_jqr_AI ? 來源:未知 ? 作者:steve ? 2018-04-01 09:29 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

和DeepMind數(shù)據(jù)科學(xué)家、Udacity深度學(xué)習(xí)導(dǎo)師Andrew Trask一起,基于Numpy手寫神經(jīng)網(wǎng)絡(luò),更深刻地理解反向傳播這一概念。

總結(jié):基于可以嘗試和修改的玩具代碼,我能取得最好的學(xué)習(xí)效果。本教程基于一個(gè)非常簡(jiǎn)單的玩具樣例(簡(jiǎn)短的Python代碼實(shí)現(xiàn))介紹反向傳播這一概念。

如果你對(duì)我的文章感興趣,歡迎在推特上關(guān)注 電子說,也歡迎給我反饋。

直接給我代碼

  1. X = np.array([ [0,0,1],[0,1,1],[1,0,1],[1,1,1] ])

  2. y = np.array([[0,1,1,0]]).T

  3. syn0 =2*np.random.random((3,4)) -1

  4. syn1 =2*np.random.random((4,1)) -1

  5. forjinxrange(60000):

  6. l1 =1/(1+np.exp(-(np.dot(X,syn0))))

  7. l2 =1/(1+np.exp(-(np.dot(l1,syn1))))

  8. l2_delta = (y - l2)*(l2*(1-l2))

  9. l1_delta = l2_delta.dot(syn1.T) * (l1 * (1-l1))

  10. syn1 += l1.T.dot(l2_delta)

  11. syn0 += X.T.dot(l1_delta)

其他語言:D、C++、CUDA

不過,上面的代碼有點(diǎn)過于凝練了……讓我們循序漸進(jìn)。

一、微型玩具網(wǎng)絡(luò)

基于反向傳播的神經(jīng)網(wǎng)絡(luò)嘗試通過輸入來預(yù)測(cè)輸出。

基于Numpy實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò):反向傳播

嘗試通過上表的輸入預(yù)測(cè)輸出。我們可以通過測(cè)量輸入值和輸出值的統(tǒng)計(jì)數(shù)據(jù)來解決這一問題。如果我們這么干,我們會(huì)發(fā)現(xiàn)最左邊的輸入和輸出完全相關(guān)(perfectly correlated)。最簡(jiǎn)單形式的反向傳播,就是通過類似的測(cè)量統(tǒng)計(jì)數(shù)據(jù)的方式來建立模型。

雙層神經(jīng)網(wǎng)絡(luò)

  1. importnumpyasnp

  2. # sigmoid函數(shù)

  3. defnonlin(x,deriv=False):

  4. if(deriv==True):

  5. returnx*(1-x)

  6. return1/(1+np.exp(-x))

  7. # 輸入數(shù)據(jù)集

  8. X = np.array([ [0,0,1],

  9. [0,1,1],

  10. [1,0,1],

  11. [1,1,1] ])

  12. # 輸出數(shù)據(jù)集

  13. y = np.array([[0,0,1,1]]).T

  14. # 設(shè)置隨機(jī)數(shù)種子使計(jì)算結(jié)果是確定的

  15. # (實(shí)踐中這是一個(gè)很好的做法)

  16. np.random.seed(1)

  17. # 隨機(jī)初始化權(quán)重(均值0)

  18. syn0 =2*np.random.random((3,1)) -1

  19. foriterinxrange(10000):

  20. # 前向傳播

  21. l0 = X

  22. l1 = nonlin(np.dot(l0,syn0))

  23. # 差多少?

  24. l1_error = y - l1

  25. # 誤差乘以sigmoid在l1處的斜率

  26. l1_delta = l1_error * nonlin(l1,True)

  27. # 更新權(quán)重

  28. syn0 += np.dot(l0.T,l1_delta)

  29. print"訓(xùn)練后輸出:"

  30. printl1

  1. 訓(xùn)練后輸出:

  2. [[0.00966449]

  3. [0.00786506]

  4. [0.99358898]

  5. [0.99211957]]

基于Numpy實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò):反向傳播

如你所見,“訓(xùn)練后輸出:"下面打印出的結(jié)果說明這一網(wǎng)絡(luò)是有效的?。?!在我描述這個(gè)過程之前,我建議你嘗試探索以上代碼以獲得一些它如何工作的感性認(rèn)識(shí)。以上代碼應(yīng)該可以在Jupyter Notebook中直接運(yùn)行(或者你也可以以腳本的形式運(yùn)行,但我強(qiáng)烈建議使用notebook)。下面是探索代碼的一些提示:

  • 比較第一次迭代和最后一次迭代后的l1

  • 查看nonlin函數(shù)定義。該函數(shù)給出一個(gè)概率作為輸出。

  • 查看迭代過程中l(wèi)1_error的值是如何改變的。

  • 仔細(xì)看看第36行。這段代碼的奧秘主要藏在此處。

  • 查看第39行。網(wǎng)絡(luò)中的一切是為這個(gè)操作準(zhǔn)備的。

讓我們逐行討論代碼。

建議:在兩塊屏幕上打開本文,這樣你就可以一邊查看代碼,一邊閱讀文章了。我寫作下文的時(shí)候基本上就是這么做的。

01行:導(dǎo)入numpy。numpy是一個(gè)線性代數(shù)庫。這是我們唯一的依賴。

04行:這是我們的“非線性”。非線性可以有多種選擇,這里我們選用的是sigmoid. sigmoid函數(shù)將任何值映射到0到1之間的值。我們使用sigmoid將數(shù)字轉(zhuǎn)換為概率。sigmoid函數(shù)還有其他一些有利于訓(xùn)練神經(jīng)網(wǎng)絡(luò)的性質(zhì)。

基于Numpy實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò):反向傳播

05行:注意這個(gè)函數(shù)同時(shí)可以生成sigmoid的導(dǎo)數(shù)(當(dāng)deriv=True時(shí))。sigmoid函數(shù)有一個(gè)非常棒的特性是它的輸出可以用來創(chuàng)建它的導(dǎo)數(shù)。如果sigmoid的輸出是變量out的話,它的導(dǎo)數(shù)是out * (1 - out),非常高效。

如果你不熟悉導(dǎo)數(shù),只需把它想象成sigmoid函數(shù)在給定的點(diǎn)上的斜率(如上圖所示,不同點(diǎn)的斜率不同)。想要了解更多關(guān)于導(dǎo)數(shù)的知識(shí),可以參考Khan Academy的導(dǎo)數(shù)教程。

10行:初始化輸入數(shù)據(jù)集為numpy矩陣。每行是一個(gè)“訓(xùn)練樣本”。每列對(duì)應(yīng)一個(gè)輸入節(jié)點(diǎn)。因此,我們有3個(gè)輸入節(jié)點(diǎn)和4個(gè)訓(xùn)練樣本。

16行:初始化輸出數(shù)據(jù)集。這里,我水平地生成了數(shù)據(jù)集(1行4列),以節(jié)省字符。.T是轉(zhuǎn)置函數(shù)。轉(zhuǎn)置之后,y矩陣有4行1列。和輸入一樣,每行是一個(gè)訓(xùn)練樣本,每列(僅有一列)是一個(gè)輸出節(jié)點(diǎn)。所以,我們的網(wǎng)絡(luò)有3個(gè)輸入和1個(gè)輸出。

20行:設(shè)置隨機(jī)數(shù)種子是一個(gè)很好的做法。數(shù)字仍然是隨機(jī)分布的,但它們?cè)诿看斡?xùn)練中將以完全一致的方式隨機(jī)分布。這更便于觀察你的改動(dòng)對(duì)網(wǎng)絡(luò)的影響。

23行:這是神經(jīng)網(wǎng)絡(luò)的權(quán)重矩陣。它命名為syn0,意味著它是“突觸(synapse)零”。由于我們的網(wǎng)絡(luò)只有兩層(輸入和輸出),我們只需要一個(gè)權(quán)重矩陣就可以連接兩者。它的維度是(3, 1),因?yàn)槲覀冇?個(gè)輸入和1個(gè)輸出。另一種看待它的方式是l0的尺寸是3,l1的尺寸是1. 我們需要將l0中的每個(gè)節(jié)點(diǎn)連接到l1中的每個(gè)節(jié)點(diǎn),因而我們需要一個(gè)維度(3, 1)的矩陣。

同時(shí)注意,隨機(jī)初始化時(shí)的均值為零。權(quán)重初始化有不少理論。就目前而言,可以簡(jiǎn)單地把這一做法(權(quán)重初始化均值為零)看成是最佳實(shí)踐。

另外需要注意的是,“神經(jīng)網(wǎng)絡(luò)”實(shí)際上就是這個(gè)矩陣。我們有神經(jīng)網(wǎng)絡(luò)層l0和l1,但它們其實(shí)是基于數(shù)據(jù)集創(chuàng)建的短暫值。我們并不保存它們。所有的學(xué)習(xí)所得都儲(chǔ)存在syn0矩陣中。

25行:網(wǎng)絡(luò)訓(xùn)練代碼從這里開始。這是一個(gè)“迭代”訓(xùn)練代碼的for循環(huán),優(yōu)化網(wǎng)絡(luò)以擬合數(shù)據(jù)集。

28行:第一層網(wǎng)絡(luò)l1直接就是數(shù)據(jù)。因此我們?cè)谶@里明確聲明這一點(diǎn)。還記得X包含4個(gè)訓(xùn)練樣本(行)嗎?在這一實(shí)現(xiàn)中,我們將同時(shí)處理所有樣本。這被稱為“全batch”(full batch)訓(xùn)練。因此,我們有4個(gè)不同的l0行,但是如有必要,我們可以將它看成一個(gè)單獨(dú)的訓(xùn)練樣本。在這里這些沒有區(qū)別。(如果需要,我們可以加載1000甚至10000行數(shù)據(jù),而不用修改任何代碼)。

29行:這是我們的預(yù)測(cè)步驟。基本上,我們首先讓網(wǎng)絡(luò)“嘗試”基于輸入預(yù)測(cè)輸出。我們接著研究它的表現(xiàn),從而加以調(diào)整,讓它在下一個(gè)迭代中表現(xiàn)更好。

這一行包含兩小步。首先矩陣l0和syn0相乘。接著將輸出傳給sigmoid函數(shù)。算下維度:

  1. (4x3) dot (3x1) = (4x1)

矩陣乘法是有序的,滿足等式兩邊的維度必須一致。因此最終生成的矩陣的行數(shù)等于第一個(gè)矩陣的行數(shù),列數(shù)等于第二個(gè)矩陣的列數(shù)。

由于我們載入了4個(gè)訓(xùn)練樣本,我們最終對(duì)正確答案做了4次猜測(cè),一個(gè)(4 x 1)矩陣。每個(gè)輸出對(duì)應(yīng)與網(wǎng)絡(luò)對(duì)給定輸入的猜測(cè)。也許讀到這里你能很直觀地理解為什么我們之前說如有必要可以載入任意數(shù)目的訓(xùn)練樣本,因?yàn)榫仃嚦朔ㄈ匀豢梢怨ぷ鳌?/p>

32行:好了,l1根據(jù)每個(gè)輸入作出了“猜測(cè)”。我們可以通過從猜測(cè)(l1)中減去真實(shí)答案(y)來看看它的表現(xiàn)如何。l1_error只是一個(gè)由正數(shù)和負(fù)數(shù)組成的向量,反映了網(wǎng)絡(luò)離正確還差多少。

36行:現(xiàn)在是關(guān)鍵時(shí)刻!這是整個(gè)模型的奧秘所在!這一行里發(fā)生了很多事情,所以讓我們進(jìn)一步把它分成兩部分。

第一部分:導(dǎo)數(shù)

  1. nonlin(l1,True)

如果l1表示下圖中的三點(diǎn),那么上面的代碼生成了下圖曲線的斜率。注意,像x=2.0這樣很高的值(綠點(diǎn))和像x=-1.0這樣很低的值(紫點(diǎn))具有相對(duì)平緩的斜率。x=0(藍(lán)點(diǎn))處的斜率最高。這起到了非常重要的作用。同時(shí)注意所有的導(dǎo)數(shù)都在0和1之間。

基于Numpy實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò):反向傳播

整個(gè)語句:誤差加權(quán)導(dǎo)數(shù)

  1. l1_delta = l1_error * nonlin(l1,True)

“誤差加權(quán)導(dǎo)數(shù)”有數(shù)學(xué)上更精確的說法,但我覺得這個(gè)名字捕捉到了背后的直覺。l1_error是一個(gè)(4,1)矩陣。nonlin(l1, True)返回一個(gè)(4,1)矩陣。我們將它們逐元素相乘。這返回一個(gè)(4,1)矩陣l1_delta。

當(dāng)我們將“斜率”乘以錯(cuò)誤時(shí),我們降低高信度預(yù)測(cè)的錯(cuò)誤。再看一遍sigmoid圖像!如果斜率實(shí)在很平緩(接近0),那么這個(gè)網(wǎng)絡(luò)或者具有一個(gè)非常高的值,或者具有一個(gè)非常低的值。這意味著網(wǎng)絡(luò)十分自信。然而,如果網(wǎng)絡(luò)猜測(cè)的值接近(x=0, y=0.5),那么它不是那么自信。我們更劇烈地更新那些缺乏信心的預(yù)測(cè),同時(shí)傾向于通過乘以一個(gè)接近零的數(shù)字保留那些自信的預(yù)測(cè)。

行39:一切就緒,我們可以更新網(wǎng)絡(luò)了!讓我們看下單個(gè)訓(xùn)練樣本。

基于Numpy實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò):反向傳播

譯者注:上圖左側(cè)標(biāo)注L1、L2分別應(yīng)為L(zhǎng)0、L1

對(duì)這個(gè)樣本而言,我們已經(jīng)準(zhǔn)備好更新權(quán)重了。讓我們更新最左邊的權(quán)重(9.5)。

  1. weight_update = input_value * l1_delta

對(duì)最左邊的權(quán)重而言,這將是1.0 * L1_delta。推測(cè)起來,這會(huì)非常輕微地增加9.5. 為什么只增加一點(diǎn)點(diǎn)?好吧,預(yù)測(cè)已經(jīng)相當(dāng)自信了,而且預(yù)測(cè)的結(jié)果也基本正確。低誤差和低斜率意味著非常小的更新??紤]所有3個(gè)權(quán)重。這3個(gè)權(quán)重都將略微增加。

譯者注:上圖左側(cè)標(biāo)注L1、L2分別應(yīng)為L(zhǎng)0、L1

然而,因?yàn)槲覀兪褂谩叭玝atch”配置,我們將對(duì)所有4個(gè)訓(xùn)練樣本執(zhí)行上述操作。因此,這個(gè)過程更像上圖所示。所以,第39行做了什么?它為每個(gè)訓(xùn)練樣本的每個(gè)權(quán)重計(jì)算權(quán)重更新,累加起來,然后更新權(quán)重,這些都是在一行之內(nèi)完成的。探索矩陣乘法,你將看到它是如何做到的!

奧秘

所以,既然我們已經(jīng)了解網(wǎng)絡(luò)是如何更新的,讓我們回過頭來看一下訓(xùn)練數(shù)據(jù)然后反思一下。當(dāng)輸入和輸出都是1的時(shí)候,我們?cè)黾觾烧咧g的權(quán)重。當(dāng)輸入是1、輸出是0時(shí),我們減少兩者之間的權(quán)重。

基于Numpy實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò):反向傳播

因此,在上表的4個(gè)訓(xùn)練樣本中,第一個(gè)輸入與輸出之間的權(quán)重將持續(xù)增加或保持不變,而其他兩個(gè)權(quán)重將發(fā)現(xiàn)自己在不同的樣本上一會(huì)兒增加,一會(huì)兒下降(因而無法取得進(jìn)展)。這一現(xiàn)象導(dǎo)致我們的網(wǎng)絡(luò)基于輸入和輸出之間的相關(guān)性進(jìn)行學(xué)習(xí)。

二、稍微加大難度

基于Numpy實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò):反向傳播

考慮基于三個(gè)輸入欄預(yù)測(cè)輸出欄。妙在沒有一列和輸出是相關(guān)的。每列有50%的機(jī)會(huì)預(yù)測(cè)1,50%的機(jī)會(huì)預(yù)測(cè)0.

那么,模式是什么呢?看起來結(jié)果完全和第三列無關(guān),這一列的值永遠(yuǎn)是1. 然而,第1列和第2列組合起來看比較清楚。如果第1列和第2列有一列是1(但兩列不同為1?。?,那么輸出是1. 這是我們的模式。

這被認(rèn)為是一個(gè)“非線性”模式,因?yàn)檩斎牒洼敵鲋g沒有直接的一一對(duì)應(yīng)關(guān)系。相反,存在輸入的組合和輸出的一一對(duì)應(yīng)關(guān)系,也就是第1列和第2列。

不管你信不信,圖像識(shí)別是一個(gè)類似的問題。如果有100張尺寸相同的煙斗和自行車的圖像,沒有任何單獨(dú)的像素位置和自行車或煙斗的存在性直接相關(guān)。從純統(tǒng)計(jì)學(xué)角度看,像素可能是隨機(jī)的。然而,特定的像素組合不是隨機(jī)的,也就是說,像素的組合形成了自行車或煙斗的圖像。

我們的策略

為了將我們的像素組合成和輸出具有一一對(duì)應(yīng)關(guān)系的東西,我們需要增加一個(gè)網(wǎng)絡(luò)層。我們的第一層網(wǎng)絡(luò)將組合輸入,第二層網(wǎng)絡(luò)以第一層網(wǎng)絡(luò)的輸出作為輸入,并將其輸入映射到輸出。在我們跳到實(shí)現(xiàn)之前,先看下這個(gè)表格。

基于Numpy實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò):反向傳播

如果我們隨機(jī)初始化權(quán)重,我們將得到如上表所示的l1的隱藏狀態(tài)值。注意到?jīng)]有?隱藏權(quán)重的第二項(xiàng)(第二個(gè)隱藏節(jié)點(diǎn))與輸出已經(jīng)有隱約的相關(guān)性!它并不完美,但確實(shí)存在。信不信由你,這是神經(jīng)網(wǎng)絡(luò)訓(xùn)練中很重要的一部分。(一個(gè)有爭(zhēng)議的觀點(diǎn)認(rèn)為這是神經(jīng)網(wǎng)絡(luò)訓(xùn)練的唯一方式。)下面的訓(xùn)練將放大這一相關(guān)性。它將同時(shí)更新syn1和syn0,更新syn1以便將隱藏權(quán)重映射到輸出,更新syn0以便更好地基于輸入產(chǎn)生權(quán)重!

注意:這個(gè)增加更多網(wǎng)絡(luò)層以建模關(guān)系的更多組合的領(lǐng)域稱為“深度學(xué)習(xí)”,得名自建模時(shí)采用的越來越深的網(wǎng)絡(luò)層。

三層神經(jīng)網(wǎng)絡(luò)

  1. importnumpyasnp

  2. defnonlin(x,deriv=False):

  3. if(deriv==True):

  4. returnx*(1-x)

  5. return1/(1+np.exp(-x))

  6. X = np.array([[0,0,1],

  7. [0,1,1],

  8. [1,0,1],

  9. [1,1,1]])

  10. y = np.array([[0],

  11. [1],

  12. [1],

  13. [0]])

  14. np.random.seed(1)

  15. # 隨機(jī)初始化權(quán)重(均值0)

  16. syn0 =2*np.random.random((3,4)) -1

  17. syn1 =2*np.random.random((4,1)) -1

  18. forjinxrange(60000):

  19. # 前向傳播,層0、1、2

  20. l0 = X

  21. l1 = nonlin(np.dot(l0,syn0))

  22. l2 = nonlin(np.dot(l1,syn1))

  23. # 離目標(biāo)值還差多少?

  24. l2_error = y - l2

  25. if(j%10000) ==0:

  26. print"Error:"+ str(np.mean(np.abs(l2_error)))

  27. # 目標(biāo)值在哪個(gè)方向?

  28. # 我們很確定嗎?如果確定,不要改變太多。

  29. l2_delta = l2_error*nonlin(l2,deriv=True)

  30. # 根據(jù)權(quán)重 ,每個(gè)l1值對(duì)l2誤差的貢獻(xiàn)有多大?

  31. l1_error = l2_delta.dot(syn1.T)

  32. # 目標(biāo)l1在哪個(gè)方向?

  33. # 我們很確定嗎?如果確定,不要改變太多。

  34. l1_delta = l1_error * nonlin(l1,deriv=True)

  35. syn1 += l1.T.dot(l2_delta)

  36. syn0 += l0.T.dot(l1_delta)

  1. Error:0.496410031903

  2. Error:0.00858452565325

  3. Error:0.00578945986251

  4. Error:0.00462917677677

  5. Error:0.00395876528027

  6. Error:0.00351012256786

基于Numpy實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò):反向傳播

建議:在兩塊屏幕上打開本文,這樣你就可以一邊查看代碼,一邊閱讀文章了。我寫作下文的時(shí)候基本上就是這么做的。

所有的一切看起來應(yīng)該很相似!這其實(shí)就是將2個(gè)之前的實(shí)現(xiàn)堆疊在一起。l1的輸出是l2的輸入。唯一不同的是第43行。

行43:使用l2的“信度加權(quán)誤差”來確立l1的誤差。為了做到這一點(diǎn),它簡(jiǎn)單地將權(quán)重間的誤差從l2傳給l1. 你可以把它的結(jié)果叫作“貢獻(xiàn)加權(quán)誤差”,因?yàn)槲覀儗W(xué)習(xí)l1中的每個(gè)節(jié)點(diǎn)對(duì)l2中的誤差的“貢獻(xiàn)”有多少。這一步驟稱為“反向傳播”,算法也是因此得名的。我們接著更新syn0,正如我們?cè)陔p層實(shí)現(xiàn)中所做的那樣。

三、結(jié)語和以后的工作

我的建議

如果你對(duì)神經(jīng)網(wǎng)絡(luò)的態(tài)度是嚴(yán)肅的,那我有一個(gè)建議。嘗試基于回憶重建這個(gè)網(wǎng)絡(luò)。我知道這也許聽起來有點(diǎn)瘋狂,但它切切實(shí)實(shí)很有幫助。如果你希望能夠根據(jù)最新的學(xué)術(shù)論文創(chuàng)建任意的神經(jīng)網(wǎng)絡(luò)架構(gòu),或者閱讀和理解不同架構(gòu)的代碼樣例,我認(rèn)為這是一個(gè)殺手級(jí)練習(xí)。即使你使用Torch、Caffe、Theano之類的框架,我仍然認(rèn)為這是有用的。我在進(jìn)行這一練習(xí)之前和神經(jīng)網(wǎng)絡(luò)打過好多年交道,這個(gè)練習(xí)是我在這一領(lǐng)域所做的最好的投資(而且它花不了多久)。

以后的工作

這個(gè)玩具例子仍然需要一些掛件才能真正解決當(dāng)前最先進(jìn)的架構(gòu)。如果你打算進(jìn)一步改進(jìn)你的網(wǎng)絡(luò),下面是一些值得了解的概念。(也許我以后的文章會(huì)涉及其中部分內(nèi)容。)

  • Alpha

  • Bias Units(偏置單元)

  • Mini-Batches

  • Delta Trimming

  • Parameterized Layer Sizes(參數(shù)化的層尺寸)

  • Regularization(正則化)

  • Dropout

  • Momentum(動(dòng)量)

  • Batch Normalization

  • GPU兼容性

  • 其他酷炫特性


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴

原文標(biāo)題:基于Numpy實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò):反向傳播

文章出處:【微信號(hào):jqr_AI,微信公眾號(hào):論智】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    NMSIS神經(jīng)網(wǎng)絡(luò)庫使用介紹

    NMSIS NN 軟件庫是一組高效的神經(jīng)網(wǎng)絡(luò)內(nèi)核,旨在最大限度地提高 Nuclei N 處理器內(nèi)核上的神經(jīng)網(wǎng)絡(luò)的性能并最??大限度地減少其內(nèi)存占用。 該庫分為多個(gè)功能,每個(gè)功能涵蓋特定類別
    發(fā)表于 10-29 06:08

    在Ubuntu20.04系統(tǒng)中訓(xùn)練神經(jīng)網(wǎng)絡(luò)模型的一些經(jīng)驗(yàn)

    本帖欲分享在Ubuntu20.04系統(tǒng)中訓(xùn)練神經(jīng)網(wǎng)絡(luò)模型的一些經(jīng)驗(yàn)。我們采用jupyter notebook作為開發(fā)IDE,以TensorFlow2為訓(xùn)練框架,目標(biāo)是訓(xùn)練一個(gè)手寫數(shù)字識(shí)別的神經(jīng)網(wǎng)絡(luò)
    發(fā)表于 10-22 07:03

    液態(tài)神經(jīng)網(wǎng)絡(luò)(LNN):時(shí)間連續(xù)性與動(dòng)態(tài)適應(yīng)性的神經(jīng)網(wǎng)絡(luò)

    1.算法簡(jiǎn)介液態(tài)神經(jīng)網(wǎng)絡(luò)(LiquidNeuralNetworks,LNN)是一種新型的神經(jīng)網(wǎng)絡(luò)架構(gòu),其設(shè)計(jì)理念借鑒自生物神經(jīng)系統(tǒng),特別是秀麗隱桿線蟲的神經(jīng)結(jié)構(gòu),盡管這種微生物的
    的頭像 發(fā)表于 09-28 10:03 ?707次閱讀
    液態(tài)<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>(LNN):時(shí)間連續(xù)性與動(dòng)態(tài)適應(yīng)性的<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>

    無刷電機(jī)小波神經(jīng)網(wǎng)絡(luò)轉(zhuǎn)子位置檢測(cè)方法的研究

    摘要:論文通過對(duì)無刷電機(jī)數(shù)學(xué)模型的推導(dǎo),得出轉(zhuǎn)角:與三相相電壓之間存在映射關(guān)系,因此構(gòu)建了一個(gè)以三相相電壓為輸人,轉(zhuǎn)角為輸出的小波神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)轉(zhuǎn)角預(yù)測(cè),并采用改進(jìn)遺傳算法來訓(xùn)練網(wǎng)絡(luò)結(jié)構(gòu)與參數(shù),借助
    發(fā)表于 06-25 13:06

    BP神經(jīng)網(wǎng)絡(luò)網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計(jì)原則

    BP(back propagation)神經(jīng)網(wǎng)絡(luò)是一種按照誤差逆向傳播算法訓(xùn)練的多層前饋神經(jīng)網(wǎng)絡(luò),其網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計(jì)原則主要基于以下幾個(gè)方面: 一、層次結(jié)構(gòu) 輸入層 :接收外部輸入信號(hào),不
    的頭像 發(fā)表于 02-12 16:41 ?1254次閱讀

    BP神經(jīng)網(wǎng)絡(luò)與卷積神經(jīng)網(wǎng)絡(luò)的比較

    多層。 每一層都由若干個(gè)神經(jīng)元構(gòu)成,神經(jīng)元之間通過權(quán)重連接。信號(hào)在神經(jīng)網(wǎng)絡(luò)中是前向傳播的,而誤差是反向
    的頭像 發(fā)表于 02-12 15:53 ?1311次閱讀

    BP神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)步驟詳解

    BP神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)步驟主要包括以下幾個(gè)階段:網(wǎng)絡(luò)初始化、前向傳播、誤差計(jì)算、反向傳播和權(quán)重更新。
    的頭像 發(fā)表于 02-12 15:50 ?1121次閱讀

    BP神經(jīng)網(wǎng)絡(luò)的優(yōu)缺點(diǎn)分析

    自學(xué)習(xí)能力 : BP神經(jīng)網(wǎng)絡(luò)能夠通過訓(xùn)練數(shù)據(jù)自動(dòng)調(diào)整網(wǎng)絡(luò)參數(shù),實(shí)現(xiàn)對(duì)輸入數(shù)據(jù)的分類、回歸等任務(wù),無需人工進(jìn)行復(fù)雜的特征工程。 泛化能力強(qiáng) : BP神經(jīng)網(wǎng)絡(luò)通過訓(xùn)練數(shù)據(jù)學(xué)習(xí)到的特征表示
    的頭像 發(fā)表于 02-12 15:36 ?1588次閱讀

    什么是BP神經(jīng)網(wǎng)絡(luò)反向傳播算法

    BP神經(jīng)網(wǎng)絡(luò)反向傳播算法(Backpropagation Algorithm)是一種用于訓(xùn)練神經(jīng)網(wǎng)絡(luò)的有效方法。以下是關(guān)于BP神經(jīng)網(wǎng)絡(luò)
    的頭像 發(fā)表于 02-12 15:18 ?1278次閱讀

    BP神經(jīng)網(wǎng)絡(luò)與深度學(xué)習(xí)的關(guān)系

    BP神經(jīng)網(wǎng)絡(luò)與深度學(xué)習(xí)之間存在著密切的關(guān)系,以下是對(duì)它們之間關(guān)系的介紹: 一、BP神經(jīng)網(wǎng)絡(luò)的基本概念 BP神經(jīng)網(wǎng)絡(luò),即反向傳播
    的頭像 發(fā)表于 02-12 15:15 ?1341次閱讀

    BP神經(jīng)網(wǎng)絡(luò)的基本原理

    BP神經(jīng)網(wǎng)絡(luò)(Back Propagation Neural Network)的基本原理涉及前向傳播反向傳播兩個(gè)核心過程。以下是關(guān)于BP神經(jīng)網(wǎng)絡(luò)
    的頭像 發(fā)表于 02-12 15:13 ?1520次閱讀

    BP神經(jīng)網(wǎng)絡(luò)在圖像識(shí)別中的應(yīng)用

    傳播神經(jīng)網(wǎng)絡(luò)(Back Propagation Neural Network),是一種多層前饋神經(jīng)網(wǎng)絡(luò),主要通過反向傳播算法進(jìn)行學(xué)習(xí)。它通常
    的頭像 發(fā)表于 02-12 15:12 ?1188次閱讀

    如何訓(xùn)練BP神經(jīng)網(wǎng)絡(luò)模型

    BP(Back Propagation)神經(jīng)網(wǎng)絡(luò)是一種經(jīng)典的人工神經(jīng)網(wǎng)絡(luò)模型,其訓(xùn)練過程主要分為兩個(gè)階段:前向傳播反向傳播。以下是訓(xùn)練BP
    的頭像 發(fā)表于 02-12 15:10 ?1466次閱讀

    深度學(xué)習(xí)入門:簡(jiǎn)單神經(jīng)網(wǎng)絡(luò)的構(gòu)建與實(shí)現(xiàn)

    深度學(xué)習(xí)中,神經(jīng)網(wǎng)絡(luò)是核心模型。今天我們用 Python 和 NumPy 構(gòu)建一個(gè)簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)。 神經(jīng)網(wǎng)絡(luò)由多個(gè)神經(jīng)元組成,
    的頭像 發(fā)表于 01-23 13:52 ?846次閱讀

    人工神經(jīng)網(wǎng)絡(luò)的原理和多種神經(jīng)網(wǎng)絡(luò)架構(gòu)方法

    在上一篇文章中,我們介紹了傳統(tǒng)機(jī)器學(xué)習(xí)的基礎(chǔ)知識(shí)和多種算法。在本文中,我們會(huì)介紹人工神經(jīng)網(wǎng)絡(luò)的原理和多種神經(jīng)網(wǎng)絡(luò)架構(gòu)方法,供各位老師選擇。 01 人工神經(jīng)網(wǎng)絡(luò) ? 人工神經(jīng)網(wǎng)絡(luò)模型之所
    的頭像 發(fā)表于 01-09 10:24 ?2256次閱讀
    人工<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>的原理和多種<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>架構(gòu)方法