Geweldige gemeenschapsmodule

SynaptischBouwstatus Neem deel aan de chat op https://synapticjs.slack.com

Belangrijk: Synaptic 2.x bevindt zich nu in de fase van discussie! Voel je vrij om deel te nemen

Synaptic is een javascript neurale netwerkbibliotheek voor node.js en de browser . Het gegeneraliseerde algoritme is architectuurvrij, zodat u in principe elk type eerste orde of zelfs tweede orde neurale netwerkarchitecturen kunt bouwen en trainen.

Deze bibliotheek bevat een aantal ingebouwde architecturen, zoals meerlaagse perceptrons , meerlaagse langetermijngeheugennetwerken (LSTM), liquid state machines of Hopfield- netwerken, en een trainer die elk bepaald netwerk kan trainen, inclusief ingebouwde trainingstaken/tests zoals het oplossen van een XOR, het voltooien van een Distracted Sequence Recall-taak of een Embedded Reber Grammar- test, zodat u eenvoudig de prestaties van verschillende architecturen kunt testen en vergelijken.

Het door deze bibliotheek geïmplementeerde algoritme is overgenomen uit het artikel van Derek D. Monner:

Een gegeneraliseerd LSTM-achtig trainingsalgoritme voor terugkerende neurale netwerken van de tweede orde

Er zijn verwijzingen naar de vergelijkingen in dat artikel, becommentarieerd via de broncode.

Invoering

Als u geen voorkennis heeft over neurale netwerken, begin dan met het lezen van deze handleiding .

Als je een praktisch voorbeeld wilt van hoe je gegevens aan een neuraal netwerk kunt doorgeven, bekijk dan dit artikel .

Misschien wilt u ook dit artikel eens bekijken .

Demo's

De broncode van deze demo's vindt u in deze branch .

Aan de slag

Om de voorbeelden uit te proberen, ga naar de gh-pages- tak.

git checkout gh-pages

Andere talen

Deze README is ook beschikbaar in andere talen.

Overzicht

Installation

In knooppunt

U kunt synaptic installeren met npm :

1
npm install synaptic --save
In de browser

Je kunt synaptic installeren met prieel :

1
bower install synaptic

Of u kunt eenvoudigweg de CDN-link gebruiken, vriendelijk verstrekt door CDNjs

1
<script src="https://cdnjs.cloudflare.com/ajax/libs/synaptic/1.1.4/synaptic.js"></script>

Usage

1 2 3 4 5 6
var synaptic = require('synaptic'); // this line is not needed in the browser var Neuron = synaptic.Neuron, Layer = synaptic.Layer, Network = synaptic.Network, Trainer = synaptic.Trainer, Architect = synaptic.Architect;

Nu kunt u beginnen met het maken van netwerken, deze trainen of ingebouwde netwerken van de Architect gebruiken .

Examples

Perceptron

Zo kun je een eenvoudige perceptron maken :

perceptron.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
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;

Nu kunt u uw nieuwe netwerk testen door een trainer te maken en de perceptron te leren een XOR te leren

1 2 3 4 5 6 7 8 9
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
Langetermijngeheugen

Zo kun je een eenvoudig langetermijngeheugennetwerk creëren met ingangspoort-, vergeetpoort-, uitgangspoort- en kijkgaatjesverbindingen:

lange kortetermijngeheugen

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
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;

Dit zijn voorbeelden ter verduidelijking; de Architect bevat al Multilayer Perceptrons en Multilayer LSTM-netwerkarchitecturen.

Bijdragen

Synaptic is een Open Source-project dat is gestart in Buenos Aires, Argentinië. Iedereen ter wereld is welkom om bij te dragen aan de ontwikkeling van het project.

Als je een bijdrage wilt leveren, stuur dan gerust PR's, zorg er wel voor dat je npm run test en npm run build uitvoert voordat je het indient. Op deze manier voer je alle testspecificaties uit en bouw je de webdistributiebestanden.

Steun

Als je dit project leuk vindt en je steun wilt betuigen, kun je een biertje voor me kopen met magisch internetgeld :

1 2 3 4
BTC: 16ePagGBbHfm2d6esjMXcUBTNgqpnLWNeK ETH: 0xa423bfe9db2dc125dd3b56f215e09658491cc556 LTC: LeeemeZj6YL6pkTTtEGHFD6idDxHBF2HXa XMR: 46WNbmwXpYxiBpkbHjAgjC65cyzAxtaaBQjcGpAZquhBKw2r8NtPQniEgMJcwFMCZzSBrEJtmPsTR54MoGBDbjTi2W1XmgM

<3