Потрясающий модуль сообщества

СинаптическийСтатус сборки Присоединяйтесь к чату на https://synapticjs.slack.com.

Важно: Synaptic 2.x сейчас находится в стадии обсуждения! Не стесняйтесь участвовать.

Synaptic — это библиотека нейронных сетей Javascript для node.js и браузера . Ее обобщенный алгоритм не имеет архитектуры, поэтому вы можете создавать и обучать практически любой тип архитектуры нейронных сетей первого или даже второго порядка .

Эта библиотека включает в себя несколько встроенных архитектур, таких как многослойные перцептроны , многослойные сети долговременной памяти (LSTM), машины с жидким состоянием или сети Хопфилда , а также тренажер, способный обучать любую данную сеть, который включает встроенные обучающие задачи/тесты. например, решение XOR, выполнение задачи по запоминанию отвлеченной последовательности или встроенного теста грамматики Ребера , чтобы вы могли легко тестировать и сравнивать производительность различных архитектур.

Алгоритм, реализованный этой библиотекой, был взят из статьи Дерека Д. Моннера:

Обобщенный LSTM-подобный алгоритм обучения рекуррентных нейронных сетей второго порядка.

В этой статье есть ссылки на уравнения, прокомментированные в исходном коде.

Введение

Если у вас нет предварительных знаний о нейронных сетях, вам следует начать с прочтения этого руководства .

Если вам нужен практический пример того, как подавать данные в нейронную сеть, то взгляните на эту статью .

Вы также можете взглянуть на эту статью .

Демо

Исходный код этих демок можно найти в этой ветке .

Начиная

Чтобы опробовать примеры, посетите ветку gh-pages .

git checkout gh-pages

Другие языки

Этот README также доступен на других языках.

Обзор

Installation

В узле

Вы можете установить Synaptic с помощью npm :

1
npm install synaptic --save
В браузере

Вы можете установить Synaptic с помощью Bower :

1
bower 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 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;

Теперь вы можете начать создавать сети, обучать их или использовать встроенные сети из Архитектора .

Examples

Персептрон

Вот как вы можете создать простой перцептрон :

персептрон.

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;

Теперь вы можете протестировать свою новую сеть, создав тренер и научив персептрон изучать 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
Длинная кратковременная память

Вот как вы можете создать простую сеть долговременной краткосрочной памяти с входными воротами, воротами забывания, выходными воротами и глазками:

длинная кратковременная память

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;

Это примеры для пояснительных целей. Архитектор уже включает в себя многослойные перцептроны и многоуровневые сетевые архитектуры LSTM.

Способствовать

Synaptic — это проект с открытым исходным кодом, стартовавший в Буэнос-Айресе, Аргентина. Любой человек в мире может внести свой вклад в развитие проекта.

Если вы хотите внести свой вклад, не стесняйтесь присылать PR, просто обязательно запустите npm run test и npm run build перед отправкой. Таким образом, вы запустите все тестовые спецификации и создадите файлы веб-дистрибутива.

Поддерживать

Если вам нравится этот проект и вы хотите выразить свою поддержку, вы можете купить мне пива за волшебные интернет-деньги :

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

<3