原文出處:https://dev.to/gfish94/brainjs-for-beginners-1g77

Brain.js

Brain.js 是一個用於建立神經網路的 JavaScript 函式庫,非常容易學習和實作。神經網路是一種受人腦啟發並以人腦命名的資料結構。神經網路由節點層組成,每個節點都有相關的權重閾值。如果節點輸出高於閾值,則啟動該神經元並將資料傳送到下一層中的連接節點。在 Brain.js 中,初始化該資料結構的過程就像載入到模組中並呼叫建構函數一樣簡單。

const brain = require('brain.js');

//initialize neural network
const net = new brain.NeuralNetwork();

訓練

圖片描述

這個新建構的物件需要提供一個資料集才能進行預測。 Brain.js 讓這個過程變得非常簡單,您所需要做的就是呼叫「.train」方法並傳入一個物件陣列——每個物件都帶有輸入和輸出的鍵值對。基本網路建構函數僅支援 0 和 1 的陣列,或 0 和 1 的雜湊;然而,還有其他更複雜的模型,允許在資料集中輸入其他資料類型。

//input training dataset
net.train([
  { input: [0, 0], output: [0] },
  { input: [0, 1], output: [1] },
  { input: [1, 0], output: [1] },
  { input: [1, 1], output: [0] },
]);

Run

圖片描述

現在您已經輸入了資料集並訓練了您的人工大腦,您需要在神經網路上呼叫“.run”方法。這將傳回一個陣列,其十進制值對應於您的預期輸出等於 1 的機率。小數點值越高,神經網路認為輸出應該為 1 的可能性越大。

//outputs a probability 
const output1 = net.run([1, 0]);//  [ 0.9327429533004761 ]

const output2 = net.run([0, 0]);//)  [ 0.05645085498690605 ]

const output3 = net.run([1, 1]);//  [ 0.08839469403028488 ]

console.log('output 1:', output1);
console.log('output 2:', output2);
console.log('output 3:', output3);

console.log(Math.round(output1[0]));// => 1

console.log(Math.round(output2[0]));// => 0

console.log(Math.round(output3[0]));// => 0

儲存你訓練過的網絡

圖片描述

透過提供更大的資料集,網路預測預期輸出的能力變得更加準確;然而,對於更大的資料集,或者如果您正在實現一個更複雜的網路模型(這需要在資料集上迭代一定次數才能進行訓練),程式碼執行所需的時間也會增加。可以透過利用 Brain.js 的「.toJSON」和「.fromJSON」將預訓練網路儲存為 JSON 來規避此問題。以下是如何使用 Node.js 的檔案系統模組來儲存和載入網路的範例。

const brain = require('brain.js');
const data = require('./data.json');
const fs = require('fs');

//init neural network
const net = new brain.recurrent.LSTM();

const trainingData = data.map(item => ({
  input: item.message,
  output: item.response
}));

//input training data and configuration object
net.train(trainingData, {
  log: (err) => console.log(err),
  iterations: 500
});

//save trained network to json
const networkState = net.toJSON();
fs.writeFileSync('network_state.json',
  JSON.stringify(networkState),
  'utf-8');
const brain = require('brain.js');
const fs = require('fs');

//init neural network
const net = new brain.recurrent.LSTM();

//load trained network to json
const networkState = JSON.parse(
  fs.readFileSync('network_state.json',
    'utf-8'));

net.fromJSON(networkState);

結論

Brain.js 是一種用 JavaScript 學習和實作神經網路的有趣且簡單的方法。我希望這能激勵更多的人走出去,用 JavaScript 實作機器學習演算法。


共有 0 則留言