Module communautaire génial

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

Important : Synaptic 2.x est actuellement en discussion ! 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' architectures de réseaux neuronaux de premier ordre ou même de deuxième ordre .

Cette bibliothèque comprend quelques architectures intégrées telles que des perceptrons multicouches , des réseaux de mémoire multicouches à long terme (LSTM), des machines à états liquides 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 d'entraînement 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ée , 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 de cet article commentées via 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 transmettre des données à un réseau de neurones, jetez un œil à cet article .

Vous pouvez également jeter un oeil à 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 des réseaux intégrés à partir de l' Architect .

Examples

Perceptron

Voici comment vous pouvez 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 entraîneur 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 à court terme

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

mémoire longue à 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 inclut déjà des architectures de réseau Perceptrons multicouches et LSTM multicouche.

Contribuer

Synaptic est un projet Open Source qui a débuté à Buenos Aires, en 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 créerez les fichiers de distribution Web.

Support

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

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

<3