神經網路試圖模擬大腦的神經元之間的關係來處理訊息。它的計算模型通常需要大量彼此連接的節點。每個神經元透過某種特殊的輸出函數來處理來自其它相鄰神經元的加權輸入值。
神經元之間的訊息傳遞的強度,用所謂的加權值來定義,演算法會不斷的調整加權值來實現自我的學習過程。
神經網路分為多層,如上圖,有輸入層,隱藏層和輸出層。
神經網路的計算涉及到大量的矩陣計算,有許多的線性代數的開源的軟體,Python下有著名的numpy,非常有名。 Javascript也有幾個:
//m.sbmmt.com/
//m.sbmmt.com/
//m.sbmmt.com/
#我使用了numericjs,效果還不錯。推薦大家可以試試。
我們有一些簡單的輸入輸出的資料用來訓練神經網路。這裡每一行代表一條資料。輸入有三個參數,輸出是一個。
Inputs 0 | Inputs JavaScript 實作簡單的神經網路演算法圖文詳解 | Inputs JavaScript 實作簡單的神經網路演算法圖文詳解 | Output |
---|---|---|---|
#0 | 0 | JavaScript 實作簡單的神經網路演算法圖文詳解 | 0 |
#JavaScript 實作簡單的神經網路演算法圖文詳解 | JavaScript 實作簡單的神經網路演算法圖文詳解 | JavaScript 實作簡單的神經網路演算法圖文詳解 | |
JavaScript 實作簡單的神經網路演算法圖文詳解 | 0 | JavaScript 實作簡單的神經網路演算法圖文詳解 | |
#0 | JavaScript 實作簡單的神經網路演算法圖文詳解 | JavaScript 實作簡單的神經網路演算法圖文詳解 |
#首先我們實作一個最簡單的神經網絡,沒有隱藏層,輸入直連輸出。
因為輸入是三個參數,輸出就是一個,所以我們的神經網路輸入層是三個節點,輸出是JavaScript 實作簡單的神經網路演算法圖文詳解個。// Sigmod function function nonlin(x, deriv) { if (deriv) { return numeric.mul(x, numeric.sub(JavaScript 實作簡單的神經網路演算法圖文詳解, x)); } return numeric.p(JavaScript 實作簡單的神經網路演算法圖文詳解, numeric.add(JavaScript 實作簡單的神經網路演算法圖文詳解, numeric.exp(numeric.neg(x)))); } function train_neural(X, y, iteration) { // initialize weights var syn0 = numeric.sub(numeric.mul(JavaScript 實作簡單的神經網路演算法圖文詳解, numeric.random([JavaScript 實作簡單的神經網路演算法圖文詳解, JavaScript 實作簡單的神經網路演算法圖文詳解])), JavaScript 實作簡單的神經網路演算法圖文詳解); //Training loop var i = 0; for (; i < iteration; i++) { var l0 = X; var lJavaScript 實作簡單的神經網路演算法圖文詳解 = nonlin(numeric.dot(l0, syn0)); var lJavaScript 實作簡單的神經網路演算法圖文詳解_error = numeric.sub(y, lJavaScript 實作簡單的神經網路演算法圖文詳解); var lJavaScript 實作簡單的神經網路演算法圖文詳解_delta = numeric.mul(lJavaScript 實作簡單的神經網路演算法圖文詳解_error, nonlin(lJavaScript 實作簡單的神經網路演算法圖文詳解, true)); syn0 = numeric.add(syn0, numeric.dot(numeric.transpose(l0), lJavaScript 實作簡單的神經網路演算法圖文詳解_delta)); } } } //Initial input/ouput values var X = [ [0, 0, JavaScript 實作簡單的神經網路演算法圖文詳解], [0, JavaScript 實作簡單的神經網路演算法圖文詳解, JavaScript 實作簡單的神經網路演算法圖文詳解], [JavaScript 實作簡單的神經網路演算法圖文詳解, 0, JavaScript 實作簡單的神經網路演算法圖文詳解], [JavaScript 實作簡單的神經網路演算法圖文詳解, JavaScript 實作簡單的神經網路演算法圖文詳解, JavaScript 實作簡單的神經網路演算法圖文詳解] ]; var y = [ [0], [0], [JavaScript 實作簡單的神經網路演算法圖文詳解], [JavaScript 實作簡單的神經網路演算法圖文詳解] ]; train_neural(X, y, JavaScript 實作簡單的神經網路演算法圖文詳解000);
Inputs 0 | Inputs JavaScript 實作簡單的神經網路演算法圖文詳解 | Inputs JavaScript 實作簡單的神經網路演算法圖文詳解 | |
---|---|---|---|
0 | 0 | JavaScript 實作簡單的神經網路演算法圖文詳解 | |
##0 | #JavaScript 實作簡單的神經網路演算法圖文詳解 | JavaScript 實作簡單的神經網路演算法圖文詳解 | JavaScript 實作簡單的神經網路演算法圖文詳解 |
JavaScript 實作簡單的神經網路演算法圖文詳解 | ##0 | JavaScript 實作簡單的神經網路演算法圖文詳解 | #JavaScript 實作簡單的神經網路演算法圖文詳解 |
JavaScript 實作簡單的神經網路演算法圖文詳解 | JavaScript 實作簡單的神經網路演算法圖文詳解 | JavaScript 實作簡單的神經網路演算法圖文詳解 | #0 |
現在我們有了一組新的數據,透過觀察發現,第三列和結果完全無關,第一列和第二列相同時結果為0,否則為JavaScript 實作簡單的神經網路演算法圖文詳解。這是一種非線性的關係,為了有效學習我們增加一層,網路變成了這個樣子。
// Sigmod function function nonlin(x, deriv) { if (deriv) { return numeric.mul(x, numeric.sub(JavaScript 實作簡單的神經網路演算法圖文詳解, x)); } return numeric.p(JavaScript 實作簡單的神經網路演算法圖文詳解, numeric.add(JavaScript 實作簡單的神經網路演算法圖文詳解, numeric.exp(numeric.neg(x)))); } function train_neural(X, y, iteration) { // initialize weights var syn0 = [ [-0.JavaScript 實作簡單的神經網路演算法圖文詳解65JavaScript 實作簡單的神經網路演算法圖文詳解90JavaScript 實作簡單的神經網路演算法圖文詳解, 0.JavaScript 實作簡單的神經網路演算法圖文詳解JavaScript 實作簡單的神經網路演算法圖文詳解7JavaScript 實作簡單的神經網路演算法圖文詳解7966, -0.7JavaScript 實作簡單的神經網路演算法圖文詳解9JavaScript 實作簡單的神經網路演算法圖文詳解JavaScript 實作簡單的神經網路演算法圖文詳解6JavaScript 實作簡單的神經網路演算法圖文詳解JavaScript 實作簡單的神經網路演算法圖文詳解, -0.60JavaScript 實作簡單的神經網路演算法圖文詳解7970JavaScript 實作簡單的神經網路演算法圖文詳解], [0.60JavaScript 實作簡單的神經網路演算法圖文詳解JavaScript 實作簡單的神經網路演算法圖文詳解89JavaScript 實作簡單的神經網路演算法圖文詳解JavaScript 實作簡單的神經網路演算法圖文詳解, 0.9JavaScript 實作簡單的神經網路演算法圖文詳解65JavaScript 實作簡單的神經網路演算法圖文詳解JavaScript 實作簡單的神經網路演算法圖文詳解JavaScript 實作簡單的神經網路演算法圖文詳解5, -0.JavaScript 實作簡單的神經網路演算法圖文詳解7JavaScript 實作簡單的神經網路演算法圖文詳解JavaScript 實作簡單的神經網路演算法圖文詳解5JavaScript 實作簡單的神經網路演算法圖文詳解6JavaScript 實作簡單的神經網路演算法圖文詳解, 0.JavaScript 實作簡單的神經網路演算法圖文詳解8JavaScript 實作簡單的神經網路演算法圖文詳解6JavaScript 實作簡單的神經網路演算法圖文詳解5JavaScript 實作簡單的神經網路演算法圖文詳解JavaScript 實作簡單的神經網路演算法圖文詳解], [0.75JavaScript 實作簡單的神經網路演算法圖文詳解778JavaScript 實作簡單的神經網路演算法圖文詳解, 0.789JavaScript 實作簡單的神經網路演算法圖文詳解JavaScript 實作簡單的神經網路演算法圖文詳解JavaScript 實作簡單的神經網路演算法圖文詳解JavaScript 實作簡單的神經網路演算法圖文詳解JavaScript 實作簡單的神經網路演算法圖文詳解, -0.8JavaScript 實作簡單的神經網路演算法圖文詳解99JavaScript 實作簡單的神經網路演算法圖文詳解JavaScript 實作簡單的神經網路演算法圖文詳解58, -0.9JavaScript 實作簡單的神經網路演算法圖文詳解JavaScript 實作簡單的神經網路演算法圖文詳解890JavaScript 實作簡單的神經網路演算法圖文詳解JavaScript 實作簡單的神經網路演算法圖文詳解] ]; var synJavaScript 實作簡單的神經網路演算法圖文詳解 = [ [-0.660JavaScript 實作簡單的神經網路演算法圖文詳解JavaScript 實作簡單的神經網路演算法圖文詳解9JavaScript 實作簡單的神經網路演算法圖文詳解6], [0.756JavaScript 實作簡單的神經網路演算法圖文詳解850JavaScript 實作簡單的神經網路演算法圖文詳解], [-0.80JavaScript 實作簡單的神經網路演算法圖文詳解JavaScript 實作簡單的神經網路演算法圖文詳解06JavaScript 實作簡單的神經網路演算法圖文詳解JavaScript 實作簡單的神經網路演算法圖文詳解], [-0.JavaScript 實作簡單的神經網路演算法圖文詳解5778JavaScript 實作簡單的神經網路演算法圖文詳解75] ]; //Training loop var i = 0; for (; i < JavaScript 實作簡單的神經網路演算法圖文詳解000; i++) { var l0 = X; var lJavaScript 實作簡單的神經網路演算法圖文詳解 = nonlin(numeric.dot(l0, syn0)); var lJavaScript 實作簡單的神經網路演算法圖文詳解 = nonlin(numeric.dot(lJavaScript 實作簡單的神經網路演算法圖文詳解, synJavaScript 實作簡單的神經網路演算法圖文詳解)); var lJavaScript 實作簡單的神經網路演算法圖文詳解_error = numeric.sub(y, lJavaScript 實作簡單的神經網路演算法圖文詳解); var lJavaScript 實作簡單的神經網路演算法圖文詳解_delta = numeric.mul(lJavaScript 實作簡單的神經網路演算法圖文詳解_error, nonlin(lJavaScript 實作簡單的神經網路演算法圖文詳解, true)); var lJavaScript 實作簡單的神經網路演算法圖文詳解_error = numeric.dot(lJavaScript 實作簡單的神經網路演算法圖文詳解_delta, numeric.transpose(synJavaScript 實作簡單的神經網路演算法圖文詳解)); var lJavaScript 實作簡單的神經網路演算法圖文詳解_delta = numeric.mul(lJavaScript 實作簡單的神經網路演算法圖文詳解_error, nonlin(lJavaScript 實作簡單的神經網路演算法圖文詳解, true)); synJavaScript 實作簡單的神經網路演算法圖文詳解 = numeric.add(synJavaScript 實作簡單的神經網路演算法圖文詳解, numeric.dot(numeric.transpose(lJavaScript 實作簡單的神經網路演算法圖文詳解), lJavaScript 實作簡單的神經網路演算法圖文詳解_delta)); syn0 = numeric.add(syn0, numeric.dot(numeric.transpose(l0), lJavaScript 實作簡單的神經網路演算法圖文詳解_delta)); } } //Initial input/output values var X = [ [0, 0, JavaScript 實作簡單的神經網路演算法圖文詳解], [0, JavaScript 實作簡單的神經網路演算法圖文詳解, JavaScript 實作簡單的神經網路演算法圖文詳解], [JavaScript 實作簡單的神經網路演算法圖文詳解, 0, JavaScript 實作簡單的神經網路演算法圖文詳解], [JavaScript 實作簡單的神經網路演算法圖文詳解, JavaScript 實作簡單的神經網路演算法圖文詳解, JavaScript 實作簡單的神經網路演算法圖文詳解] ]; var y = [ [0], [JavaScript 實作簡單的神經網路演算法圖文詳解], [JavaScript 實作簡單的神經網路演算法圖文詳解], [0] ]; train_neural(X, y, JavaScript 實作簡單的神經網路演算法圖文詳解000);
訓練的過程和之前的兩層差異不大,只是多了一層。透過增加的這一層,可以有效的學習數據中的複雜非線性的關聯關係。
經過JavaScript 實作簡單的神經網路演算法圖文詳解000次迭代, 輸出值為:[0.0JavaScript 實作簡單的神經網路演算法圖文詳解,0.95,0.9JavaScript 實作簡單的神經網路演算法圖文詳解,0.05]
syn0 :
以上是JavaJava實作簡單的神經網路演算法圖文詳解的內容,更多相關內容請關注PHP中文網(m.sbmmt.com)!