Замечательный модуль сообщества

Синаптический Статус сборки Присоединяйтесь к чату на 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;

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