Module communautaire génial

SynaptiqueStatut de construction Rejoignez le chat sur https://synapticjs.slack.com

Important : Synaptic 2.x est en phase 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 former essentiellement 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 les perceptrons multicouches , les réseaux de mémoire à long terme multicouches (LSTM), les machines à état liquide ou les réseaux Hopfield , et un entraîneur capable de former n'importe quel réseau donné, qui comprend des tâches/tests de formation intégrés. comme résoudre un XOR, effectuer une tâche de rappel de séquence distraite 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 de formation 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 sur les réseaux de neurones, vous devriez commencer par lire ce guide .

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

Vous voudrez peut-être également jeter un œil à 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, aimablement 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' Architect .

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 désormais 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 à long terme

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

mémoire à long terme et à 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 à titre explicatif, l' Architecte inclut déjà les architectures réseau Perceptrons Multicouches et LSTM Multicouches.

Contribuer

Synaptic est un projet Open Source qui a débuté à Buenos Aires, en Argentine. N'importe qui dans le monde est invité à 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.

Soutien

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

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

<3