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

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

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

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

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

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

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

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

введение

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

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

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

демос

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

Начало работы

Чтобы попробовать примеры, загляните в ветку gh-pages .

git checkout gh-pages

Другие языки

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

обзор

Installation

В узле

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

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

Вы можете установить синаптик с беседкой :

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

Perceptron

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

персептрон ,

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