Sináptica
Importante: Synaptic 2.x está en fase de discusión agora! Non dubides en participar
Synaptic é unha biblioteca de redes neuronais javascript para node.js e o navegador , o seu algoritmo xeralizado non ten arquitectura, polo que podes construír e adestrar basicamente calquera tipo de arquitecturas de redes neuronais de primeira orde ou incluso de segunda orde .
Esta biblioteca inclúe algunhas arquitecturas integradas como perceptrons multicapa , redes de memoria a longo prazo (LSTM) multicapa, máquinas de estado líquido ou redes Hopfield , e un adestrador capaz de adestrar calquera rede determinada, que inclúe tarefas/probas de adestramento integradas. como resolver un XOR, completar unha tarefa de recuperación de secuencias distraídas ou unha proba de gramática Reber incorporada , para que poida probar e comparar facilmente o rendemento de diferentes arquitecturas.
O algoritmo implementado por esta biblioteca foi tomado do artigo de Derek D. Monner:
Un algoritmo de adestramento xeralizado tipo LSTM para redes neuronais recorrentes de segunda orde
Nese traballo hai referencias ás ecuacións comentadas a través do código fonte.
Introdución
Se non tes coñecementos previos sobre as redes neuronais, deberías comezar lendo esta guía .
Se queres un exemplo práctico de como alimentar datos a unha rede neuronal, bótalle unha ollada a este artigo .
Tamén pode querer botar un ollo a este artigo .
Demos
- Resolve un XOR
- Tarefa de lembranza de secuencias discretas
- Aprende filtros de imaxe
- Pintar unha imaxe
- Mapa de autoorganización
- Ler da Wikipedia
- Creación dunha rede neuronal sinxela (vídeo)
O código fonte destas demostracións pódese atopar nesta rama .
Comezando
Para probar os exemplos, consulta a rama gh-pages .
git checkout gh-pages
Outras linguas
Este README tamén está dispoñible noutros idiomas.
- Chinés simplificado | Documentación en chinés , grazas a @noraincode .
- Chinés tradicional | 繁体中文, por @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 do Architect .
Examples
Perceptrón
Así é como 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
Deste xeito podes crear unha rede sinxela de memoria a longo prazo con conexións de porta de entrada, porta de esquecemento, porta de saída e 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;
Estes son exemplos con fins explicativos, o Arquitecto xa inclúe arquitecturas de rede Multilayer Perceptrons e Multilayer LSTM.
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 PR's, asegúrate de executar npm run test e npm run build antes de envialo. Deste xeito, executarás todas as especificacións de proba e crearás os ficheiros de distribución web.
Apoiar
Se che gusta este proxecto e queres mostrar o teu apoio, podes comprarme unha cervexa con diñeiro máxico de internet :
1
2
3
4BTC: 16ePagGBbHfm2d6esjMXcUBTNgqpnLWNeK
ETH: 0xa423bfe9db2dc125dd3b56f215e09658491cc556
LTC: LeeemeZj6YL6pkTTtEGHFD6idDxHBF2HXa
XMR: 46WNbmwXpYxiBpkbHjAgjC65cyzAxtaaBQjcGpAZquhBKw2r8NtPQniEgMJcwFMCZzSBrEJtmPsTR54MoGBDbjTi2W1XmgM
<3