Для работы с Synaptic необходимо подключить библиотеку в проект. Если используется Node.js, установка выполняется через npm:
npm install synaptic
Подключение в скрипте:
const synaptic = require('synaptic');
const { Layer, Network, Trainer } = synaptic;
В браузере библиотека может быть подключена через тег
<script>:
<script src="https://cdn.jsdelivr.net/npm/synaptic@1.1.4/dist/synaptic.js"></script>
После подключения доступны основные классы для построения нейронных сетей.
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
});
Ключевой момент: Layer.project создает соединения между
слоями. Каждый нейрон исходного слоя соединяется со всеми нейронами
целевого слоя.
Trainer используется для обучения сети с использованием различных
методов. Основной метод — train, который принимает массив
обучающих примеров и параметры обучения:
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.3,
iterations: 20000,
error: 0.005,
shuffle: true,
log: 1000
});
Ключевые параметры:
rate — скорость обучения. Определяет величину
корректировки весов.iterations — максимальное количество итераций.error — целевой уровень ошибки.shuffle — случайный порядок данных на каждой
итерации.log — интервал вывода информации о процессе
обучения.Для сохранения состояния сети используется метод
toJSON:
const networkJSON = myNetwork.toJSON();
const fs = require('fs');
fs.writeFileSync('network.json', JSON.stringify(networkJSON));
Загрузка сети выполняется через Network.fromJSON:
const savedNetworkJSON = JSON.parse(fs.readFileSync('network.json'));
const loadedNetwork = Network.fromJSON(savedNetworkJSON);
Это позволяет сохранять обученные модели и использовать их повторно.
После обучения сеть можно использовать для предсказаний:
const output = myNetwork.activate([1, 0]);
console.log(output); // [0.987] — пример вероятностного выхода
Если выходной слой содержит несколько нейронов, результат будет массивом значений. Для бинарных задач часто применяют пороговое значение:
const binaryOutput = output.map(value => value > 0.5 ? 1 : 0);
Для автоматизации обучения можно создать скрипт CLI. Основная структура:
#!/usr/bin/env node
const fs = require('fs');
const { Layer, Network, Trainer } = require('synaptic');
function trainXOR() {
const inputLayer = new Layer(2);
const hiddenLayer = new Layer(3);
const outputLayer = new Layer(1);
inputLayer.project(hiddenLayer);
hiddenLayer.project(outputLayer);
const network = new Network({
input: inputLayer,
hidden: [hiddenLayer],
output: outputLayer
});
const trainer = new Trainer(network);
trainer.train([
{ input: [0, 0], output: [0] },
{ input: [0, 1], output: [1] },
{ input: [1, 0], output: [1] },
{ input: [1, 1], output: [0] }
], {
rate: 0.3,
iterations: 20000,
error: 0.005,
shuffle: true,
log: 1000
});
fs.writeFileSync('xor_network.json', JSON.stringify(network.toJSON()));
console.log('Модель обучена и сохранена.');
}
trainXOR();
Особенности скрипта CLI:
#!/usr/bin/env node позволяет запускать
скрипт напрямую.trainXOR инкапсулирует создание и обучение
сети.fs для сохранения модели.process.argv).Trainer поддерживает trainAsync,
trainPattern).Скрипт командной строки становится инструментом для быстрого прототипирования и тестирования нейросетевых моделей без необходимости постоянного редактирования исходного кода.