Sinaptico
Importante: Synaptic 2.x è in fase di discussione adesso! Sentitevi liberi di partecipare
Synaptic è una libreria di rete neurale javascript per node.js e il browser , il suo algoritmo generalizzato è privo di architettura, quindi puoi costruire e addestrare praticamente qualsiasi tipo di architettura di rete neurale del primo o anche del secondo ordine .
Questa libreria include alcune architetture integrate come percettroni multistrato , reti di memoria multistrato a lungo termine (LSTM), macchine a stato liquido o reti Hopfield e un trainer in grado di addestrare qualsiasi rete, che include attività/test di addestramento integrati come risolvere uno XOR, completare un'attività di Distracted Sequence Recall o un test di grammatica Reber incorporata , in modo da poter testare e confrontare facilmente le prestazioni di diverse architetture.
L'algoritmo implementato da questa libreria è stato preso dall'articolo di Derek D. Monner:
Ci sono riferimenti alle equazioni in quel documento commentate attraverso il codice sorgente.
introduzione
Se non hai alcuna conoscenza preliminare delle reti neurali, dovresti iniziare leggendo questa guida .
Se vuoi un esempio pratico su come fornire dati ad una rete neurale, allora dai un'occhiata a questo articolo .
Potresti anche voler dare un'occhiata a questo articolo .
Demo
- Risolvi uno XOR
- Attività di richiamo di sequenze discrete
- Scopri i filtri immagine
- Dipingi un'immagine
- Mappa auto-organizzativa
- Leggi da Wikipedia
- Creazione di una rete neurale semplice (video)
Il codice sorgente di queste demo può essere trovato in questo ramo .
Iniziare
Per provare gli esempi, controlla il ramo gh-pages .
git checkout gh-pages
Altre lingue
Questo README è disponibile anche in altre lingue.
- Cinese semplificato | Documentazione cinese , grazie a @noraincode .
- Cinese tradizionale | 繁体中文, di @NoobTW .
- Giapponese | 日本语, grazie a @oshirogo .
Panoramica
Installation
Nel nodo
Puoi installare Synaptic con npm :
1npm install synaptic --save
Nel browser
Puoi installare Synaptic con Bower :
1bower install synaptic
Oppure puoi semplicemente utilizzare il collegamento CDN, gentilmente fornito da 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;
Ora puoi iniziare a creare reti, addestrarle o utilizzare le reti integrate nell'Architetto .
Examples
Percettrone
Ecco come puoi creare un semplice percettrone :
.
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;
Ora puoi testare la tua nuova rete creando un trainer e insegnando al percettrone ad apprendere uno 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
Memoria lunga a breve termine
In questo modo è possibile creare una semplice rete di memoria a lungo breve termine con porte di input, gate di dimenticanza, gate di output e connessioni spioncino:
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;
Questi sono esempi a scopo esplicativo, l' Architetto include già le architetture di rete Multilayer Perceptrons e Multilayer LSTM.
Contribuire
Synaptic è un progetto Open Source iniziato a Buenos Aires, Argentina. Chiunque nel mondo è benvenuto a contribuire allo sviluppo del progetto.
Se vuoi contribuire sentiti libero di inviare PR, assicurati solo di eseguire npm run test e npm run build prima di inviarlo. In questo modo eseguirai tutte le specifiche del test e creerai i file di distribuzione web.
Supporto
Se ti piace questo progetto e vuoi dimostrare il tuo sostegno, puoi comprarmi una birra con i soldi magici di Internet :
1
2
3
4BTC: 16ePagGBbHfm2d6esjMXcUBTNgqpnLWNeK
ETH: 0xa423bfe9db2dc125dd3b56f215e09658491cc556
LTC: LeeemeZj6YL6pkTTtEGHFD6idDxHBF2HXa
XMR: 46WNbmwXpYxiBpkbHjAgjC65cyzAxtaaBQjcGpAZquhBKw2r8NtPQniEgMJcwFMCZzSBrEJtmPsTR54MoGBDbjTi2W1XmgM
<3