Impresionante módulo comunitario

SinápticaEstado de construción Únete ao chat en https://synapticjs.slack.com

Importante: Synaptic 2.x está en fase de discusión agora! Non dubides en participar

Synaptic é unha biblioteca de redes neuronais javascript para node.js e o navegador , o seu algoritmo xeralizado non ten arquitectura, polo que podes construír e adestrar basicamente calquera tipo de arquitecturas de redes neuronais de primeira orde ou incluso de segunda orde .

Esta biblioteca inclúe algunhas arquitecturas integradas como perceptrons multicapa , redes de memoria a longo prazo (LSTM) multicapa, máquinas de estado líquido ou redes Hopfield e un adestrador capaz de adestrar calquera rede determinada, que inclúe tarefas/probas de adestramento integradas. como resolver un XOR, completar unha tarefa de recuperación de secuencias distraídas ou unha proba de gramática Reber incorporada , para que poida probar e comparar facilmente o rendemento de diferentes arquitecturas.

O algoritmo implementado por esta biblioteca foi tomado do artigo de Derek D. Monner:

Un algoritmo de adestramento xeralizado tipo LSTM para redes neuronais recorrentes de segunda orde

Nese traballo hai referencias ás ecuacións comentadas a través do código fonte.

Introdución

Se non tes coñecementos previos sobre as redes neuronais, deberías comezar lendo esta guía .

Se queres un exemplo práctico de como alimentar datos a unha rede neuronal, bótalle unha ollada a este artigo .

Tamén pode querer botar un ollo a este artigo .

Demos

O código fonte destas demostracións pódese atopar nesta rama .

Comezando

Para probar os exemplos, consulta a rama gh-pages .

git checkout gh-pages

Outras linguas

Este README tamén está dispoñible noutros idiomas.

Visión xeral

Installation

No nodo

Podes instalar synaptic con npm :

1
npm install synaptic --save
No navegador

Podes instalar synaptic con bower :

1
bower install synaptic

Ou simplemente pode usar a ligazón CDN, proporcionada 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;

Agora podes comezar a crear redes, adestralas ou usar redes integradas do Architect .

Examples

Perceptrón

Así é como podes crear un perceptron sinxelo :

perceptron.

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;

Agora podes probar a túa nova rede creando un adestrador e ensinando ao perceptron 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 longo prazo

Deste xeito podes crear unha rede sinxela de memoria a curto prazo con porta de entrada, porta de esquecemento, porta de saída e conexións de mirilla:

memoria a longo prazo

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;

Estes son exemplos con fins explicativos, o Arquitecto xa inclúe arquitecturas de rede Multilayer Perceptrons e Multilayer LSTM.

Contribuír

Synaptic é un proxecto de código aberto que comezou en Bos Aires, Arxentina. Calquera persoa do mundo pode contribuír ao desenvolvemento do proxecto.

Se queres contribuír, non dubides en enviar PR's, asegúrate de executar npm run test e npm run build antes de envialo. Deste xeito, executarás todas as especificacións de proba e crearás os ficheiros de distribución web.

Apoiar

Se che gusta este proxecto e queres mostrar o teu apoio, podes comprarme unha cervexa con diñeiro máxico de internet :

1 2 3 4
BTC: 16ePagGBbHfm2d6esjMXcUBTNgqpnLWNeK ETH: 0xa423bfe9db2dc125dd3b56f215e09658491cc556 LTC: LeeemeZj6YL6pkTTtEGHFD6idDxHBF2HXa XMR: 46WNbmwXpYxiBpkbHjAgjC65cyzAxtaaBQjcGpAZquhBKw2r8NtPQniEgMJcwFMCZzSBrEJtmPsTR54MoGBDbjTi2W1XmgM

<3