Подключение библиотеки в браузере и Node.js

Synaptic — это JavaScript-библиотека для создания и обучения нейронных сетей. Она предоставляет гибкий интерфейс для построения сетей различной архитектуры, включая перцептроны, многослойные сети и рекуррентные сети. Подключение библиотеки зависит от среды выполнения: браузера или Node.js.


Подключение в браузере

Для использования Synaptic в браузере библиотека доступна в виде готового скрипта, который можно подключить через тег <script>.

Использование CDN:

<script src="https://cdn.jsdelivr.net/npm/synaptic@1.1.4/dist/synaptic.min.js"></script>

После подключения через CDN все объекты библиотеки становятся доступными через глобальный объект synaptic. Основные компоненты:

  • synaptic.Layer — слой нейронной сети.
  • synaptic.Network — сеть, состоящая из слоев.
  • synaptic.Trainer — тренер для обучения сети.
  • synaptic.Neuron — отдельный нейрон для кастомных архитектур.

Пример создания простой сети из одного скрытого слоя:

const { Layer, Network, Trainer } = 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
});

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
});

В этом примере показано создание многослойной сети и обучение методом обратного распространения ошибки (backpropagation) на простейшей логической функции XOR.


Подключение в Node.js

В среде Node.js библиотека устанавливается через npm:

npm install synaptic

После установки библиотека подключается с помощью require или import (в зависимости от поддержки модулей ES6):

// CommonJS
const synaptic = require('synaptic');
const { Layer, Network, Trainer } = synaptic;

// ES6 modules
// import { Layer, Network, Trainer } from 'synaptic';

Структура работы с Node.js идентична браузерной версии. Основное отличие — отсутствие глобального объекта synaptic; все классы импортируются из модуля.

Пример создания сети в Node.js:

const { Layer, Network, Trainer } = require('synaptic');

const input = new Layer(3);
const hidden = new Layer(4);
const output = new Layer(2);

input.project(hidden);
hidden.project(output);

const network = new Network({
    input: input,
    hidden: [hidden],
    output: output
});

const trainer = new Trainer(network);

trainer.train([
    { input: [0, 0, 1], output: [0, 1] },
    { input: [1, 0, 0], output: [1, 0] }
], {
    rate: 0.2,
    iterations: 10000,
    error: 0.01
});

Особенности интеграции в разных средах

  1. Глобальные объекты и области видимости В браузере synaptic доступен глобально, поэтому можно сразу создавать слои и сети. В Node.js требуется явный импорт классов через require или import.

  2. Совместимость с пакетными менеджерами Для браузера можно использовать <script> и CDN либо собрать проект с помощью bundler (Webpack, Parcel) и npm-пакета. Node.js изначально рассчитан на работу с npm.

  3. Асинхронность и производительность В браузере обучение сети на больших данных может блокировать поток интерфейса. Рекомендуется использовать Web Workers или серверную обработку через Node.js для тяжелых вычислений.

  4. Модули и сборка проекта При работе с современными фронтенд-фреймворками (React, Vue, Angular) рекомендуется подключать Synaptic через npm и импортировать только необходимые компоненты для минимизации размера бандла.


Рекомендации по подключению

  • Для экспериментов и прототипов в браузере удобно использовать CDN-версию.
  • Для производственных приложений и серверной логики предпочтительнее Node.js-версия с npm, позволяющая контролировать зависимости и версии библиотек.
  • Всегда использовать актуальные версии библиотеки, чтобы избежать устаревших методов или багов.
  • В проектах с модульной сборкой рекомендуется импортировать только нужные классы (Layer, Network, Trainer) для снижения объема кода.