Módulo comunitario incrible

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

Importante: Synaptic 2.x xa está en fase de discusión. Non dubide en participar

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

Esta biblioteca inclúe algunhas arquitecturas integradas como perceptróns multicapa , redes de memoria multicapa a curto prazo (LSTM), máquinas de estado líquido ou redes Hopfield e un adestrador capaz de adestrar calquera rede, que inclúe tarefas / probas de adestramento incorporadas como resolver un XOR, completar unha tarefa de lembranza de secuencia distraída ou unha proba de Gramática embebida Reber , para que poida probar e comparar facilmente o rendemento de diferentes arquitecturas.

O algoritmo implementado por esta biblioteca tomouse do traballo de Derek D. Monner:

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

Hai referencias ás ecuacións dese artigo comentadas a través do código fonte.

Introdución

Se non ten coñecemento previo sobre as redes neuronais, debería comezar lendo esta guía .

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

Tamén pode querer botar unha ollada a este artigo .

Demos

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

Comezando

Para probar os exemplos, consulte a rama das páxinas gh .

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 desde o arquitecto .

Examples

Perceptron

Así 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

Así é como se pode crear unha rede de memoria a curto prazo sinxela con porta de entrada, porta de esquecemento, porta de saída e conexións de espionaxe:

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 Architect xa inclúe perceptróns multicapa e arquitecturas de rede LSTM multicapa.

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 relacións públicas. Asegúrate de executar npm run test e npm run build antes de envialo. Deste xeito executarás todas as especificacións da proba e crearás os ficheiros de distribución web.

Apoiar

Se che gusta este proxecto e queres amosar o teu apoio, podes mercarme unha cervexa con cartos máxicos en internet :

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

<3