首頁  >  文章  >  web前端  >  JavaScript 實作簡單的神經網路演算法圖文詳解

JavaScript 實作簡單的神經網路演算法圖文詳解

黄舟
黄舟原創
2017-03-07 14:42:552825瀏覽

神經網路簡介實作簡單的神經網路演算法圖文詳解>

神經網路試圖模擬大腦的神經元之間的關係來處理訊息。它的計算模型通常需要大量彼此連接的節點。每個神經元透過某種特殊的輸出函數來處理來自其它相鄰神經元的加權輸入值。

神經元之間的訊息傳遞的強度,用所謂的加權值來定義,演算法會不斷的調整加權值來實現自我的學習過程。

JavaScript 實作簡單的神經網路演算法圖文詳解

神經網路分為多層,如上圖,有輸入層,隱藏層和輸出層。

JS線性代數套件實作簡單的神經網路演算法圖文詳解>

神經網路的計算涉及到大量的矩陣計算,有許多的線性代數的開源的軟體,Python下有著名的numpy,非常有名。 Javascript也有幾個:

  • http://www.php.cn/

  • http://www.php.cn/

  • http://www.php.cn/ 

#我使用了numericjs,效果還不錯。推薦大家可以試試。

兩層神經網路實作簡單的神經網路演算法圖文詳解>

我們有一些簡單的輸入輸出的資料用來訓練神經網路。這裡每一行代表一條資料。輸入有三個參數,輸出是一個。

JavaScript 實作簡單的神經網路演算法圖文詳解JavaScript 實作簡單的神經網路演算法圖文詳解JavaScript 實作簡單的神經網路演算法圖文詳解0JavaScript 實作簡單的神經網路演算法圖文詳解JavaScript 實作簡單的神經網路演算法圖文詳解#0JavaScript 實作簡單的神經網路演算法圖文詳解JavaScript 實作簡單的神經網路演算法圖文詳解0
Inputs 0 Inputs JavaScript 實作簡單的神經網路演算法圖文詳解 Inputs JavaScript 實作簡單的神經網路演算法圖文詳解 Output
#0 0 JavaScript 實作簡單的神經網路演算法圖文詳解 0
#JavaScript 實作簡單的神經網路演算法圖文詳解 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);
  • 簡單介紹訓練的程式碼和流程

  • X 輸入資料

  • y 輸出資料

  • nonlin, S函數

  • l0,網路第一層,這是等於輸入資料

  • lJavaScript 實作簡單的神經網路演算法圖文詳解,網絡第二層,這裡就是輸出層

syn0,第一層網路的權重

訓練的迭代過程就是先給一個初始的權重,利用這個權重算出一個輸出值,用目標結果減去這個值,得到一個差異值,再利用這個差異值對權重進行修正。

JavaScript 實作簡單的神經網路演算法圖文詳解000次迭代後的網路輸出: [0.0JavaScript 實作簡單的神經網路演算法圖文詳解,0.0JavaScript 實作簡單的神經網路演算法圖文詳解, 0.979, 0.97JavaScript 實作簡單的神經網路演算法圖文詳解]

JavaScript 實作簡單的神經網路演算法圖文詳解000次迭代後的syn0權重值: [7.JavaScript 實作簡單的神經網路演算法圖文詳解66,-0.JavaScript 實作簡單的神經網路演算法圖文詳解JavaScript 實作簡單的神經網路演算法圖文詳解JavaScript 實作簡單的神經網路演算法圖文詳解,-JavaScript 實作簡單的神經網路演算法圖文詳解.JavaScript 實作簡單的神經網路演算法圖文詳解JavaScript 實作簡單的神經網路演算法圖文詳解5]#這裡我們發現第一個節點的權重較大,這個和我們的資料是一致的,透過觀察資料我們也可以發現,輸出值和第一列的輸入值是強相關。如果增加迭代的次數,這個值會更大。 實作簡單的神經網路演算法圖文詳解>三層神經網路#Output #0##0#JavaScript 實作簡單的神經網路演算法圖文詳解JavaScript 實作簡單的神經網路演算法圖文詳解JavaScript 實作簡單的神經網路演算法圖文詳解JavaScript 實作簡單的神經網路演算法圖文詳解
Inputs 0 Inputs JavaScript 實作簡單的神經網路演算法圖文詳解 Inputs JavaScript 實作簡單的神經網路演算法圖文詳解
0 0 JavaScript 實作簡單的神經網路演算法圖文詳解
##0 JavaScript 實作簡單的神經網路演算法圖文詳解 #JavaScript 實作簡單的神經網路演算法圖文詳解
JavaScript 實作簡單的神經網路演算法圖文詳解 JavaScript 實作簡單的神經網路演算法圖文詳解 JavaScript 實作簡單的神經網路演算法圖文詳解 #0

現在我們有了一組新的數據,透過觀察發現,第三列和結果完全無關,第一列和第二列相同時結果為0,否則為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 = [
    [-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 :

JavaScript 實作簡單的神經網路演算法圖文詳解

 以上是JavaJava實作簡單的神經網路演算法圖文詳解的內容,更多相關內容請關注PHP中文網(www.php.cn)!



####### ###
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn