Подключение через сборщик

Для использования Brain.js в современном JavaScript-проекте рекомендуется подключать библиотеку через сборщики модулей, такие как Webpack, Parcel или Vite. Это позволяет интегрировать библиотеку в структуру проекта, управлять зависимостями и использовать современные возможности ES-модулей.

Установка через npm или yarn

Библиотека распространяется через npm, что делает её доступной для любого проекта, использующего Node.js или фронтенд-сборщики.

npm install brain.js
# или
yarn add brain.js

После установки библиотека появляется в node_modules, и её можно импортировать в проект через стандартный синтаксис ES6:

import brain from 'brain.js';

Для CommonJS-проектов используется синтаксис:

const brain = require('brain.js');

Импорт и инициализация нейронной сети

Brain.js поддерживает несколько типов нейронных сетей, наиболее популярные из которых: NeuralNetwork, LSTM, NeuralNetworkGPU. Инициализация сети производится через создание нового экземпляра соответствующего класса:

const net = new brain.NeuralNetwork({
  hiddenLayers: [10, 20, 10], // Пример конфигурации скрытых слоев
  activation: 'sigmoid',      // Функция активации: 'sigmoid', 'relu', 'leaky-relu', 'tanh'
});

Ключевые параметры:

  • hiddenLayers — массив, задающий количество нейронов в каждом скрытом слое.
  • activation — функция активации нейронов. Влияет на способность сети к обучению сложных нелинейных зависимостей.
  • learningRate — скорость обучения сети (по умолчанию 0.3).

Структура проекта с использованием сборщика

При работе через Webpack или Vite проект может иметь следующую структуру:

project/
│
├─ src/
│  ├─ index.js       // Точка входа приложения
│  ├─ network.js     // Конфигурация нейронной сети
│  └─ data.json      // Набор обучающих данных
│
├─ package.json
└─ webpack.config.js

Пример разделения кода: в network.js создаётся и экспортируется сеть:

import brain from 'brain.js';

export const net = new brain.NeuralNetwork({
  hiddenLayers: [10, 20],
  activation: 'relu',
});

В index.js производится импорт и обучение сети:

import { net } from './network.js';
import trainingData from './data.json';

net.train(trainingData, {
  iterations: 20000,
  log: true,
  logPeriod: 1000,
});

Работа с различными сборщиками

Webpack: необходимо убедиться, что в конфигурации установлен транспайлер Babel для поддержки ES6-модулей. В файле webpack.config.js обычно указывают:

module.exports = {
  entry: './src/index.js',
  output: {
    filename: 'bundle.js',
    path: __dirname + '/dist',
  },
  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        use: 'babel-loader',
      },
    ],
  },
};

Parcel и Vite: эти сборщики автоматически обрабатывают ES-модули, поэтому достаточно указать точку входа:

npx parcel src/index.html
# или
npm run dev (для Vite)

Оптимизация работы через сборщик

  • Использование tree shaking позволяет исключить из финального бандла неиспользуемые части библиотеки.
  • Для фронтенд-проектов лучше использовать NeuralNetworkGPU, если планируется обучение на больших объемах данных. Это позволяет ускорить вычисления за счет WebGL.
import { NeuralNetworkGPU } from 'brain.js';

const netGPU = new NeuralNetworkGPU({
  hiddenLayers: [20, 20],
});
  • Разделение кода: обучение нейронной сети можно вынести в отдельный модуль, чтобы основной бандл оставался минимальным, а обучение запускалось асинхронно при необходимости.

Пример асинхронного обучения

Brain.js позволяет запускать обучение в веб-воркере или в отдельном асинхронном потоке:

const trainNetwork = async (data) => {
  return new Promise((resolve) => {
    const result = net.train(data, {
      iterations: 10000,
      log: true,
      logPeriod: 500,
    });
    resolve(result);
  });
};

trainNetwork(trainingData).then((stats) => {
  console.log('Обучение завершено', stats);
});

Такой подход позволяет не блокировать основной поток исполнения JavaScript, что критично для браузерных приложений.

Выводы по подключению через сборщик

  • Подключение через npm/yarn гарантирует корректное управление версиями библиотеки.
  • ES6-модули обеспечивают чистый импорт и интеграцию с современными сборщиками.
  • Вынос сети в отдельные модули и использование асинхронного обучения оптимизирует структуру проекта и производительность.

Использование Brain.js через сборщик позволяет строить масштабируемые проекты, где нейронные сети интегрированы в общий фронтенд или Node.js-стек без конфликтов зависимостей и с полной поддержкой современных возможностей JavaScript.