Sináptico

Importante: Synaptic 2.x xa está en fase de discusión. Non dubide en participar
Synaptic é unha biblioteca de redes neuronais javascript para node.js e o navegador , o seu algoritmo xeneralizado non ten arquitectura, polo que pode construír e adestrar basicamente calquera tipo de arquitectura de rede neuronal de primeira orde ou incluso de segunda orde .
Esta biblioteca inclúe algunhas arquitecturas integradas como perceptróns multicapa , redes de memoria multicapa a curto prazo (LSTM), máquinas de estado líquido ou redes Hopfield e un adestrador capaz de adestrar calquera rede, que inclúe tarefas / probas de adestramento incorporadas como resolver un XOR, completar unha tarefa de lembranza de secuencia distraída ou unha proba de Gramática embebida Reber , para que poida probar e comparar facilmente o rendemento de diferentes arquitecturas.
O algoritmo implementado por esta biblioteca tomouse do traballo de Derek D. Monner:
Un algoritmo de adestramento tipo LSTM xeneralizado para redes neuronais recorrentes de segunda orde
Hai referencias ás ecuacións dese artigo comentadas a través do código fonte.
Introdución
Se non ten coñecemento previo sobre as redes neuronais, debería comezar lendo esta guía .
Se queres un exemplo práctico sobre como alimentar datos a unha rede neuronal, bótalle un ollo a este artigo .
Tamén pode querer botar unha ollada a este artigo .
Demos
- Resolve un XOR
- Tarefa de recuperación de secuencia discreta
- Aprende os filtros de imaxe
- Pinta unha imaxe
- Mapa autoorganizado
- Ler da Wikipedia
- Creación dunha rede neuronal simple (vídeo)
O código fonte destas demostracións pódese atopar nesta rama .
Comezando
Para probar os exemplos, consulte a rama das páxinas gh .
git checkout gh-pages
Outras linguas
Este README tamén está dispoñible noutros idiomas.
- Chinese Simplified | Documento chinés , grazas a @noraincode .
- Chinés tradicional | chinés tradicional , de @NoobTW .
- Xaponés | 日本語, grazas a @oshirogo .
Visión xeral
Installation
No nodo
Podes instalar synaptic con npm :
1npm install synaptic --save
No navegador
Podes instalar synaptic con bower :
1bower install synaptic
Ou simplemente pode usar a ligazón CDN, proporcionada por 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;
Agora podes comezar a crear redes, adestralas ou usar redes integradas desde o arquitecto .
Examples
Perceptron
Así podes crear un perceptron sinxelo :
.
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;
Agora podes probar a túa nova rede creando un adestrador e ensinando ao perceptron a aprender 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
Memoria a longo prazo
Así é como se pode crear unha rede de memoria a curto prazo sinxela con porta de entrada, porta de esquecemento, porta de saída e conexións de espionaxe:
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;
Estes son exemplos con fins explicativos, o Architect xa inclúe perceptróns multicapa e arquitecturas de rede LSTM multicapa.
Contribuír
Synaptic é un proxecto de código aberto que comezou en Bos Aires, Arxentina. Calquera persoa do mundo pode contribuír ao desenvolvemento do proxecto.
Se queres contribuír, non dubides en enviar relacións públicas. Asegúrate de executar npm run test e npm run build antes de envialo. Deste xeito executarás todas as especificacións da proba e crearás os ficheiros de distribución web.
Apoiar
Se che gusta este proxecto e queres amosar o teu apoio, podes mercarme unha cervexa con cartos máxicos en internet :
1
2
3
4BTC: 16ePagGBbHfm2d6esjMXcUBTNgqpnLWNeK
ETH: 0xa423bfe9db2dc125dd3b56f215e09658491cc556
LTC: LeeemeZj6YL6pkTTtEGHFD6idDxHBF2HXa
XMR: 46WNbmwXpYxiBpkbHjAgjC65cyzAxtaaBQjcGpAZquhBKw2r8NtPQniEgMJcwFMCZzSBrEJtmPsTR54MoGBDbjTi2W1XmgM
<3