Brain.js — это библиотека для построения и обучения нейронных сетей на JavaScript. Основная особенность заключается в том, что она предоставляет простой интерфейс для работы с различными типами сетей, включая Feedforward, Recurrent и LSTM. Ключевым аспектом при работе с нейронной сетью является правильное формирование входных и выходных данных. От этого зависит успешность обучения и точность предсказаний.
Входные данные — это массивы чисел, представляющие признаки объектов, которые нужно обработать сетью. Brain.js работает с нормализованными значениями, обычно в диапазоне от 0 до 1, либо от -1 до 1, в зависимости от выбранной функции активации.
Пример формата для Feedforward сети:
const trainingData = [
{ input: [0, 0], output: [0] },
{ input: [0, 1], output: [1] },
{ input: [1, 0], output: [1] },
{ input: [1, 1], output: [0] }
];
Здесь input — это массив признаков, а
output — желаемый результат. Каждый элемент массива
представляет собой отдельный нейрон входного слоя.
Особенности:
Выходные данные задаются аналогично входным: это массивы чисел, представляющие целевое значение для сети. В зависимости от задачи, выход может быть:
Пример для многоклассовой классификации:
const trainingData = [
{ input: [1, 0, 0], output: [1, 0, 0] }, // класс A
{ input: [0, 1, 0], output: [0, 1, 0] }, // класс B
{ input: [0, 0, 1], output: [0, 0, 1] } // класс C
];
Особенности:
Нормализация — обязательный шаг перед обучением сети. Она предотвращает переобучение и ускоряет сходимость. Наиболее часто используется линейная нормализация:
[ x_{} = ]
Для бинарных задач данные уже могут быть нормализованы автоматически (0 и 1), но для числовых признаков типа температуры, возраста, цены или координат необходимо приводить значения к диапазону 0–1.
Пример нормализации:
function normalize(value, min, max) {
return (value - min) / (max - min);
}
const input = [normalize(50, 0, 100), normalize(200, 0, 500)];
Для рекуррентных сетей (RNN, LSTM) формат входных данных отличается:
input представляет собой
последовательность массивов, где каждый массив
соответствует отдельному шагу времени.Пример для LSTM:
const trainingData = [
{ input: [[0], [1], [0]], output: [[1]] },
{ input: [[1], [0], [1]], output: [[0]] }
];
Использование корректного формата входных и выходных данных напрямую влияет на скорость обучения, точность сети и способность модели корректно обобщать данные на новые примеры. Brain.js обеспечивает гибкость для работы с разными типами задач, но требует строгого соблюдения правил формирования массивов.