Brain.js — это библиотека для работы с нейронными сетями в JavaScript. Одной из ключевых особенностей работы с нейронными сетями является правильная типизация входных и выходных данных, так как от этого зависит корректность обучения и точность предсказаний.
В Brain.js входные данные передаются в виде массивов чисел или объектов с числовыми значениями. Тип используемого формата зависит от конкретной сети.
NeuralNetwork):const brain = require('brain.js');
const net = new brain.NeuralNetwork();
const trainingData = [
{ input: [0, 0], output: [0] },
{ input: [0, 1], output: [1] },
{ input: [1, 0], output: [1] },
{ input: [1, 1], output: [0] }
];
net.train(trainingData);
В этом случае все элементы массива должны быть числами в диапазоне от 0 до 1. Если значения выходят за этот диапазон, сеть может работать нестабильно.
const trainingData = [
{ input: { red: 1, green: 0, blue: 0 }, output: { hot: 1 } },
{ input: { red: 0, green: 1, blue: 0 }, output: { cold: 1 } }
];
Такой подход удобен для многомерных данных, когда каждое измерение имеет собственное имя. Важно, чтобы все объекты имели одинаковый набор ключей, иначе сеть не сможет корректно интерпретировать входные данные.
Выходные данные могут иметь бинарную или непрерывную форму, в зависимости от задачи:
Бинарные выходы Используются для задач
классификации с конечным числом категорий. В массивной форме это может
быть [0, 1], [1, 0] и так далее. В объектной
форме — { classA: 1, classB: 0 }.
Ключевые моменты:
Непрерывные выходы Используются для регрессионных задач, где требуется предсказать число, например, цену, температуру или процент. Пример:
const trainingData = [
{ input: [0.1, 0.2], output: [0.3] },
{ input: [0.4, 0.6], output: [1.0] }
];
Важно помнить, что сеть может плохо работать с отрицательными числами или числами, превышающими 1, если не выполнена нормализация данных.
Правильная типизация данных часто подразумевает масштабирование входов и выходов. Для этого применяются стандартные методы:
Пример нормализации входов:
function normalize(value, min, max) {
return (value - min) / (max - min);
}
const input = normalize(75, 0, 100); // результат: 0.75
Нормализация критически важна, потому что сигмоидные функции активации в Brain.js чувствительны к диапазону входных данных. Некорректные значения могут привести к застреванию градиента, когда сеть перестаёт обучаться.
При подготовке данных к обучению необходимо соблюдать следующие правила:
Нарушение этих правил может привести к ошибкам во время обучения или к снижению точности сети.
Для работы с категориальными данными требуется one-hot encoding. Пример:
// Категории: красный, зеленый, синий
const trainingData = [
{ input: { red: 1, green: 0, blue: 0 }, output: { red: 1, green: 0, blue: 0 } },
{ input: { red: 0, green: 1, blue: 0 }, output: { red: 0, green: 1, blue: 0 } }
];
Такое представление позволяет сети корректно различать категории без числовой интерпретации, которая может создать искажения.
Перед подачей на вход сети полезно проверять:
Простейший способ проверки:
trainingData.forEach(item => {
console.log(Object.values(item.input).every(v => v >= 0 && v <= 1));
});
Это помогает избежать ошибок, которые трудно отследить во время обучения.
Правильная типизация является основой стабильной работы любой сети в Brain.js, обеспечивая предсказуемость результатов и эффективность обучения.