Impresionante módulo comunitario

sinápticoEstado de construcción Únase al chat en https://synapticjs.slack.com

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:

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

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

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.

Descripción general

Installation

en nodo

Puedes instalar synaptic con npm :

1
npm install synaptic --save
en el navegador

Puedes instalar synaptic con bower :

1
bower 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 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 utilizar redes integradas desde Architect .

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 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 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 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:

memoria larga 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, 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 4
BTC: 16ePagGBbHfm2d6esjMXcUBTNgqpnLWNeK ETH: 0xa423bfe9db2dc125dd3b56f215e09658491cc556 LTC: LeeemeZj6YL6pkTTtEGHFD6idDxHBF2HXa XMR: 46WNbmwXpYxiBpkbHjAgjC65cyzAxtaaBQjcGpAZquhBKw2r8NtPQniEgMJcwFMCZzSBrEJtmPsTR54MoGBDbjTi2W1XmgM

<3