Эффективность работы нейронной сети напрямую зависит от формата и качества входных данных. В библиотеке Brain.js существует несколько подходов к подготовке данных, которые позволяют ускорить обучение, улучшить точность прогнозов и снизить риск переобучения.
Нейронные сети требуют, чтобы входные значения находились в определённом диапазоне. В Brain.js чаще всего используются значения от 0 до 1. Неправильный масштаб данных может привести к медленной сходимости или невозможности обучения.
Пример нормализации:
function normalize(value, min, max) {
return (value - min) / (max - min);
}
const data = [
{ input: [normalize(20, 0, 100)], output: [1] },
{ input: [normalize(50, 0, 100)], output: [0] }
];
Ключевые моменты:
Brain.js работает с числовыми массивами, поэтому категориальные значения необходимо преобразовывать. Наиболее распространённый метод — one-hot encoding.
Пример:
const colors = { red: [1, 0, 0], green: [0, 1, 0], blue: [0, 0, 1] };
const data = [
{ input: colors.red, output: [1] },
{ input: colors.green, output: [0] }
];
Рекомендации:
Неравномерное распределение классов снижает точность модели и увеличивает риск смещения. Brain.js чувствителен к дисбалансу, так как использует обратное распространение ошибки.
Методы балансировки:
Brain.js требует массив объектов с полями input и
output. Оптимизация формата JSON повышает скорость обучения
и снижает использование памяти.
Пример компактного формата:
const trainingData = [
{ input: [0.1, 0.2, 0.3], output: [1, 0] },
{ input: [0.5, 0.6, 0.7], output: [0, 1] }
];
Советы:
net.trainStream.Чрезмерная точность может увеличить время обучения без значительного улучшения качества модели. Рекомендуется округлять значения до трёх-четырёх знаков после запятой.
const roundedValue = Math.round(value * 1000) / 1000;
Преимущества:
Для задач классификации с небольшим числом признаков эффективны бинарные входы (0 или 1). Они особенно полезны при работе с логическими состояниями или простыми категориями.
Пример:
const trainingData = [
{ input: [1, 0, 0, 1], output: [1] },
{ input: [0, 1, 0, 0], output: [0] }
];
Особенности:
Для больших наборов данных обучение по одному примеру может быть неэффективным. Brain.js поддерживает batch training, когда данные подаются блоками.
const net = new brain.NeuralNetwork();
net.train(trainingData, { iterations: 2000, batchSize: 32 });
Важные моменты:
Для динамических данных или очень больших наборов используется trainStream:
const stream = new brain.Stream({
neuralNetwork: net,
floodCallback: () => console.log('Training complete')
});
stream.write({ input: [0.1, 0.2], output: [1] });
stream.end();
Преимущества:
Оптимизация формата данных в Brain.js — ключевой этап построения производительных и точных нейронных сетей на JavaScript.