Tolles Community-Modul

SynaptischBuild-Status Nehmen Sie am Chat unter https://synapticjs.slack.com teil

Wichtig: Synaptic 2.x befindet sich derzeit in der Diskussion! Nehmen Sie gerne teil

Synaptic ist eine Javascript-Bibliothek für neuronale Netzwerke für node.js und den Browser . Ihr verallgemeinerter Algorithmus ist architekturfrei, sodass Sie grundsätzlich jede Art von neuronalen Netzwerkarchitekturen erster oder sogar zweiter Ordnung erstellen und trainieren können .

Diese Bibliothek umfasst einige integrierte Architekturen wie mehrschichtige Perzeptrone , mehrschichtige Langzeit-Kurzzeitgedächtnisnetzwerke (LSTM), Liquid-State-Maschinen oder Hopfield- Netzwerke sowie einen Trainer, der jedes beliebige Netzwerk trainieren kann, einschließlich integrierter Trainingsaufgaben/-tests B. das Lösen eines XOR, das Abschließen einer Distracted Sequence Recall-Aufgabe oder einen 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 Artikel, die im Quellcode kommentiert sind.

Einführung

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

Wenn Sie ein praktisches Beispiel für die Einspeisung von Daten in ein neuronales Netzwerk wünschen, schauen Sie sich diesen Artikel an .

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

Demos

Den Quellcode dieser Demos finden Sie in diesem Zweig .

Erste Schritte

Um die Beispiele auszuprobieren, schauen Sie sich den gh-pages- Zweig an.

git checkout gh-pages

Andere Sprachen

Diese README-Datei 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 nutzen einfach den CDN-Link, der freundlicherweise von CDNjs bereitgestellt 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 können Sie ein einfaches Perzeptron erstellen :

Perzeptron.

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 können Sie ein einfaches Langzeit-Kurzzeitgedächtnisnetzwerk mit Eingangs-Gate-, Vergessens-Gate-, Ausgangs-Gate- und Guckloch-Verbindungen erstellen:

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 umfasst bereits Multilayer-Perceptrons und Multilayer-LSTM-Netzwerkarchitekturen.

Beitragen

Synaptic ist ein Open-Source-Projekt, das in Buenos Aires, Argentinien, gestartet wurde. Jeder auf der Welt ist willkommen, zur Entwicklung des Projekts beizutragen.

Wenn Sie einen Beitrag leisten möchten, können Sie gerne PRs senden. Stellen Sie einfach sicher, dass Sie „ npm run test“ und „npm run build“ ausführen , bevor Sie es einreichen. Auf diese Weise führen Sie alle Testspezifikationen aus und erstellen die Webverteilungsdateien.

Unterstützung

Wenn Ihnen dieses Projekt gefällt und Sie Ihre Unterstützung zeigen möchten, können Sie mir mit magischem Internetgeld ein Bier kaufen :

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

<3