Synaptisch
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:
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
- Los een XOR op
- Discrete volgorde-oproeptaak
- Leer afbeeldingsfilters
- Schilder een afbeelding
- Zelforganiserende kaart
- Lees van Wikipedia
- Een eenvoudig neuraal netwerk creëren (video)
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.
- Vereenvoudigd Chinees | Chinese documentatie , dankzij @noraincode .
- Traditioneel Chinees | 繁体中文, door @NoobTW .
- Japans | 日本语, dankzij @oshirogo .
Overzicht
Installation
In knooppunt
U kunt synaptic installeren met npm :
1npm install synaptic --save
In de browser
Je kunt synaptic installeren met prieel :
1bower 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
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;
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 :
.
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;
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
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
Langetermijngeheugen
Zo kun je een eenvoudig langetermijngeheugennetwerk creëren met ingangspoort-, vergeetpoort-, uitgangspoort- en kijkgaatjesverbindingen:
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;
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
4BTC: 16ePagGBbHfm2d6esjMXcUBTNgqpnLWNeK
ETH: 0xa423bfe9db2dc125dd3b56f215e09658491cc556
LTC: LeeemeZj6YL6pkTTtEGHFD6idDxHBF2HXa
XMR: 46WNbmwXpYxiBpkbHjAgjC65cyzAxtaaBQjcGpAZquhBKw2r8NtPQniEgMJcwFMCZzSBrEJtmPsTR54MoGBDbjTi2W1XmgM
<3