Impresionante módulo de comunidad

Sináptico Estado de compilación Únete al chat en https://synapticjs.slack.com

Importante: ¡ Synaptic 2.x está en etapa de discusión ahora! Siéntase libre de 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 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 incorporadas como resolver un XOR, completar una tarea de recuperación de secuencia distraída o una prueba de gramática de Reber integrada , para que pueda probar y comparar fácilmente el rendimiento de diferentes arquitecturas.

El algoritmo implementado por esta biblioteca ha sido tomado del trabajo de Derek D. Monner:

Un algoritmo de entrenamiento tipo LSTM generalizado para redes neuronales recurrentes de segundo orden

Hay referencias a las ecuaciones en ese documento comentadas a través del código fuente.

Introduccion

Si no tiene conocimiento previo sobre las redes neuronales, debe comenzar leyendo esta guía .

Si desea un ejemplo práctico sobre cómo alimentar datos a una red neuronal, eche un vistazo a este artículo .

También puede consultar este artículo .

Demos

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 archivo README también está disponible en otros idiomas.

Resumen

Installation

En el nodo

Puede instalar synaptic con npm :

1
npm install synaptic --save
En el navegador

Puede instalar Synaptic con Bower :

1
bower 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 6
var 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 usar redes integradas del Arquitecto .

Examples

Perceptrón

Así es como puedes crear un perceptrón simple:

perceptrón .

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
function 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 9
var 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 larga a corto plazo

Así es como puede crear una red de memoria simple a corto y largo plazo con puerta de entrada, puerta de olvidar, puerta de salida y conexiones de mirilla:

larga memoria a corto plazo

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 46
function 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 Multilayer LSTM.

Contribuir

Synaptic es un proyecto de código abierto que comenzó en Buenos Aires, Argentina. Cualquier persona en el 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 compilará 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 4
BTC: 16ePagGBbHfm2d6esjMXcUBTNgqpnLWNeK ETH: 0xa423bfe9db2dc125dd3b56f215e09658491cc556 LTC: LeeemeZj6YL6pkTTtEGHFD6idDxHBF2HXa XMR: 46WNbmwXpYxiBpkbHjAgjC65cyzAxtaaBQjcGpAZquhBKw2r8NtPQniEgMJcwFMCZzSBrEJtmPsTR54MoGBDbjTi2W1XmgM

<3