Synaptique
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 :
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
- Résoudre un XOR
- Tâche de rappel de séquence discrète
- Apprendre les filtres d'images
- Peindre une image
- Carte auto-organisée
- Lire sur Wikipédia
- Création d'un réseau neuronal simple (vidéo)
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.
- Chinois simplifié | Documentation en chinois , grâce à @noraincode .
- Chinois traditionnel | 繁体中文, par @NoobTW .
- Japonais | 日本语, merci à @oshirogo .
Aperçu
Installation
Dans le nœud
Vous pouvez installer synaptic avec npm :
1npm install synaptic --save
Dans le navigateur
Vous pouvez installer synaptic avec bower :
1bower 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
6var 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 :
.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22function 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
9var 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 :
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
46function 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
4BTC: 16ePagGBbHfm2d6esjMXcUBTNgqpnLWNeK
ETH: 0xa423bfe9db2dc125dd3b56f215e09658491cc556
LTC: LeeemeZj6YL6pkTTtEGHFD6idDxHBF2HXa
XMR: 46WNbmwXpYxiBpkbHjAgjC65cyzAxtaaBQjcGpAZquhBKw2r8NtPQniEgMJcwFMCZzSBrEJtmPsTR54MoGBDbjTi2W1XmgM
<3