Метод run и получение результата

Библиотека Brain.js предоставляет высокоуровневый интерфейс для работы с нейронными сетями на JavaScript. Одной из ключевых операций после обучения сети является получение предсказаний на новых данных. Для этого используется метод run.

Основы работы метода run

Метод run применяется к обученной сети и принимает на вход вектор признаков, соответствующий формату данных, использованных при обучении. Он возвращает результат вычислений сети, который может быть представлен в разных формах в зависимости от типа сети:

  • Feedforward Neural Network (обычная полносвязная сеть) возвращает объект с предсказанными значениями или массив чисел при использовании output в виде массива.
  • Recurrent Neural Network (RNN) возвращает массив вероятностей или строк, если сеть была обучена на последовательностях.

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

const brain = require('brain.js');
const net = new brain.NeuralNetwork();

net.train([
  { input: { r: 0.03, g: 0.7, b: 0.5 }, output: { light: 1 } },
  { input: { r: 0.16, g: 0.09, b: 0.2 }, output: { dark: 1 } }
]);

const result = net.run({ r: 0.05, g: 0.6, b: 0.5 });
console.log(result);

В этом примере result будет объектом вида { light: 0.85, dark: 0.15 }, где числа — это вероятность соответствующей категории.

Форматы данных для run

Важно понимать, что формат входных данных должен совпадать с форматом, используемым при обучении:

  • Объект вида { feature1: value1, feature2: value2 } — стандартный способ для полносвязных сетей.
  • Массив чисел [0.03, 0.7, 0.5] — используется, когда input при обучении был представлен массивом.
  • Для RNN вход может быть строкой "пример текста" или массивом элементов последовательности, например ["a", "b", "c"].

Получение наибольшей вероятности

В случае категориальных задач часто требуется получить категорию с максимальной вероятностью. Это делается через нахождение ключа с максимальным значением в объекте результата:

const prediction = net.run({ r: 0.05, g: 0.6, b: 0.5 });
const label = Object.keys(prediction).reduce((a, b) => prediction[a] > prediction[b] ? a : b);
console.log(label); // 'light'

Использование run с рекуррентными сетями

Для RNN метод run может работать с последовательностями разной длины. Например, для прогнозирования текста:

const net = new brain.recurrent.LSTM();
net.train([
  { input: "hello", output: "world" },
  { input: "good", output: "morning" }
]);

const output = net.run("hello");
console.log(output); // вероятно 'world'

Здесь важно, что RNN сохраняет внутреннее состояние, что позволяет предсказывать последовательности, а не только отдельные элементы.

Параметры метода run

Метод run может принимать дополнительные опции, в зависимости от типа сети:

  • lookup: используется в RNN для указания словаря символов или токенов.
  • log: включает логирование промежуточных результатов сети.
  • input и output всегда должны строго соответствовать обучающим данным.

Производительность и точность

Метод run выполняет мгновенное предсказание, так как не требует повторного обучения. Однако точность предсказаний зависит от:

  1. Качества и объема обучающих данных.
  2. Архитектуры сети (количество слоев, нейронов).
  3. Процесса обучения, включая количество итераций и скорость обучения.

Советы по использованию

  • Всегда нормализовать входные данные. Например, цвета RGB переводить в диапазон [0, 1].
  • При работе с категориальными задачами использовать one-hot encoding для output.
  • Проверять соответствие структуры входного объекта формату обучающих данных. Несовпадение может привести к некорректным результатам.

Метод run является основным инструментом для получения выводов нейронной сети, и его правильное использование обеспечивает стабильные и предсказуемые результаты.