Синаптический
Важно: Synaptic 2.x сейчас находится в стадии обсуждения! Не стесняйтесь участвовать.
Synaptic — это библиотека нейронных сетей Javascript для node.js и браузера . Ее обобщенный алгоритм не имеет архитектуры, поэтому вы можете создавать и обучать практически любой тип архитектуры нейронных сетей первого или даже второго порядка .
Эта библиотека включает в себя несколько встроенных архитектур, таких как многослойные перцептроны , многослойные сети долговременной памяти (LSTM), машины с жидким состоянием или сети Хопфилда , а также тренажер, способный обучать любую данную сеть, который включает встроенные обучающие задачи/тесты. например, решение XOR, выполнение задачи по запоминанию отвлеченной последовательности или встроенного теста грамматики Ребера , чтобы вы могли легко тестировать и сравнивать производительность различных архитектур.
Алгоритм, реализованный этой библиотекой, был взят из статьи Дерека Д. Моннера:
Обобщенный LSTM-подобный алгоритм обучения рекуррентных нейронных сетей второго порядка.
В этой статье есть ссылки на уравнения, прокомментированные в исходном коде.
Введение
Если у вас нет предварительных знаний о нейронных сетях, вам следует начать с прочтения этого руководства .
Если вам нужен практический пример того, как подавать данные в нейронную сеть, то взгляните на эту статью .
Вы также можете взглянуть на эту статью .
Демо
- Решить XOR
- Задача вызова дискретной последовательности
- Изучите фильтры изображений
- Нарисуйте изображение
- Самоорганизующаяся карта
- Читать из Википедии
- Создание простой нейронной сети (Видео)
Исходный код этих демок можно найти в этой ветке .
Начиная
Чтобы опробовать примеры, посетите ветку gh-pages .
git checkout gh-pages
Другие языки
Этот README также доступен на других языках.
- Китайский упрощенный | Документация на китайском языке , спасибо @noraincode .
- Китайский традиционный | 繁体中文, автор @NoobTW .
- Японский | 日本语, спасибо @oshirogo .
Обзор
Installation
В узле
Вы можете установить Synaptic с помощью npm :
1npm install synaptic --save
В браузере
Вы можете установить Synaptic с помощью Bower :
1bower install synaptic
Или вы можете просто использовать ссылку CDN, любезно предоставленную 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;
Теперь вы можете начать создавать сети, обучать их или использовать встроенные сети из Архитектора .
Examples
Персептрон
Вот как вы можете создать простой перцептрон :
.
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;
Теперь вы можете протестировать свою новую сеть, создав тренер и научив персептрон изучать 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
Длинная кратковременная память
Вот как вы можете создать простую сеть долговременной краткосрочной памяти с входными воротами, воротами забывания, выходными воротами и глазками:
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;
Это примеры для пояснительных целей. Архитектор уже включает в себя многослойные перцептроны и многоуровневые сетевые архитектуры LSTM.
Способствовать
Synaptic — это проект с открытым исходным кодом, стартовавший в Буэнос-Айресе, Аргентина. Любой человек в мире может внести свой вклад в развитие проекта.
Если вы хотите внести свой вклад, не стесняйтесь присылать PR, просто обязательно запустите npm run test и npm run build перед отправкой. Таким образом, вы запустите все тестовые спецификации и создадите файлы веб-дистрибутива.
Поддерживать
Если вам нравится этот проект и вы хотите выразить свою поддержку, вы можете купить мне пива за волшебные интернет-деньги :
1
2
3
4BTC: 16ePagGBbHfm2d6esjMXcUBTNgqpnLWNeK
ETH: 0xa423bfe9db2dc125dd3b56f215e09658491cc556
LTC: LeeemeZj6YL6pkTTtEGHFD6idDxHBF2HXa
XMR: 46WNbmwXpYxiBpkbHjAgjC65cyzAxtaaBQjcGpAZquhBKw2r8NtPQniEgMJcwFMCZzSBrEJtmPsTR54MoGBDbjTi2W1XmgM
<3