Библиотека Synaptic представляет собой чистую
JavaScript-реализацию нейронных сетей, позволяющую создавать, обучать и
тестировать различные архитектуры без необходимости сторонних
зависимостей. Для работы с ней можно использовать Node.js или подключать
библиотеку напрямую в браузере через .
Установка через npm:
npm install synaptic
Подключение в коде:
const synaptic = require('synaptic');
Для браузера достаточно добавить скрипт:
После подключения доступны основные классы: Neuron, Layer, Network, Trainer.
В Synaptic сеть строится из слоёв нейронов. Классический подход — трехслойная архитектура: входной слой, скрытый слой и выходной слой.
const { Layer, Network } = require('synaptic');
// Создание слоёв
const inputLayer = new Layer(2); // два входа
const hiddenLayer = new Layer(3); // три нейрона в скрытом слое
const outputLayer = new Layer(1); // один выход
// Соединение слоёв
inputLayer.project(hiddenLayer);
hiddenLayer.project(outputLayer);
// Создание сети
const myNetwork = new Network({
input: inputLayer,
hidden: [hiddenLayer],
output: outputLayer
});
Ключевой момент: слои соединяются методом
.project(), который формирует все связи между нейронами
исходного слоя и целевого.
Для вычисления выхода сети используется метод activate.
Входные данные передаются в виде массива чисел:
const output = myNetwork.activate([0, 1]);
console.log(output);
Каждое число массива соответствует отдельному нейрону входного слоя. После активации сигналы проходят через все слои сети, преобразуясь функциями активации, и возвращается массив выходных значений.
Обучение в Synaptic может быть двух видов: ручное обновление весов или использование встроенного класса Trainer, который реализует популярный метод обратного распространения ошибки (backpropagation).
Метод propagate используется после активации сети:
myNetwork.activate([0, 1]);
myNetwork.propagate(0.3, [1]); // 0.3 — скорость обучения, [1] — целевой результат
Важно: метод propagate корректирует веса сети, минимизируя разницу между ожидаемым и фактическим выходом.
Trainer позволяет автоматизировать процесс обучения на массиве данных:
const { Trainer } = require('synaptic');
const trainer = new Trainer(myNetwork);
trainer.train([
{ input: [0,0], output: [0] },
{ input: [0,1], output: [1] },
{ input: [1,0], output: [1] },
{ input: [1,1], output: [0] }
], {
rate: 0.1,
iterations: 20000,
error: 0.005,
shuffle: true,
log: 1000
});
Параметры обучения:
rate — скорость обучения;iterations — количество итераций;error — порог ошибки для остановки обучения;shuffle — перемешивание тренировочных данных;log — частота вывода статистики.const { Layer, Network, Trainer } = require('synaptic');
// Архитектура сети
const inputLayer = new Layer(2);
const hiddenLayer = new Layer(3);
const outputLayer = new Layer(1);
inputLayer.project(hiddenLayer);
hiddenLayer.project(outputLayer);
const xorNetwork = new Network({
input: inputLayer,
hidden: [hiddenLayer],
output: outputLayer
});
// Данные для обучения
const trainingSet = [
{ input: [0,0], output: [0] },
{ input: [0,1], output: [1] },
{ input: [1,0], output: [1] },
{ input: [1,1], output: [0] }
];
const trainer = new Trainer(xorNetwork);
trainer.train(trainingSet, {
rate: 0.2,
iterations: 5000,
error: 0.005,
shuffle: true
});
// Проверка результатов
console.log(xorNetwork.activate([0, 0])); // ~0
console.log(xorNetwork.activate([0, 1])); // ~1
console.log(xorNetwork.activate([1, 0])); // ~1
console.log(xorNetwork.activate([1, 1])); // ~0
Особенности:
По умолчанию нейроны используют сигмоидальную функцию активации. Synaptic поддерживает также tanh и linear, которые задаются при создании нейрона или слоя:
const { Neuron } = require('synaptic');
const neuron = new Neuron();
neuron.squash = Neuron.squash.TANH;
С помощью настройки функций активации и количества нейронов можно экспериментировать с архитектурой сети для оптимизации обучения и точности.
Сеть можно экспортировать в JSON для последующего использования:
const json = xorNetwork.toJSON();
const restoredNetwork = Network.fromJSON(json);
Это позволяет сохранять обученные модели и загружать их без необходимости повторного обучения.