Fantastico modulo comunitario

SinapticoStato della costruzione Unisciti alla chat su https://synapticjs.slack.com

Importante: Synaptic 2.x è in fase di discussione adesso! Sentitevi liberi di partecipare

Synaptic è una libreria di rete neurale javascript per node.js e il browser , il suo algoritmo generalizzato è privo di architettura, quindi puoi costruire e addestrare praticamente qualsiasi tipo di architettura di rete neurale del primo o anche del secondo ordine .

Questa libreria include alcune architetture integrate come percettroni multistrato , reti di memoria multistrato a lungo termine (LSTM), macchine a stato liquido o reti Hopfield e un trainer in grado di addestrare qualsiasi rete, che include attività/test di addestramento integrati come risolvere uno XOR, completare un'attività di Distracted Sequence Recall o un test di grammatica Reber incorporata , in modo da poter testare e confrontare facilmente le prestazioni di diverse architetture.

L'algoritmo implementato da questa libreria è stato preso dall'articolo di Derek D. Monner:

Un algoritmo di addestramento generalizzato simile a LSTM per reti neurali ricorrenti di secondo ordine

Ci sono riferimenti alle equazioni in quel documento commentate attraverso il codice sorgente.

introduzione

Se non hai alcuna conoscenza preliminare delle reti neurali, dovresti iniziare leggendo questa guida .

Se vuoi un esempio pratico su come fornire dati ad una rete neurale, allora dai un'occhiata a questo articolo .

Potresti anche voler dare un'occhiata a questo articolo .

Demo

Il codice sorgente di queste demo può essere trovato in questo ramo .

Iniziare

Per provare gli esempi, controlla il ramo gh-pages .

git checkout gh-pages

Altre lingue

Questo README è disponibile anche in altre lingue.

Panoramica

Installation

Nel nodo

Puoi installare Synaptic con npm :

1
npm install synaptic --save
Nel browser

Puoi installare Synaptic con Bower :

1
bower install synaptic

Oppure puoi semplicemente utilizzare il collegamento CDN, gentilmente fornito da 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;

Ora puoi iniziare a creare reti, addestrarle o utilizzare le reti integrate nell'Architetto .

Examples

Percettrone

Ecco come puoi creare un semplice percettrone :

percettrone.

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;

Ora puoi testare la tua nuova rete creando un trainer e insegnando al percettrone ad apprendere uno 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 lunga a breve termine

In questo modo è possibile creare una semplice rete di memoria a lungo breve termine con porte di input, gate di dimenticanza, gate di output e connessioni spioncino:

memoria a lungo breve termine

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;

Questi sono esempi a scopo esplicativo, l' Architetto include già le architetture di rete Multilayer Perceptrons e Multilayer LSTM.

Contribuire

Synaptic è un progetto Open Source iniziato a Buenos Aires, Argentina. Chiunque nel mondo è benvenuto a contribuire allo sviluppo del progetto.

Se vuoi contribuire sentiti libero di inviare PR, assicurati solo di eseguire npm run test e npm run build prima di inviarlo. In questo modo eseguirai tutte le specifiche del test e creerai i file di distribuzione web.

Supporto

Se ti piace questo progetto e vuoi dimostrare il tuo sostegno, puoi comprarmi una birra con i soldi magici di Internet :

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

<3