Sináptico

Importante: Synaptic 2.x se encuentra en etapa de discusión ahora. No dude en participar
Synaptic es una biblioteca de redes neuronales javascript para node.js y el navegador , su algoritmo generalizado no tiene arquitectura, por lo que puede construir y entrenar básicamente cualquier tipo de arquitecturas de redes neuronales de primer orden o incluso de segundo orden .
Esta biblioteca incluye algunas arquitecturas integradas como perceptrones multicapa , redes de memoria multicapa a largo y corto plazo (LSTM), máquinas de estado líquido o redes Hopfield , y un entrenador capaz de entrenar cualquier red, que incluye tareas / pruebas de entrenamiento integradas. como resolver un XOR, completar una tarea de recuperación de secuencia distraída o una prueba de gramática de Reber incorporada , para que pueda probar y comparar fácilmente el rendimiento de diferentes arquitecturas.
El algoritmo implementado por esta biblioteca se ha tomado del artículo de Derek D. Monner:
Hay referencias a las ecuaciones en ese documento comentadas a través del código fuente.
Introducción
Si no tiene conocimientos previos sobre las redes neuronales, debe comenzar por leer esta guía .
Si desea un ejemplo práctico sobre cómo enviar datos a una red neuronal, consulte este artículo .
Es posible que también desee echar un vistazo a este artículo .
Población
- Resuelve un XOR
- Tarea de recuperación de secuencia discreta
- Aprender filtros de imagen
- Pintar una imagen
- Mapa autoorganizado
- Leer de Wikipedia
- Creación de una red neuronal simple (video)
El código fuente de estas demostraciones se puede encontrar en esta rama .
Empezando
Para probar los ejemplos, consulte la rama gh-pages .
git checkout gh-pages
Otros idiomas
Este README también está disponible en otros idiomas.
- Chino simplificado | Documento chino , gracias a @noraincode .
- Chino tradicional | Chino tradicional , por @NoobTW .
- Japonés | 日本語, gracias a @oshirogo .
Visión general
Installation
En nodo
Puede instalar synaptic con npm :
1npm install synaptic --save
En el navegador
Puede instalar synaptic con bower :
1bower install synaptic
O simplemente puede usar el enlace CDN, amablemente proporcionado 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;
Ahora puede comenzar a crear redes, capacitarlas o usar redes integradas de Architect .
Examples
Perceptrón
Así es como puede crear un perceptrón 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;
Ahora puede probar su nueva red creando un entrenador y enseñando al perceptrón 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 corto plazo
Así es como puede crear una red de memoria simple a largo plazo a corto plazo con puertas de entrada, puertas de olvido, puertas de salida y conexiones de 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;
Estos son ejemplos con fines explicativos, el arquitecto ya incluye perceptrones multicapa y arquitecturas de red LSTM multicapa.
Contribuir
Synaptic es un proyecto Open Source que se inició en Buenos Aires, Argentina, cualquier persona del mundo puede contribuir al desarrollo del proyecto.
Si desea contribuir, no dude en enviar PR, solo asegúrese de ejecutar npm run test y npm run build antes de enviarlo. De esta manera, ejecutará todas las especificaciones de prueba y creará los archivos de distribución web.
Apoyo
Si te gusta este proyecto y quieres mostrar tu apoyo, puedes comprarme una cerveza con dinero mágico de internet :
1
2
3
4BTC: 16ePagGBbHfm2d6esjMXcUBTNgqpnLWNeK
ETH: 0xa423bfe9db2dc125dd3b56f215e09658491cc556
LTC: LeeemeZj6YL6pkTTtEGHFD6idDxHBF2HXa
XMR: 46WNbmwXpYxiBpkbHjAgjC65cyzAxtaaBQjcGpAZquhBKw2r8NtPQniEgMJcwFMCZzSBrEJtmPsTR54MoGBDbjTi2W1XmgM
<3