Módulo de comunidad impresionante

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

Importante: Synaptic 2.x está en fase 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:

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

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

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.

Visión general

Installation

En 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, capacitarlas o usar redes integradas de Architect .

Examples

Perceptrón

Así es como puede 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 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:

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, el arquitecto ya incluye perceptrones multicapa y arquitecturas de red LSTM multicapa.

Contribuir

Synaptic es un proyecto de código abierto que se inició en Buenos Aires, Argentina, cualquier persona en el mundo es bienvenido 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 forma, 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 4
BTC: 16ePagGBbHfm2d6esjMXcUBTNgqpnLWNeK ETH: 0xa423bfe9db2dc125dd3b56f215e09658491cc556 LTC: LeeemeZj6YL6pkTTtEGHFD6idDxHBF2HXa XMR: 46WNbmwXpYxiBpkbHjAgjC65cyzAxtaaBQjcGpAZquhBKw2r8NtPQniEgMJcwFMCZzSBrEJtmPsTR54MoGBDbjTi2W1XmgM

<3