自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

30行JavaScript代碼,教你分分鐘創(chuàng)建神經(jīng)網(wǎng)絡(luò)

開發(fā) 開發(fā)工具
今天我們將手把手教你如何用30行代碼輕松創(chuàng)建一個(gè)神經(jīng)網(wǎng)絡(luò)。你將學(xué)到如何使用Synaptic.js創(chuàng)建和訓(xùn)練神經(jīng)網(wǎng)絡(luò)。

 

[[203815]]

 

 

作者:Per Harald Borgen
編譯:高寧,Saint,錢天培

 

今天我們將手把手教你如何用30行代碼輕松創(chuàng)建一個(gè)神經(jīng)網(wǎng)絡(luò)。

在本篇文章中,你將學(xué)到如何使用Synaptic.js(https://synaptic.juancazala.com/#/)創(chuàng)建和訓(xùn)練神經(jīng)網(wǎng)絡(luò)。

利用這款工具,我們可以在瀏覽器中用Node.js進(jìn)行深度學(xué)習(xí)。

今天我們要講的例子是一個(gè)非常簡單的神經(jīng)網(wǎng)絡(luò),我們將用它來學(xué)習(xí)邏輯異或方程(XOR equation)。

同時(shí),我也在Scrimba上創(chuàng)建了一個(gè)交互式屏幕錄像。你也可以通過觀看視頻來學(xué)習(xí)本教程。(https://scrimba.com/casts/cast-1980)

在開始編程之前,讓我們先快速瀏覽神經(jīng)網(wǎng)絡(luò)的一些基本概念。

神經(jīng)元和突觸

神經(jīng)網(wǎng)絡(luò)的***個(gè)模塊,是神經(jīng)元。

神經(jīng)元類似一個(gè)函數(shù),你輸入一些值,它就會(huì)輸出返回值。

神經(jīng)元有各種不同的類型。我們的神經(jīng)網(wǎng)絡(luò)將用到sigmoid神經(jīng)元

(https://en.wikipedia.org/wiki/Sigmoid_function),將任何輸入的給定值,壓縮到0到1之間。

下圖中的圓圈就代表一個(gè)sigmoid神經(jīng)元。它的輸入值是5,輸出值是1。箭頭則代表的是神經(jīng)元的突觸,用來連接神經(jīng)網(wǎng)絡(luò)中其它層的神經(jīng)元。

sigmoid神經(jīng)元

為什么會(huì)有一個(gè)紅色的數(shù)字5呢?它是連接到神經(jīng)元的三個(gè)突觸(左邊3個(gè)箭頭)的值之和。

在最左邊,我們看到有兩個(gè)值與所謂的偏差值進(jìn)行了加法運(yùn)算。數(shù)值1和0是綠色的,而偏差值-2是棕色的。

首先,兩個(gè)輸入值與他們的權(quán)重分別相乘,權(quán)重就是藍(lán)色數(shù)字7和3。

然后,我們把他們和偏差值加起來,所得的結(jié)果是5,對(duì)應(yīng)紅色數(shù)字。這個(gè)紅色數(shù)字就是我們?nèi)斯ど窠?jīng)元的輸入值。

由于我們的神經(jīng)元是sigmoid神經(jīng)元,它會(huì)將任何值壓縮到0到1的區(qū)間范圍內(nèi),所以輸出值被壓縮到1。

如果將這些神經(jīng)元的網(wǎng)絡(luò)連接起來,就形成了一個(gè)神經(jīng)網(wǎng)絡(luò)。通過神經(jīng)元間的突觸連接,從輸入到輸出進(jìn)行正向傳播。如下圖所示:

神經(jīng)網(wǎng)絡(luò)的目標(biāo)是訓(xùn)練其泛化能力,例如識(shí)別手寫的數(shù)字或者垃圾郵件。做到好的泛化重要的是通過神經(jīng)網(wǎng)絡(luò)找到合適的權(quán)重和偏差值。如上述例子中的藍(lán)色和棕色數(shù)字。

當(dāng)訓(xùn)練神經(jīng)網(wǎng)絡(luò)時(shí),我們只需要加載大量示例數(shù)據(jù),如手寫的數(shù)字,然后讓神經(jīng)網(wǎng)絡(luò)來預(yù)測正確的數(shù)字。

在每次預(yù)測后,你需要計(jì)算預(yù)測的偏差程度,然后調(diào)整權(quán)重和偏差值使得神經(jīng)網(wǎng)絡(luò)在下一次運(yùn)算中可以預(yù)測的更加準(zhǔn)確。這種學(xué)習(xí)過程被稱為反向傳播。如此重復(fù)上千次,你的神經(jīng)網(wǎng)絡(luò)很快會(huì)精于泛化。

本教程不包括反向傳播的工作原理介紹,但是我找到了3個(gè)好的教程幫助大家理解:

  • 分步介紹反向傳播案例(https://mattmazur.com/2015/03/17/a-step-by-step-backpropagation-example/) – 作者:Matt Mazur
  • 神經(jīng)網(wǎng)路駭客指南(http://karpathy.github.io/neuralnets/) – 作者:Andrej Karpathy
  • 神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)(http://neuralnetworksanddeeplearning.com/chap1.html) – 作者:Michael Nielsen

用代碼搭建神經(jīng)網(wǎng)絡(luò)

現(xiàn)在,你應(yīng)該已經(jīng)對(duì)神經(jīng)網(wǎng)絡(luò)有了基礎(chǔ)概念,那就讓我們進(jìn)入代碼部分吧。

1. 創(chuàng)建神經(jīng)網(wǎng)絡(luò)層

在synaptic中我們使用new layer()函數(shù)來創(chuàng)建。函數(shù)中傳遞的數(shù)字表示的是每一層會(huì)有多少個(gè)神經(jīng)元。

創(chuàng)建神經(jīng)網(wǎng)絡(luò)層

接下來我們將這些層進(jìn)行連接并實(shí)例化一個(gè)神經(jīng)網(wǎng)絡(luò),代碼如下,

創(chuàng)建神經(jīng)網(wǎng)絡(luò)層

這是一個(gè)2-3-1結(jié)構(gòu)的神經(jīng)網(wǎng)絡(luò),可視化表示如下:

創(chuàng)建神經(jīng)網(wǎng)絡(luò)層

2. 訓(xùn)練神經(jīng)網(wǎng)絡(luò)

訓(xùn)練神經(jīng)網(wǎng)絡(luò)

我們共進(jìn)行了20,000次的訓(xùn)練,每一次都進(jìn)行四次正向傳播和反向傳播運(yùn)算,分別傳遞四個(gè)可能的輸入到神經(jīng)網(wǎng)絡(luò):[0,0] [0,1] [1,0] [1,1] 。

我們從myNetwork.activate([0,0])激活函數(shù)開始,[0,0]是神經(jīng)網(wǎng)絡(luò)的輸入值,這個(gè)過程是正向傳播,也被稱為激活網(wǎng)絡(luò)。在每一次正向傳播后我們需要做一次反向傳播,從而更新神經(jīng)網(wǎng)絡(luò)的權(quán)重和偏差值。

反向傳播通過下面這行代碼實(shí)現(xiàn)

  1. myNetwork.propagate(learningRate, [0]) 

learningRate是一個(gè)常數(shù),用來告訴神經(jīng)網(wǎng)絡(luò)每次應(yīng)該對(duì)權(quán)重值進(jìn)行多大程度的調(diào)整。第二個(gè)參數(shù)0表示的是當(dāng)輸入為[0,0]時(shí),正確的輸出參數(shù)是0.

然后,神經(jīng)網(wǎng)絡(luò)將預(yù)測值和真實(shí)值進(jìn)行對(duì)比,來判斷預(yù)測是否正確。

它將比較的結(jié)果作為調(diào)整權(quán)重和偏差值的基礎(chǔ),以便下次的預(yù)測可以更加準(zhǔn)確。

在執(zhí)行這個(gè)過程20,000次后,我們可以通過傳遞四個(gè)可能的輸入到激活網(wǎng)絡(luò),從而判斷目前神經(jīng)網(wǎng)絡(luò)的預(yù)測情況:

如果我們將這些值四舍五入到最近的整數(shù),就將得到異或方程的正確結(jié)果。萬歲!

以上就是教程的全部內(nèi)容了。

雖然我們只了解了神經(jīng)網(wǎng)絡(luò)的皮毛,但這已經(jīng)足夠支持你開始使用Synaptic,并繼續(xù)學(xué)習(xí)。另外,Synaptic的wiki中有很多好的教程,你可以點(diǎn)擊以下鏈接瀏覽

(https://github.com/cazala/synaptic/wiki)。

***,當(dāng)你學(xué)了新知識(shí)的時(shí)候,一定要去進(jìn)行分享,比如創(chuàng)建一個(gè)Scrimba

(https://scrimba.com/)的屏幕錄像或者寫一篇文章!

來源:

https://medium.freecodecamp.org/how-to-create-a-neural-network-in-javascript-in-only-30-lines-of-code-343dafc50d49

【本文是51CTO專欄機(jī)構(gòu)大數(shù)據(jù)文摘的原創(chuàng)譯文,微信公眾號(hào)“大數(shù)據(jù)文摘( id: BigDataDigest)”】

     大數(shù)據(jù)文摘二維碼

戳這里,看該作者更多好文

責(zé)任編輯:趙寧寧 來源: 51CTO專欄
相關(guān)推薦

2017-09-15 13:35:11

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

2017-08-29 09:40:26

JavaScript代碼神經(jīng)網(wǎng)絡(luò)

2019-07-25 08:20:37

代碼開發(fā)神經(jīng)網(wǎng)絡(luò)

2019-05-05 09:46:01

Python代碼神經(jīng)網(wǎng)絡(luò)

2018-12-10 10:00:06

Python神經(jīng)網(wǎng)絡(luò)編程語言

2020-04-20 13:45:32

神經(jīng)網(wǎng)絡(luò)模型代碼

2019-10-28 08:00:00

Keras神經(jīng)網(wǎng)絡(luò)人工智能

2016-09-04 15:42:03

Linux虛擬集群

2023-10-29 18:08:33

GPU神經(jīng)網(wǎng)絡(luò)CPU

2018-07-03 16:10:04

神經(jīng)網(wǎng)絡(luò)生物神經(jīng)網(wǎng)絡(luò)人工神經(jīng)網(wǎng)絡(luò)

2014-05-15 16:00:11

Xcode 5項(xiàng)目清潔

2014-07-18 14:03:06

Android高效編寫代碼

2020-03-16 10:16:19

代碼開發(fā)工具

2021-03-23 09:06:34

下載神器文件下載插件

2015-12-22 11:48:50

javascript閉包

2018-03-21 10:14:38

JavaScript交叉GPU

2018-01-24 10:48:34

神經(jīng)網(wǎng)絡(luò)深度學(xué)習(xí)前端

2023-03-07 18:55:05

代碼機(jī)器學(xué)習(xí)

2025-02-25 14:13:31

2017-09-10 07:07:32

神經(jīng)網(wǎng)絡(luò)數(shù)據(jù)集可視化
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)