Mòdul de comunitat impressionant

Sinàptic Estat de la compilació Uniu-vos al xat a https://synapticjs.slack.com

Important: Synaptic 2.x ja està en fase de discussió. No dubteu a participar-hi

Synaptic és una biblioteca de xarxes neuronals javascript per a node.js i el navegador , el seu algorisme generalitzat és lliure d’arquitectura, de manera que podeu construir i entrenar bàsicament qualsevol tipus d’ arquitectura 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 multicapa a curt termini (LSTM), màquines d'estat líquid o xarxes Hopfield , i un entrenador capaç d'entrenar qualsevol xarxa, que inclou tasques / proves de formació incorporades com resoldre un XOR, completar una tasca de recuperació de seqüència distreta o una prova de gramàtica Embered Reber , de manera que pugueu provar i comparar fàcilment el rendiment de diferents arquitectures.

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

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

Hi ha referències a les equacions del document comentades a través del codi font.

Introducció

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

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

També us recomanem que consulteu aquest article .

Demostracions

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 utilitzeu l'enllaç CDN, proporcionat 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, formar-les o utilitzar xarxes integrades des de l’ arquitecte .

Examples

Perceptron

Així es pot crear un perceptró simple :

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;

Ara podeu provar la vostra nova xarxa creant un entrenador i ensenyant al perceptró 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í es pot crear una xarxa de memòria a curt termini senzilla a llarg termini amb connexions de porta d'entrada, porta d'oblit, porta de sortida i 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 perceptrons multicapa i arquitectures de xarxa LSTM multicapa.

Contribuir

Synaptic és un projecte de codi obert que va començar a Buenos Aires, Argentina, i tothom pot contribuir al desenvolupament del projecte.

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

Suport

Si us agrada aquest projecte i voleu mostrar el vostre suport, podeu comprar-me una cervesa amb diners màgics a Internet :

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

<3