Mòdul comunitari fantàstic

SinàpticEstat de construcció Uneix-te al xat a https://synapticjs.slack.com

Important: Synaptic 2.x està en fase de discussió ara! No dubteu a participar

Synaptic és una biblioteca de xarxes neuronals javascript per a node.js i el navegador , el seu algorisme generalitzat no té arquitectura, de manera que podeu construir i entrenar bàsicament qualsevol tipus d' arquitectures de xarxes neuronals de primer ordre o fins i tot de segon ordre .

Aquesta biblioteca inclou algunes arquitectures integrades com perceptrons multicapa , xarxes de memòria a curt termini a llarg termini (LSTM), màquines d'estat líquid o xarxes Hopfield , i un entrenador capaç d'entrenar qualsevol xarxa determinada, que inclou tasques/proves d'entrenament integrades. com resoldre un XOR, completar una tasca de recordació de seqüències distraïdes o una prova de gramàtica Reber incrustada , de manera que podeu provar i comparar fàcilment el rendiment de diferents arquitectures.

L'algorisme implementat per aquesta biblioteca s'ha extret de l'article de Derek D. Monner:

Un algorisme d'entrenament generalitzat semblant a LSTM per a xarxes neuronals recurrents de segon ordre

Hi ha referències a les equacions d'aquest article comentades a través del codi font.

Introducció

Si no teniu coneixements previs sobre les xarxes neuronals, hauríeu de començar per llegir aquesta guia .

Si voleu un exemple pràctic sobre com alimentar dades a una xarxa neuronal, feu una ullada a aquest article .

També podeu fer una ullada a aquest article .

Demos

El codi font d'aquestes demostracions es pot trobar en aquesta branca .

Començant

Per provar els exemples, consulteu la branca gh-pages .

git checkout gh-pages

Altres llengües

Aquest README també està disponible en altres idiomes.

Visió general

Installation

Al node

Podeu instal·lar synaptic amb npm :

1
npm install synaptic --save
Al navegador

Podeu instal·lar synaptic amb bower :

1
bower install synaptic

O, simplement, podeu utilitzar l'enllaç CDN, proporcionat amablement per 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;

Ara podeu començar a crear xarxes, entrenar-les o utilitzar xarxes integrades de l' Arquitecte .

Examples

Perceptrón

Així és com podeu crear un perceptró simple :

perceptró.

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;

Ara podeu provar la vostra nova xarxa creant un entrenador i ensenyant al perceptron a aprendre 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
Memòria a curt termini

Així és com podeu crear una xarxa senzilla de memòria a curt termini amb porta d'entrada, porta oblidada, porta de sortida i connexions amb mirilla:

memòria a curt termini

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;

Aquests són exemples amb finalitats explicatives, l' Arquitecte ja inclou arquitectures de xarxa Multilayer Perceptrons i Multilayer LSTM.

Contribuir

Synaptic és un projecte de codi obert que va començar a Buenos Aires, Argentina. Qualsevol persona del món pot contribuir al desenvolupament del projecte.

Si voleu contribuir, no dubteu a enviar PR, només assegureu-vos d'executar npm run test i npm run build abans d'enviar-lo. D'aquesta manera, executareu totes les especificacions de prova i creareu els fitxers de distribució web.

Suport

Si t'agrada aquest projecte i vols mostrar el teu suport, pots comprar-me una cervesa amb diners màgics d'Internet :

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

<3