В библиотеке ml5.js, которая является высокоуровневым интерфейсом для моделей машинного обучения в JavaScript, подготовка и нормализация данных является ключевым этапом перед обучением или использованием предобученных моделей. Корректная обработка данных напрямую влияет на качество предсказаний и стабильность работы модели.
Входные данные могут представлять собой изображения, аудиосигналы, текстовые последовательности или числовые массивы. Для каждого типа данных существуют специфические методы их нормализации.
Числовые массивы, используемые для задач регрессии или классификации, часто содержат значения в различном диапазоне. ml5.js не выполняет автоматическую нормализацию, поэтому необходимо привести данные к единой шкале:
Масштабирование к диапазону [0, 1]
const normalized = data.map(value => (value - minValue) / (maxValue - minValue));
Такой подход позволяет модели быстрее сходиться и предотвращает доминирование признаков с большим масштабом.
Стандартизация (z-score)
const mean = data.reduce((a, b) => a + b) / data.length;
const std = Math.sqrt(data.reduce((a, b) => a + Math.pow(b - mean, 2), 0) / data.length);
const standardized = data.map(value => (value - mean) / std);
Стандартизация полезна, когда признаки имеют сильно различающиеся дисперсии.
Для работы с изображениями в ml5.js используются
объекты p5.Image или HTML-элементы
. Перед передачей изображения в модель
необходимо:
Изменение размера (resize) к стандартным размерам модели (например, 224x224 для MobileNet).
Преобразование в числовую матрицу и масштабирование пикселей к диапазону [0, 1] или [-1, 1], в зависимости от требований модели.
const imgArray = [];
img.loadPixels();
for (let i = 0; i < img.pixels.length; i += 4) {
imgArray.push(img.pixels[i] / 255); // красный канал
imgArray.push(img.pixels[i + 1] / 255); // зелёный
imgArray.push(img.pixels[i + 2] / 255); // синий
}Центрирование данных: для некоторых моделей полезно вычитать среднее значение пикселя, чтобы значения распределялись вокруг нуля.
Текстовые данные требуют преобразования в числовые представления:
Токенизация — разбиение текста на отдельные слова или символы.
Построение словаря — каждому слову присваивается уникальный индекс.
Преобразование текста в последовательность индексов:
const textSequence = tokens.map(token => vocabulary[token] || 0);Паддинг последовательностей для выравнивания длины входных данных:
while(sequence.length < maxLength) {
sequence.push(0);
}Аудиосигналы требуют особой подготовки:
Выбор частоты дискретизации — унификация всех аудиофайлов к одной частоте.
Нормализация амплитуды:
const normalizedAudio = audioData.map(sample => sample / 32768);Преобразование в спектрограммы для последующей подачи в нейронные сети. Это позволяет моделям эффективно извлекать частотные признаки.
Модели ml5.js ожидают входные данные в определённой форме:
p5.Image,
![]()
или Canvas.Array) или тензоры TensorFlow.js
(tf.tensor).Использование tf.tensor позволяет применять встроенные методы нормализации и пакетную обработку, что повышает производительность при работе с большими объёмами данных.
Для ускорения обучения рекомендуется группировать данные в батчи:
const batchSize = 32;
for(let i = 0; i < dataset.length; i += batchSize) {
const batch = dataset.slice(i, i + batchSize);
// дальнейшая обработка батча
}
Пакетная обработка снижает колебания градиентов и позволяет использовать GPU через TensorFlow.js для вычислений.
Перед обучением необходимо убедиться в:
Эти проверки предотвращают ошибки на этапе обучения и повышают точность модели.