成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何用30行JavaScript代碼編寫(xiě)神經(jīng)網(wǎng)絡(luò)異或運(yùn)算器

開(kāi)發(fā) 開(kāi)發(fā)工具
本文介紹了一種僅用 30 行 JavaScript 代碼就創(chuàng)建出了一個(gè)神經(jīng)網(wǎng)絡(luò)的教程,而且使用的工具只有 Node.js、Synaptic.js 和瀏覽器。

配置環(huán)境、安裝合適的庫(kù)、下載數(shù)據(jù)集……有時(shí)候?qū)W習(xí)深度學(xué)習(xí)的前期工作很讓人沮喪,如果只是為了試試現(xiàn)在人人都談的深度學(xué)習(xí),做這些麻煩事似乎很不值當(dāng)。但好在我們也有一些更簡(jiǎn)單的方法可以體驗(yàn)深度學(xué)習(xí)。近日,編程學(xué)習(xí)平臺(tái) Scrimba 聯(lián)合創(chuàng)始人 Per Harald Borgen 在 Medium 上發(fā)文介紹了一種僅用 30 行 JavaScript 代碼就創(chuàng)建出了一個(gè)神經(jīng)網(wǎng)絡(luò)的教程,而且使用的工具也只有 Node.js、Synaptic.js 和瀏覽器而已。另外,作者還做了一個(gè)交互式 Scrimba 教程,也許能幫你理解其中的復(fù)雜概念。

  • Synaptic.js:https://synaptic.juancazala.com
  • Node.js:https://nodejs.org
  • Scrimba 教程:https://scrimba.com/casts/cast-1980

Synaptic.js 讓你可以使用 Node.js 和瀏覽器做深度學(xué)習(xí)。在這篇文章中,我將介紹如何使用 Synaptic.js 創(chuàng)建和訓(xùn)練神經(jīng)網(wǎng)絡(luò)。

  1. // 創(chuàng)建網(wǎng)絡(luò)const { Layer, Network } = window.synaptic;var inputLayer = new Layer(2);var hiddenLayer = new Layer(3);var outputLayer = new Layer(1); 
  2. inputLayer.project(hiddenLayer); 
  3. hiddenLayer.project(outputLayer);varmyNetwork = newNetwork({ 
  4. input: inputLayer, 
  5. hidden: [hiddenLayer], 
  6. output: outputLayer 
  7. });// 訓(xùn)練網(wǎng)絡(luò)——學(xué)習(xí)異或運(yùn)算var learningRate = .3;for (var i = 0; i < 20000; i++) 
  8. { // 0,0 => 0 
  9. myNetwork.activate([0,0]); 
  10. myNetwork.propagate(learningRate, [0]); // 0,1 => 1 
  11. myNetwork.activate([0,1]); 
  12. myNetwork.propagate(learningRate, [1]); // 1,0 => 1 
  13. myNetwork.activate([1,0]); 
  14. myNetwork.propagate(learningRate, [1]); // 1,1 => 0 
  15. myNetwork.activate([1,1]); 
  16. myNetwork.propagate(learningRate, [0]); 
  17. }// 測(cè)試網(wǎng)絡(luò)console.log(myNetwork.activate([0,0])); // [0.015020775950893527]console.log(myNetwork.activate([0,1])); // [0.9815816381088985]console.log(myNetwork.activate([1,0])); // [0.9871822457132193]console.log(myNetwork.activate([1,1])); // [0.012950087641929467] 

我們將創(chuàng)建一個(gè)最簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò):一個(gè)可以執(zhí)行異或運(yùn)算的網(wǎng)絡(luò)。上面就是這個(gè)網(wǎng)絡(luò)的全部代碼,但在我們深入解讀這些代碼之前,首先我們先了解一下神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)知識(shí)。

神經(jīng)元和突觸

神經(jīng)網(wǎng)絡(luò)的基本構(gòu)造模塊是神經(jīng)元。神經(jīng)元就像是一個(gè)函數(shù),有幾個(gè)輸入,然后可以得到一個(gè)輸出。神經(jīng)元的種類有很多。我們的網(wǎng)絡(luò)將使用 sigmoid 神經(jīng)元,它可以輸入任何數(shù)字并將其壓縮到 0 到 1 之間。下圖就是一個(gè) sigmoid 神經(jīng)元。它的輸入是 5,輸出是 1。箭頭被稱為突觸,可以將該神經(jīng)元與網(wǎng)絡(luò)中的其它層連接到一起。

 sigmoid 神經(jīng)元

所以,紅色的數(shù)字 5 是哪里來(lái)的?它是左邊的三個(gè)突觸的和,讓我們來(lái)剖析一下。

在最左邊我們可以看到兩個(gè)值和一個(gè)所謂偏置(bias)值。這兩個(gè)值是 1 和 0,用綠色表示。偏置值是 -2,用棕色表示。

