При работе с нейронными сетями правильная подготовка данных играет
ключевую роль в точности и стабильности обучения. В библиотеке
ml5.js, которая упрощает взаимодействие с TensorFlow.js
через удобные высокоуровневые методы, важными инструментами являются
нормализация и денормализация данных
при работе с классом ml5.neuralNetwork.
Метод ml5.neuralNetwork поддерживает как обучение с
числовыми, так и с категориальными признаками. Перед обучением модель
требует, чтобы все числовые данные находились в едином диапазоне —
обычно [0, 1] или [-1, 1]. Это необходимо,
чтобы разные масштабы признаков не влияли на сходимость градиентного
спуска.
Пример инициализации нейронной сети:
const options = {
task: 'regression',
debug: true,
learningRate: 0.01,
layers: [
{ type: 'dense', units: 16, activation: 'relu' },
{ type: 'dense', units: 1 }
]
};
const nn = ml5.neuralNetwork(options);
Библиотека ml5.js позволяет включить автоматическую нормализацию
данных при добавлении примеров для обучения. Это выполняется через опцию
normalize: true.
Пример добавления данных с нормализацией:
nn.addData({ x: 50, y: 200 }, { output: 0.8 });
nn.addData({ x: 30, y: 100 }, { output: 0.5 });
// Нормализация будет применена при вызове:
nn.normalizeData();
Функция normalizeData() вычисляет минимальные и
максимальные значения каждого числового признака и масштабирует их в
диапазон [0, 1]. При этом сохраняются пропорции между
значениями, что позволяет сети эффективнее обучаться.
После обучения модели и получения предсказаний на нормализованных данных часто возникает необходимость вернуть значения к исходному масштабу. Для этого используется денормализация. В ml5.js можно применить сохранённые параметры нормализации для обратного преобразования.
Пример денормализации:
const normalizedInput = { x: 0.5, y: 0.75 };
const output = await nn.predict(normalizedInput);
// Денормализация результата
const denormalizedOutput = nn.denormalize(output, 'output');
Метод denormalize() позволяет преобразовать выход модели
в реальные значения, удобные для интерпретации и использования в
приложении.
Иногда требуется полный контроль над процессом нормализации, особенно если данные будут использоваться вне ml5.js или требуется другой диапазон. Для этого можно вручную масштабировать признаки:
function normalize(value, min, max) {
return (value - min) / (max - min);
}
function denormalize(normValue, min, max) {
return normValue * (max - min) + min;
}
const xNorm = normalize(50, 0, 100); // 0.5
const yNorm = normalize(200, 0, 400); // 0.5
Такой подход особенно полезен при предсказании новых данных, когда требуется согласованность с диапазоном, на котором обучалась сеть.
nn.normalizeData() перед обучением при
использовании числовых признаков.Нормализация и денормализация являются фундаментальными инструментами, обеспечивающими корректную работу нейронной сети и точность прогнозов. В ml5.js их использование встроено и интуитивно, но понимание принципов преобразования данных позволяет адаптировать их под любые задачи.