Sinàptic
Important: Synaptic 2.x està en fase de discussió ara! No dubteu a participar
Synaptic és una biblioteca de xarxes neuronals javascript per a node.js i el navegador , el seu algorisme generalitzat no té arquitectura, de manera que podeu construir i entrenar bàsicament qualsevol tipus d' arquitectures de xarxes neuronals de primer ordre o fins i tot de segon ordre .
Aquesta biblioteca inclou algunes arquitectures integrades com perceptrons multicapa , xarxes de memòria a curt termini a llarg termini (LSTM), màquines d'estat líquid o xarxes Hopfield , i un entrenador capaç d'entrenar qualsevol xarxa determinada, que inclou tasques/proves d'entrenament integrades. com resoldre un XOR, completar una tasca de recordació de seqüències distraïdes o una prova de gramàtica Reber incrustada , de manera que podeu provar i comparar fàcilment el rendiment de diferents arquitectures.
L'algorisme implementat per aquesta biblioteca s'ha extret de l'article de Derek D. Monner:
Hi ha referències a les equacions d'aquest article comentades a través del codi font.
Introducció
Si no teniu coneixements previs sobre les xarxes neuronals, hauríeu de començar per llegir aquesta guia .
Si voleu un exemple pràctic sobre com alimentar dades a una xarxa neuronal, feu una ullada a aquest article .
També podeu fer una ullada a aquest article .
Demos
- Resol un XOR
- Tasca de recuperació de seqüències discretes
- Apreneu els filtres d'imatge
- Pinta una imatge
- Mapa d'autoorganització
- Llegeix de la Viquipèdia
- Creació d'una xarxa neuronal simple (vídeo)
El codi font d'aquestes demostracions es pot trobar en aquesta branca .
Començant
Per provar els exemples, consulteu la branca gh-pages .
git checkout gh-pages
Altres llengües
Aquest README també està disponible en altres idiomes.
- Xinès simplificat | Documentació xinesa , gràcies a @noraincode .
- Xinès tradicional | 繁体中文, de @NoobTW .
- Japonès | 日本语, gràcies a @oshirogo .
Visió general
Installation
Al node
Podeu instal·lar synaptic amb npm :
1npm install synaptic --save
Al navegador
Podeu instal·lar synaptic amb bower :
1bower install synaptic
O, simplement, podeu utilitzar l'enllaç CDN, proporcionat amablement per 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;
Ara podeu començar a crear xarxes, entrenar-les o utilitzar xarxes integrades de l' Arquitecte .
Examples
Perceptrón
Així és com podeu crear un perceptró simple :
.
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;
Ara podeu provar la vostra nova xarxa creant un entrenador i ensenyant al perceptron a aprendre un XOR
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
Memòria a curt termini
Així és com podeu crear una xarxa senzilla de memòria a curt termini amb porta d'entrada, porta oblidada, porta de sortida i connexions amb mirilla:
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;
Aquests són exemples amb finalitats explicatives, l' Arquitecte ja inclou arquitectures de xarxa Multilayer Perceptrons i Multilayer LSTM.
Contribuir
Synaptic és un projecte de codi obert que va començar a Buenos Aires, Argentina. Qualsevol persona del món pot contribuir al desenvolupament del projecte.
Si voleu contribuir, no dubteu a enviar PR, només assegureu-vos d'executar npm run test i npm run build abans d'enviar-lo. D'aquesta manera, executareu totes les especificacions de prova i creareu els fitxers de distribució web.
Suport
Si t'agrada aquest projecte i vols mostrar el teu suport, pots comprar-me una cervesa amb diners màgics d'Internet :
1
2
3
4BTC: 16ePagGBbHfm2d6esjMXcUBTNgqpnLWNeK
ETH: 0xa423bfe9db2dc125dd3b56f215e09658491cc556
LTC: LeeemeZj6YL6pkTTtEGHFD6idDxHBF2HXa
XMR: 46WNbmwXpYxiBpkbHjAgjC65cyzAxtaaBQjcGpAZquhBKw2r8NtPQniEgMJcwFMCZzSBrEJtmPsTR54MoGBDbjTi2W1XmgM
<3