首先,這兩個(gè)輸入與它們的權(quán)重(weight)相乘,即藍(lán)色的數(shù)字 7 和 3。***我們將這兩個(gè)值與偏置加到一起就得到了紅色的 5。這就是這個(gè)人工神經(jīng)元的輸入。

因?yàn)檫@是一個(gè) sigmoid 神經(jīng)元,會(huì)將任何值壓縮到 0 到 1 之間,那么這個(gè)輸出可以被壓縮成 1。

如果你將這些神經(jīng)元連接成一個(gè)網(wǎng)絡(luò),你就得到了一個(gè)神經(jīng)網(wǎng)絡(luò)。通過(guò)突觸彼此相連的神經(jīng)元可以向前傳播輸入,從而得到輸出,如下圖所示:

訓(xùn)練神經(jīng)網(wǎng)絡(luò)的目的是讓它能夠進(jìn)行泛化,比如識(shí)別手寫(xiě)的數(shù)字或垃圾郵件。實(shí)現(xiàn)很好的泛化涉及為整個(gè)網(wǎng)絡(luò)找到合適的權(quán)重和偏置值,就像我們上面案例中的藍(lán)色和棕色數(shù)字。

當(dāng)訓(xùn)練一個(gè)神經(jīng)網(wǎng)絡(luò)時(shí),你只需要向其展示大量樣本(比如手寫(xiě)數(shù)字),然后讓其預(yù)測(cè)正確的答案即可。

在每次預(yù)測(cè)之后,你要計(jì)算這個(gè)預(yù)測(cè)的錯(cuò)誤程度,并調(diào)整其權(quán)重和偏置值讓該網(wǎng)絡(luò)在下一輪預(yù)測(cè)時(shí)能更正確一點(diǎn)。這個(gè)學(xué)習(xí)過(guò)程被稱為反向傳播(backpropagation)。如此反復(fù)幾千次,你的網(wǎng)絡(luò)很快就擅長(zhǎng)泛化了。

本教程不會(huì)解釋反向傳播的具體技術(shù)細(xì)節(jié),但如果你有興趣了解,可以參閱下面的文章:

  • 反向傳播的一步步示例:http://mattmazur.com/2015/03/17/a-step-by-step-backpropagation-example/
  • 神經(jīng)網(wǎng)絡(luò)黑客指南:http://karpathy.github.io/neuralnets/
  • 神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí):http://neuralnetworksanddeeplearning.com/chap1.html

代碼

現(xiàn)在你已經(jīng)了解了基本的知識(shí),就開(kāi)始寫(xiě)代碼吧!首先我們需要?jiǎng)?chuàng)建層。我們可以使用 synaptic 中的 new Layer() 函數(shù)。傳遞給該函數(shù)的數(shù)字表示每層應(yīng)該有多少個(gè)神經(jīng)元。

如果你不知道層是什么,可以看看上面提到的交互式教程。

  1. const{Layer,Network}=window.synaptic;varinputLayer =newLayer(2);varhiddenLayer =newLayer(3);varoutputLayer =newLayer(1); 

接下來(lái),我們將這些層連接到一起,并實(shí)例化一個(gè)新網(wǎng)絡(luò),如下:

  1. ); 
  2. hiddenLayer.project(outputLayer);varmyNetwork =newNetwork({ 
  3. input:inputLayer, 
  4. hidden:[hiddenLayer], 
  5. output:outputLayer 
  6. }); 

所以,這就是一個(gè)「2 層-3 層-1 層」的網(wǎng)絡(luò),可以可視化為下圖的形式:

現(xiàn)在訓(xùn)練這個(gè)網(wǎng)絡(luò):

  1. // train the network - learn XORvar learningRate = .3;for (var i = 0; i < 20000; i++) { // 0,0 => 0 
  2. myNetwork.activate([0,0]); 
  3. myNetwork.propagate(learningRate,[0]);// 0,1 => 1 
  4. myNetwork.activate([0,1]); 
  5. myNetwork.propagate(learningRate,[1]);// 1,0 => 1 
  6. myNetwork.activate([1,0]); 
  7. myNetwork.propagate(learningRate,[1]);// 1,1 => 0 
  8. myNetwork.activate([1,1]); 
  9. myNetwork.propagate(learningRate,[0]); 

這里我們運(yùn)行該網(wǎng)絡(luò) 20000 次。每一次我們都前向和反向傳播 4 次,為該網(wǎng)絡(luò)輸入 4 組可能的輸入:[0,0] [0,1] [1,0] [1,1]。

首先我們執(zhí)行 myNetwork.activate([0,0]),其中 [0,0] 是我們發(fā)送給該網(wǎng)絡(luò)的數(shù)據(jù)點(diǎn)。這是前向傳播,也稱為激活這個(gè)網(wǎng)絡(luò)。在每次前向傳播之后,我們需要執(zhí)行反向傳播,這時(shí)候網(wǎng)絡(luò)會(huì)更新自己的權(quán)重和偏置。

