Module communautaire génial

Synaptique État de la construction Rejoignez le chat sur https://synapticjs.slack.com

Important: Synaptic 2.x est en cours de discussion maintenant! N'hésitez pas à participer

Synaptic est une bibliothèque de réseaux neuronaux javascript pour node.js et le navigateur.Son algorithme généralisé est sans architecture, vous pouvez donc créer et entraîner pratiquement tout type d'architecture de réseau neuronal de premier ordre ou même de second ordre .

Cette bibliothèque comprend quelques architectures intégrées telles que des perceptrons multicouches , des réseaux de mémoire multicouche à long terme (LSTM), des machines à état liquide ou des réseaux Hopfield , et un entraîneur capable d'entraîner n'importe quel réseau donné, qui comprend des tâches / tests de formation intégrés comme la résolution d'un XOR, la réalisation d'une tâche de rappel de séquence distrait ou un test de grammaire Reber intégré , afin que vous puissiez facilement tester et comparer les performances de différentes architectures.

L'algorithme implémenté par cette bibliothèque est tiré de l'article de Derek D. Monner:

Un algorithme d'entraînement généralisé de type LSTM pour les réseaux de neurones récurrents de second ordre

Il y a des références aux équations dans cet article commentées à travers le code source.

introduction

Si vous n'avez aucune connaissance préalable des réseaux de neurones, vous devriez commencer par lire ce guide .

Si vous voulez un exemple pratique sur la façon de fournir des données à un réseau neuronal, jetez un œil à cet article .

Vous pouvez également consulter cet article .

Démos

Le code source de ces démos se trouve dans cette branche .

Commencer

Pour essayer les exemples, consultez la branche gh-pages .

git checkout gh-pages

Autres langues

Ce README est également disponible dans d'autres langues.

Aperçu

Installation

Dans le nœud

Vous pouvez installer synaptic avec npm :

1
npm install synaptic --save
Dans le navigateur

Vous pouvez installer synaptic avec bower :

1
bower install synaptic

Ou vous pouvez simplement utiliser le lien CDN, gracieusement fourni par 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;

Vous pouvez maintenant commencer à créer des réseaux, les former ou utiliser les réseaux intégrés de l' architecte .

Examples

Perceptron

Voici comment créer un perceptron 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;

Vous pouvez maintenant tester votre nouveau réseau en créant un formateur et en apprenant au perceptron à apprendre 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
Mémoire longue durée

Voici comment créer un simple réseau de mémoire à court terme avec une porte d'entrée, une porte d'oubli, une porte de sortie et des connexions judas:

longue mémoire à court terme

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;

Ce sont des exemples à des fins explicatives, l' architecte comprend déjà des architectures de réseau Multilayer Perceptrons et Multilayer LSTM.

Contribuer

Synaptic est un projet Open Source qui a débuté à Buenos Aires, Argentine. N'importe qui dans le monde est le bienvenu pour contribuer au développement du projet.

Si vous souhaitez contribuer, n'hésitez pas à envoyer des PR, assurez-vous simplement d'exécuter npm run test et npm run build avant de le soumettre. De cette façon, vous exécuterez toutes les spécifications de test et construirez les fichiers de distribution Web.

Soutien

Si vous aimez ce projet et que vous souhaitez montrer votre soutien, vous pouvez m'acheter une bière avec de l'argent magique sur Internet :

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

<3