Добавление обучающих примеров: addData

В ml5.js метод addData используется для добавления обучающих примеров в модель перед её обучением. Этот метод является ключевым элементом при создании кастомных моделей, таких как классификаторы изображений, звуков или текста, где требуется непосредственное формирование набора данных для обучения.

Основные принципы работы

Метод addData применяется к объекту модели, поддерживающему обучение на пользовательских данных, например NeuralNetwork. Его синтаксис выглядит следующим образом:

neuralNetwork.addData(input, output);

Параметры:

  • input — объект или массив, представляющий входные данные. Тип данных зависит от конфигурации модели (например, числовые значения, массивы чисел, изображения в виде массива пикселей).
  • output — объект или массив, описывающий желаемый результат для данного входа. Для классификации это обычно метка класса, а для регрессии — числовое значение.

Примеры добавления данных

Для нейросети, работающей с числовыми входами:

const options = {
  task: 'classification',
  inputs: ['x', 'y'],
  outputs: ['label']
};

const nn = ml5.neuralNetwork(options);

nn.addData({x: 0, y: 0}, {label: 'A'});
nn.addData({x: 1, y: 0}, {label: 'B'});
nn.addData({x: 0, y: 1}, {label: 'C'});

Для работы с изображениями через модель ImageClassifier:

const classifier = ml5.imageClassifier('MobileNet', modelReady);

// после загрузки изображения в переменную img
classifier.addData(img, {label: 'кот'});

Особенности и ограничения

  1. Тип данных должен соответствовать конфигурации модели. Если модель ожидает числовые значения, подача строки вызовет ошибку.
  2. Множественные примеры можно добавлять последовательно, что позволяет формировать крупный набор данных перед обучением.
  3. Метод не запускает обучение автоматически. После добавления всех примеров необходимо вызвать train:
nn.normalizeData(); // нормализация данных
nn.train({epochs: 50}, finishedTraining);
  1. Нормализация данных повышает точность модели, особенно при работе с числовыми значениями разных диапазонов.

Практические рекомендации

  • Структурировать данные единообразно. Все примеры должны иметь одинаковую структуру input и output.
  • Разделение на обучающую и тестовую выборку желательно выполнять после добавления данных, так как ml5.js не делает этого автоматически.
  • Использовать массивы или объекты в зависимости от типа задачи: объекты удобны для именованных входов и выходов, массивы — для последовательностей одинаковой длины.

Интеграция с пользовательским интерфейсом

addData часто применяется совместно с событиями DOM. Например, при создании интерактивного классификатора изображений можно привязать добавление примеров к кнопке:

document.getElementById('addCat').addEventListener('click', () => {
  const img = document.getElementById('currentImage');
  nn.addData({image: img}, {label: 'cat'});
});

Такой подход позволяет собирать данные в реальном времени и динамически расширять набор для обучения.

Отладка и проверка данных

  • Проверка структуры данных: использовать console.log для инспекции input и output перед обучением.
  • Подсчет количества примеров: nn.data.length позволяет убедиться, что данные добавлены корректно.
  • Балансировка классов: важно, чтобы примеры разных классов были представлены примерно одинаково, иначе модель будет склонна к смещению.

Итоговый порядок работы с addData

  1. Создать объект нейросети с необходимыми параметрами (inputs, outputs, task).
  2. Добавить обучающие примеры через addData.
  3. Проверить и при необходимости нормализовать данные (normalizeData).
  4. Запустить обучение через train.
  5. После обучения использовать метод classify или predict для предсказаний на новых данных.

addData является фундаментальной функцией ml5.js, обеспечивающей гибкое формирование пользовательских наборов данных и позволяющей строить модели, полностью адаптированные к конкретной задаче.