Работа с объектом ml5 и его пространством имён

ml5.js — это высокоуровневая библиотека для машинного обучения на JavaScript, построенная поверх TensorFlow.js. Основной объект ml5 служит точкой входа для всех функций библиотеки. Через него создаются модели, настраиваются классификаторы, генераторы и другие инструменты машинного обучения.

Объект ml5 не является классом в привычном смысле, это глобальное пространство имён, содержащее функции для работы с различными моделями и утилитами. Каждое API модели инкапсулировано в отдельной функции-конструкторе, которая возвращает объект с методами для обучения, предсказания и работы с данными.

Создание и использование моделей

Большинство моделей в ml5 создаются через функции вида ml5.ModelName(...). Примеры ключевых моделей:

  • ImageClassifier — классификация изображений.
  • PoseNet — детекция позы человека.
  • NeuralNetwork — создание и обучение нейронных сетей.
  • SoundClassifier — распознавание аудиосигналов.
  • Sentiment — анализ тональности текста.

При создании модели возвращается объект с набором методов. Например, для классификатора изображений:

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

function modelLoaded() {
    console.log('Модель загружена');
}

Здесь ml5.imageClassifier автоматически загружает предварительно обученную модель. В качестве первого аргумента можно передать путь к локальной модели или имя встроенной модели, а вторым аргументом передаётся callback при полной загрузке.

Методы моделей

У каждого объекта модели есть стандартные методы:

  • predict(input, callback) — делает предсказание для переданных данных.
  • classify(input, callback) — классифицирует изображение, текст или звук.
  • detect(input, callback) — обнаруживает объекты или ключевые точки на изображении.
  • on(event, callback) — подписка на события модели (например, потоковая обработка данных).

Например, классификация изображения:

classifier.classify(document.getElementById('image'), (err, results) => {
    if (err) {
        console.error(err);
    } else {
        console.log(results);
    }
});

Результатом является массив объектов с ключами label (название класса) и confidence (вероятность принадлежности к классу).

Работа с пространством имён ml5

Пространство имён ml5 разделено на несколько логических блоков:

  1. Модели (Models) — основные конструкторы моделей, как imageClassifier, poseNet, neuralNetwork.
  2. Utils — утилиты для работы с данными, преобразования изображений и аудио. Например, ml5.tf предоставляет доступ к TensorFlow.js API для низкоуровневых операций.
  3. Feature Extractors — предварительно обученные нейронные сети для извлечения признаков. Используются для быстрого обучения пользовательских классификаторов.
  4. Callbacks и события — встроенные механизмы обработки асинхронных операций и потоковых данных.

Пространство имён является динамическим: новые модели и утилиты могут быть добавлены с обновлениями библиотеки, при этом старые методы остаются совместимыми.

Feature Extractor и кастомные классификаторы

Feature Extractor позволяет использовать мощь предобученных сетей для быстрого создания собственных классификаторов без необходимости обучения с нуля. Пример создания кастомного классификатора изображений:

const featureExtractor = ml5.featureExtractor('MobileNet', () => {
    console.log('Feature Extractor готов');
});

const customClassifier = featureExtractor.classification(document.getElementById('image'));
customClassifier.addImage(document.getElementById('image'), 'кот');
customClassifier.train(() => {
    console.log('Модель обучена');
});

Метод addImage добавляет тренировочные данные, train запускает обучение. После этого доступен метод classify для предсказаний.

Асинхронность и работа с событиями

Все операции в ml5.js асинхронны. Callback-функции и промисы обеспечивают корректную последовательность действий. Например, загрузка модели и обучение должны происходить последовательно:

ml5.imageClassifier('MobileNet')
    .then(classifier => classifier.classify(document.getElementById('image')))
    .then(results => console.log(results))
    .catch(err => console.error(err));

Асинхронная обработка предотвращает блокировку основного потока браузера и обеспечивает плавную работу интерфейсов.

Взаимодействие с TensorFlow.js

ml5.js построена на TensorFlow.js, поэтому объект ml5.tf предоставляет доступ к низкоуровневым операциям: создание тензоров, выполнение матричных операций, управление памятью GPU. Это позволяет комбинировать высокоуровневые возможности ml5 с гибкостью TensorFlow.js для сложных проектов.

const tensor = ml5.tf.tensor([1, 2, 3, 4]);
tensor.print();

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

Резюме возможностей

  • Глобальный объект ml5 — точка входа для всех моделей и утилит.
  • Модели создаются через конструкторы с асинхронной загрузкой.
  • Feature Extractors ускоряют создание кастомных классификаторов.
  • Асинхронная архитектура через callback и промисы.
  • Прямой доступ к TensorFlow.js через ml5.tf для низкоуровневых операций.

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