Подключение Brain.js через CDN

Brain.js — это мощная библиотека для создания нейронных сетей на JavaScript. Её использование через CDN позволяет быстро интегрировать функционал без установки дополнительных пакетов и настройки сборщиков модулей.

Основы подключения

Для подключения Brain.js через CDN используется тег <script> в HTML-документе. Наиболее распространённые CDN-поставщики: jsDelivr и unpkg. Пример подключения через jsDelivr:

<script src="https://cdn.jsdelivr.net/npm/brain.js@2.2.0/dist/brain-browser.min.js"></script>

Ключевые моменты:

  • Атрибут src указывает на конкретную версию библиотеки. Для стабильной работы рекомендуется фиксировать версию, чтобы избежать неожиданного поведения при обновлении.
  • Подключение должно выполняться до любого кода, который использует Brain.js, иначе будет ошибка ReferenceError.

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

Использование разных типов сетей

Brain.js предоставляет несколько типов нейронных сетей:

  1. feedforward (прямого распространения) — стандартная многослойная сеть для задач классификации и регрессии. Создание и тренировка сети:

    const net = new brain.NeuralNetwork();
    
    net.train([
      { input: { red: 1, green: 0, blue: 0 }, output: { color: 1 } },
      { input: { red: 0, green: 1, blue: 0 }, output: { color: 0 } }
    ]);
    
    const output = net.run({ red: 1, green: 0, blue: 0 });
    console.log(output);

    Важные аспекты:

    • Входные данные должны быть числовыми и нормализованными (обычно в диапазоне 0–1).
    • Выходные данные также представляются в виде числовых значений, соответствующих вероятностям категорий.
  2. recurrent (рекуррентная сеть) — используется для работы с последовательностями и текстовыми данными. Пример создания LSTM-сети через CDN:

    const net = new brain.recurrent.LSTM();
    
    net.train([
      { input: 'Привет', output: 'Здравствуй' },
      { input: 'Как дела?', output: 'Хорошо' }
    ]);
    
    const result = net.run('Привет');
    console.log(result);

    Особенности рекуррентных сетей:

    • Поддерживают обработку последовательных данных.
    • Требуют больше ресурсов и времени для тренировки, чем feedforward.

Настройка параметров сети

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

  • hiddenLayers — массив чисел, определяющий количество нейронов в скрытых слоях.
  • learningRate — скорость обучения (обычно 0.01–0.3).
  • activation — функция активации (sigmoid, relu, leaky-relu, tanh).

Пример конфигурации:

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

Сохранение и восстановление сети

Для работы с обученными сетями важно сохранять их состояние:

// Получение JSON
const json = net.toJSON();

// Восстановление из JSON
const restoredNet = new brain.NeuralNetwork();
restoredNet.fromJSON(json);

Это позволяет избежать повторной тренировки и использовать сети в разных сессиях или проектах.

Практические рекомендации при использовании CDN

  • Загружать библиотеку асинхронно через атрибут defer, чтобы не блокировать рендеринг страницы:
<script src="https://cdn.jsdelivr.net/npm/brain.js@2.2.0/dist/brain-browser.min.js" defer></script>
  • Использовать конкретные версии, чтобы избежать несовместимости при обновлениях.
  • Проверять поддержку браузеров, особенно при работе с recurrent.LSTM, так как старые версии могут некорректно работать с определёнными методами.

Пример комплексного использования

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Brain.js CDN Example</title>
  <script src="https://cdn.jsdelivr.net/npm/brain.js@2.2.0/dist/brain-browser.min.js" defer></script>
  <script defer>
    window.addEventListener('DOMContentLoaded', () => {
      const net = new brain.NeuralNetwork({ hiddenLayers: [3] });
      net.train([
        { input: { a: 0, b: 0 }, output: { sum: 0 } },
        { input: { a: 0, b: 1 }, output: { sum: 1 } },
        { input: { a: 1, b: 0 }, output: { sum: 1 } },
        { input: { a: 1, b: 1 }, output: { sum: 0 } }
      ]);

      const result = net.run({ a: 1, b: 0 });
      console.log('Результат: ', result);
    });
  </script>
</head>
<body>
</body>
</html>

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

Этот подход оптимален для прототипирования, учебных проектов и небольших приложений, где важно быстро интегрировать функционал нейронных сетей.