Tolles Community-Modul

Synaptisch Build-Status Treten Sie dem Chat unter https://synapticjs.slack.com bei

Wichtig: Synaptic 2.x befindet sich gerade in der Diskussion!

Synaptic ist eine Javascript-Bibliothek für neuronale Netze für node.js und den Browser . Der verallgemeinerte Algorithmus ist architekturfrei, sodass Sie im Grunde jede Art von neuronalen Netzarchitekturen erster oder sogar zweiter Ordnung erstellen und trainieren können .

Diese Bibliothek enthält einige integrierte Architekturen wie mehrschichtige Perzeptrone , mehrschichtige Langzeit-Kurzzeitgedächtnisnetzwerke (LSTM), Liquid State Machines oder Hopfield- Netzwerke und einen Trainer, der jedes beliebige Netzwerk trainieren kann, der integrierte Trainingsaufgaben/Tests enthält includes B. das Lösen eines XOR, das Ausführen einer Distracted Sequence Recall-Aufgabe oder ein Embedded Reber Grammar- Test, sodass Sie die Leistung verschiedener Architekturen einfach testen und vergleichen können.

Der von dieser Bibliothek implementierte Algorithmus wurde der Arbeit von Derek D. Monner entnommen:

Ein verallgemeinerter LSTM-ähnlicher Trainingsalgorithmus für rekurrente neuronale Netze zweiter Ordnung

Es gibt Verweise auf die Gleichungen in diesem Papier, die durch den Quellcode kommentiert werden.

Einführung

Wenn Sie keine Vorkenntnisse über neuronale Netze haben, sollten Sie zunächst dieses Handbuch lesen .

Wenn Sie ein praktisches Beispiel zum Einspeisen von Daten in ein neuronales Netz haben möchten, lesen Sie diesen Artikel .

Vielleicht möchten Sie auch einen Blick auf diesen Artikel werfen .

Demos

Den Quellcode dieser Demos finden Sie in diesem Zweig .

Einstieg

Um die Beispiele auszuprobieren, besuchen Sie den gh-pages- Zweig.

git checkout gh-pages

Andere Sprachen

Diese README ist auch in anderen Sprachen verfügbar.

Überblick

Installation

Im Knoten

Sie können Synaptic mit npm installieren :

1
npm install synaptic --save
Im Browser

Sie können Synaptic mit Bower installieren :

1
bower install synaptic

Oder Sie verwenden einfach den CDN-Link, der uns freundlicherweise von CDNjs zur Verfügung gestellt wird

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;

Jetzt können Sie damit beginnen, Netzwerke zu erstellen, sie zu trainieren oder integrierte Netzwerke aus dem Architect zu verwenden .

Examples

Perzeptron

So erstellen Sie ein einfaches Perzeptron :

Wahrnehmung.

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;

Jetzt können Sie Ihr neues Netzwerk testen, indem Sie einen Trainer erstellen und dem Perzeptron beibringen, ein XOR zu lernen

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
Langes Kurzzeitgedächtnis

So erstellen Sie ein einfaches Netzwerk mit langem Kurzzeitgedächtnis mit Eingangs-, Vergessen-, Ausgangs- und Guckloch-Verbindungen:

langes Kurzzeitgedächtnis

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;

Dies sind Beispiele zur Erläuterung, der Architect enthält bereits Multilayer Perceptrons und Multilayer LSTM Netzwerkarchitekturen.

Beitragen

Synaptic ist ein Open-Source-Projekt, das in Buenos Aires, Argentinien, gestartet wurde und zu dem jeder auf der Welt eingeladen ist, an der Entwicklung des Projekts mitzuwirken.

Wenn Sie einen Beitrag leisten möchten, senden Sie bitte PRs, stellen Sie einfach sicher, dass Sie npm run test und npm run build ausführen, bevor Sie sie senden . Auf diese Weise führen Sie alle Testspezifikationen aus und erstellen die Web-Distributionsdateien.

Unterstützung

Wenn dir dieses Projekt gefällt und du deine Unterstützung zeigen möchtest, kannst du mir ein Bier mit magischem Internet-Geld kaufen :

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

<3