ml5.js — это высокоуровневая библиотека для
машинного обучения на JavaScript, построенная поверх TensorFlow.js.
Основной объект ml5 служит точкой входа для всех функций
библиотеки. Через него создаются модели, настраиваются классификаторы,
генераторы и другие инструменты машинного обучения.
Объект ml5 не является классом в привычном смысле, это
глобальное пространство имён, содержащее функции для работы с различными
моделями и утилитами. Каждое API модели инкапсулировано в отдельной
функции-конструкторе, которая возвращает объект с методами для обучения,
предсказания и работы с данными.
Большинство моделей в ml5 создаются через функции вида
ml5.ModelName(...). Примеры ключевых моделей:
При создании модели возвращается объект с набором методов. Например, для классификатора изображений:
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 разделено на несколько логических
блоков:
imageClassifier, poseNet,
neuralNetwork.ml5.tf
предоставляет доступ к TensorFlow.js API для низкоуровневых
операций.Пространство имён является динамическим: новые модели и утилиты могут быть добавлены с обновлениями библиотеки, при этом старые методы остаются совместимыми.
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));
Асинхронная обработка предотвращает блокировку основного потока браузера и обеспечивает плавную работу интерфейсов.
ml5.js построена на TensorFlow.js, поэтому объект ml5.tf
предоставляет доступ к низкоуровневым операциям: создание тензоров,
выполнение матричных операций, управление памятью GPU. Это позволяет
комбинировать высокоуровневые возможности ml5 с гибкостью TensorFlow.js
для сложных проектов.
const tensor = ml5.tf.tensor([1, 2, 3, 4]);
tensor.print();
Использование ml5.tf оправдано при необходимости
кастомного предобучения или модификации существующих моделей.
ml5 — точка входа
для всех моделей и утилит.ml5.tf для низкоуровневых операций.Такое построение пространства имён обеспечивает простоту использования и при этом оставляет гибкость для сложных задач машинного обучения на JavaScript.