重要訊息: Synaptic 2.x 現在正在討論階段!歡迎參加
Synaptics 是一個為 node.js 和 瀏覽器 環境打造的 javascript 類神經網路庫,它的通用算法是無架構的,所以基本上可以構建和訓練任何類型的一階甚至 二階神經網路體系結構.
這個庫包含一些內建的架構,如多層感知器、多層長短期記憶網路(LSTM)、液體狀態機 和 Hopfield 網路, 和一個能夠訓練任何給定的網路的訓練器, 其中包括 解決異或的內建訓練/測試,完成離散序列記憶任務或嵌入式 Reber 語法測試,因此你可以輕鬆測試和比較不同體系結構的性能。
該庫實現的算法來自 Derek D. Monner 的論文:
參考文獻中的方程已在原始碼中進行了註釋
這裡是 WIKI 的 繁體中文文件
如果你對神經網路沒有任何了解,你應該先 閱讀本指南。
如果你想要一個關於如何將數據提供給神經網路的範例,那麼看看 這篇文章.
你可能還想看看 這篇文章.
- 解決 XOR 運算(Solve an XOR)
- 離散序列記憶任務(Discrete Sequence Recall Task)
- 學習圖像濾波器(Learn Image Filters)
- 畫一幅畫(Paint an Image)
- 自我組織映射圖(Self Organizing Map)
- 閱讀維基百科(Read from Wikipedia)
- 建立簡單的神經網路(影片)Creating a Simple Neural Network (Video)
這些示範的原始碼可以在 這個分支 中找到.
要嘗試這些範例,請切換到 gh-pages 分支.
git checkout gh-pages
你可以使用 npm 安裝 synaptic:
npm install synaptic --save
你可以使用 bower 安裝 synaptic:
bower install synaptic
或者你也可以直接使用 CDNjs 提供的 CDN 連結
<script src="https://cdnjs.cloudflare.com/ajax/libs/synaptic/1.1.4/synaptic.js"></script>
var synaptic = require('synaptic'); // 在瀏覽器環境中不需要這行程式碼
var Neuron = synaptic.Neuron,
Layer = synaptic.Layer,
Network = synaptic.Network,
Trainer = synaptic.Trainer,
Architect = synaptic.Architect;
現在你可以開始建立神經網路,並訓練它們,或者使用 構造器 中內建的神經網路。
如何建立一個簡單的感知器:
function Perceptron(input, hidden, output)
{
// create the layers
var inputLayer = new Layer(input);
var hiddenLayer = new Layer(hidden);
var outputLayer = new Layer(output);
// connect the layers
inputLayer.project(hiddenLayer);
hiddenLayer.project(outputLayer);
// set the layers
this.set({
input: inputLayer,
hidden: [hiddenLayer],
output: outputLayer
});
}
// extend the prototype chain
Perceptron.prototype = new Network();
Perceptron.prototype.constructor = Perceptron;
現在你可以透過建立一個訓練器並教它如何解決 XOR 問題來訓練你的神經網路
var myPerceptron = new Perceptron(2,3,1);
var myTrainer = new Trainer(myPerceptron);
myTrainer.XOR(); // { error: 0.004998819355993572, iterations: 21871, time: 356 }
myPerceptron.activate([0,0]); // 0.0268581547421616
myPerceptron.activate([1,0]); // 0.9829673642853368
myPerceptron.activate([0,1]); // 0.9831714267395621
myPerceptron.activate([1,1]); // 0.02128894618097928
下面是如何建立一個由輸入層、隱藏層、輸出層和窺視孔連接組成的時間遞迴神經網路(LSTM)
function LSTM(input, blocks, output)
{
// create the layers
var inputLayer = new Layer(input);
var inputGate = new Layer(blocks);
var forgetGate = new Layer(blocks);
var memoryCell = new Layer(blocks);
var outputGate = new Layer(blocks);
var outputLayer = new Layer(output);
// connections from input layer
var input = inputLayer.project(memoryCell);
inputLayer.project(inputGate);
inputLayer.project(forgetGate);
inputLayer.project(outputGate);
// connections from memory cell
var output = memoryCell.project(outputLayer);
// self-connection
var self = memoryCell.project(memoryCell);
// peepholes
memoryCell.project(inputGate);
memoryCell.project(forgetGate);
memoryCell.project(outputGate);
// gates
inputGate.gate(input, Layer.gateType.INPUT);
forgetGate.gate(self, Layer.gateType.ONE_TO_ONE);
outputGate.gate(output, Layer.gateType.OUTPUT);
// input to output direct connection
inputLayer.project(outputLayer);
// set the layers of the neural network
this.set({
input: inputLayer,
hidden: [inputGate, forgetGate, memoryCell, outputGate],
output: outputLayer
});
}
// extend the prototype chain
LSTM.prototype = new Network();
LSTM.prototype.constructor = LSTM;
這些是用於說明目的的範例,構造器 中已經內建了多層感知器和多層 LSTM 網路架構。
Synaptic 是一個開放原始碼專案,始於阿根廷的布宜諾斯艾利斯。歡迎世界上任何人為此項目的發展作出貢獻.
如果你想發 PR 到本專案,請務必在提交前執行 npm run test 和 npm run build。這樣將會執行所有測試範例並構建 Web 發佈文件。
如果你喜歡這個專案,並且想對本專案提供支持,可以用神奇的網路貨幣幫我買一杯啤酒:
BTC: 16ePagGBbHfm2d6esjMXcUBTNgqpnLWNeK
ETH: 0xa423bfe9db2dc125dd3b56f215e09658491cc556
XMR: 46WNbmwXpYxiBpkbHjAgjC65cyzAxtaaBQjcGpAZquhBKw2r8NtPQniEgMJcwFMCZzSBrEJtmPsTR54MoGBDbjTi2W1XmgM
<3