sináptico
Importante: ¡ Synaptic 2.x está en etapa de discusión ahora! Siéntete libre de participar
Synaptic es una biblioteca de redes neuronales de 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 a corto plazo (LSTM) multicapa, máquinas de estado líquido o redes Hopfield , y un entrenador capaz de entrenar cualquier red determinada, 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 integrada de Reber , para que pueda probar y comparar fácilmente el rendimiento de diferentes arquitecturas.
El algoritmo implementado por esta biblioteca ha sido tomado del artículo de Derek D. Monner:
Hay referencias a las ecuaciones de ese artículo comentadas a través del código fuente.
Introducción
Si no tienes conocimientos previos sobre Redes Neuronales, debes comenzar leyendo esta guía .
Si desea un ejemplo práctico sobre cómo alimentar datos a una red neuronal, consulte este artículo .
Quizás también quieras echar un vistazo a este artículo .
Población
- Resolver un XOR
- Tarea de recuperación de secuencia discreta
- Aprenda los filtros de imagen
- Pintar una imagen
- Mapa autoorganizado
- Leer de Wikipedia
- Creación de una red neuronal simple (vídeo)
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 | Documentación en chino , gracias a @noraincode .
- Chino tradicional | 繁体中文, por @NoobTW .
- Japonés | 日本语, gracias a @oshirogo .
Descripción general
Installation
en nodo
Puedes instalar synaptic con npm :
1npm install synaptic --save
en el navegador
Puedes instalar synaptic con bower :
1bower install synaptic
O simplemente puede utilizar 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, entrenarlas o utilizar redes integradas desde Architect .
Examples
perceptrón
Así es como puedes 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 puedes probar tu 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 largo plazo
Así es como puedes crear una red simple de memoria a largo plazo con conexiones de puerta de entrada, puerta de olvido, puerta de salida y 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, Architect ya incluye perceptrones multicapa y arquitecturas de red LSTM multicapa.
Contribuir
Synaptic es un proyecto Open Source que comenzó en Buenos Aires, Argentina, cualquier persona en el mundo es bienvenida a 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 invitarme a una cerveza con dinero mágico de Internet :
1
2
3
4BTC: 16ePagGBbHfm2d6esjMXcUBTNgqpnLWNeK
ETH: 0xa423bfe9db2dc125dd3b56f215e09658491cc556
LTC: LeeemeZj6YL6pkTTtEGHFD6idDxHBF2HXa
XMR: 46WNbmwXpYxiBpkbHjAgjC65cyzAxtaaBQjcGpAZquhBKw2r8NtPQniEgMJcwFMCZzSBrEJtmPsTR54MoGBDbjTi2W1XmgM
<3