反向傳播是通過(guò)這行代碼完成的:myNetwork.propagate(learningRate, [0]),其中 learningRate 是一個(gè)常數(shù),給出了網(wǎng)絡(luò)每次應(yīng)該調(diào)整的權(quán)重的量。第二個(gè)參數(shù) 0 是給定輸入 [0,0] 對(duì)應(yīng)的正確輸出。

然后,該網(wǎng)絡(luò)將自己的預(yù)測(cè)與正確的標(biāo)簽進(jìn)行比較,從而了解自己的正確程度有多少。

然后網(wǎng)絡(luò)使用這個(gè)比較為基礎(chǔ)來(lái)校正自己的權(quán)重和偏置值,這樣讓自己的下一次猜測(cè)更加正確一點(diǎn)。

這個(gè)過(guò)程如此反復(fù) 20000 次之后,我們可以使用所有四種可能的輸入來(lái)檢查網(wǎng)絡(luò)的學(xué)習(xí)情況:

  1. ->[0.015020775950893527]console.log(myNetwork.activate([0,1])); 
  2. ->[0.9815816381088985]console.log(myNetwork.activate([1,0])); 
  3. ->[0.9871822457132193]console.log(myNetwork.activate([1,1])); 
  4. ->[0.012950087641929467] 

如果我們將這些值四舍五入到最近的整數(shù),我們就得到了正確的異或運(yùn)算結(jié)果。

這樣就完成了。盡管這僅僅只碰到了神經(jīng)網(wǎng)絡(luò)的表皮,但也足以幫助你進(jìn)一步探索 Synaptic 和繼續(xù)學(xué)習(xí)了。https://github.com/cazala/synaptic/wiki 這里還包含了更多好教程。

原文:

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

【本文是51CTO專欄機(jī)構(gòu)“機(jī)器之心”的原創(chuàng)譯文,微信公眾號(hào)“機(jī)器之心( id: almosthuman2014)”】

 

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

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

2017-09-15 13:35:11

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

2017-09-18 08:08:33

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

2017-04-26 08:31:10

神經(jīng)網(wǎng)絡(luò)自然語(yǔ)言PyTorch

2019-10-28 08:00:00

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

2009-06-11 16:11:26

Java運(yùn)算器一則運(yùn)算

2019-07-25 08:20:37

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

2018-02-05 08:58:36

Python神經(jīng)網(wǎng)絡(luò)識(shí)別圖像

2019-05-05 09:46:01

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

2024-06-28 08:15:02

2024-06-11 08:19:34

2020-04-20 13:45:32

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

2022-05-18 16:06:15

位運(yùn)算異或運(yùn)算

2021-11-10 09:57:02

異或運(yùn)算應(yīng)用

2017-06-19 15:12:30

Uber神經(jīng)網(wǎng)絡(luò)事件預(yù)測(cè)

2018-06-19 08:35:51

情感分析數(shù)據(jù)集代碼

2017-07-27 10:46:44

神經(jīng)網(wǎng)絡(luò)機(jī)器學(xué)習(xí)強(qiáng)化學(xué)習(xí)

2017-06-11 23:38:43

進(jìn)化圖像神經(jīng)網(wǎng)絡(luò)

2020-08-06 10:11:13

神經(jīng)網(wǎng)絡(luò)機(jī)器學(xué)習(xí)算法

2018-07-03 16:10:04

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

2022-05-23 15:02:19

異或運(yùn)算面試真題
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 青青艹在线视频 | com.色.www在线观看 | 亚洲在线一区二区三区 | 免费特级黄毛片 | 精品久久久久久久久久久久久久 | 中文字幕一区二区三区在线观看 | 欧美一区二区久久 | 国产精品一区二区三区四区 | 国产精品一区二区视频 | 在线婷婷 | 孕妇一级毛片 | 久草资源在线视频 | 亚洲欧美精品在线观看 | 精品国产青草久久久久福利 | a级片播放 | 久久婷婷麻豆国产91天堂 | 一区二区国产精品 | 欧洲妇女成人淫片aaa视频 | 亚洲第一天堂无码专区 | 久久99视频 | 日韩国产一区 | 最新国产精品 | 精品一区二区三区免费视频 | 激情av网站| 久草网址 | 日韩精品成人av | 免费国产一区二区 | 在线观看第一页 | 欧美午夜一区二区三区免费大片 | 国产特一级黄色片 | 国产区一区 | 国产一区二区影院 | 夜夜操天天操 | 一级电影免费看 | 精品久久国产老人久久综合 | 青青草一区 | 一区二区三区免费观看 | 成人深夜小视频 | 欧美在线视频网站 | 欧美日产国产成人免费图片 | 韩日精品一区 |