Synaptisch
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:
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
- Lösen Sie ein XOR
- Aufgabe zum Rückruf diskreter Sequenzen
- Lernen Sie Bildfilter
- Malen Sie ein Bild
- Selbstorganisierende Karte
- Lesen Sie aus Wikipedia
- Erstellen eines einfachen neuronalen Netzwerks (Video)
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.
- Vereinfachtes Chinesisch | Chinesische Dokumentation , danke an @noraincode .
- Traditionelles Chinesisch | 繁体中文, von @NoobTW .
- Japanisch | 日本语, danke an @oshirogo .
Überblick
Installation
Im Knoten
Sie können Synaptic mit npm installieren :
1npm install synaptic --save
Im Browser
Sie können Synaptic mit Bower installieren :
1bower 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
6var 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 :
.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22function 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
9var 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:
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
46function 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
4BTC: 16ePagGBbHfm2d6esjMXcUBTNgqpnLWNeK
ETH: 0xa423bfe9db2dc125dd3b56f215e09658491cc556
LTC: LeeemeZj6YL6pkTTtEGHFD6idDxHBF2HXa
XMR: 46WNbmwXpYxiBpkbHjAgjC65cyzAxtaaBQjcGpAZquhBKw2r8NtPQniEgMJcwFMCZzSBrEJtmPsTR54MoGBDbjTi2W1XmgM
<3