Форматы сохранения моделей в ml5.js

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


Основные типы моделей

В ml5.js можно работать с различными типами моделей:

  1. Нейронные сети для классификации и регрессии

    • Построенные с помощью ml5.neuralNetwork().
    • Поддерживают сохранение весов и архитектуры.
  2. Модели для обработки изображений

    • Например, ml5.imageClassifier().
    • Могут быть как предобученные, так и созданные пользователем.
  3. Модели для обработки звука и текста

    • ml5.soundClassifier() и ml5.word2vec() соответственно.
    • Для текстовых и аудиомоделей используется специфический формат данных.

Каждая модель в конечном итоге сводится к объекту TensorFlow.js, поэтому форматы сохранения напрямую связаны с его механизмами.


Формат JSON + bin (TensorFlow.js)

Наиболее распространённый способ сохранения модели в ml5.js:

  • JSON-файл — содержит архитектуру сети, настройки слоев, параметры обучения и метаданные.
  • Binary файлы (.bin) — содержат веса нейронной сети в бинарном формате для быстрого загрузки.

Пример сохранения нейронной сети:

const nn = ml5.neuralNetwork({ task: 'classification' });

// После обучения модели
nn.save('myModel');

Результатом будет генерация файлов:

  • myModel.json — структура сети и конфигурация.
  • myModel.weights.bin — бинарные веса модели.

Особенности:

  • Подходит для загрузки модели в других проектах.
  • Легко использовать совместно с TensorFlow.js.
  • Позволяет хранить метаданные, такие как словарь классов, нормализацию данных и количество эпох обучения.

Сохранение предобученных моделей

Для моделей, загружаемых через ml5.(), например ml5.imageClassifier('MobileNet'), доступна функция сохранения локальной копии, чтобы уменьшить зависимость от сети:

classifier.save('mobilenet-local');

Преимущества:

  • Возможность работы оффлайн.
  • Быстрая загрузка без повторного скачивания предобученной модели.

Важный момент: сохраняется не весь исходный код модели, а только параметры, веса и конфигурация слоев. Предобученная архитектура при этом остаётся совместимой с ml5.js и TensorFlow.js.


Специальные форматы для текстовых моделей

Модели обработки текста и слов, например ml5.word2vec, используют JSON с массивами весов, где:

  • Каждое слово сопоставлено с вектором фиксированной размерности.
  • Вектор сохраняется как массив чисел с плавающей точкой.
  • Метаданные включают словарь слов и размерность embedding.

Сохранение производится так:

word2vec.save('wordVectors');

В результате формируется один JSON-файл, содержащий и словарь, и веса, что удобно для последующей загрузки.


Особенности загрузки сохранённых моделей

Загрузка модели обратно в проект выполняется через соответствующий метод load:

ml5.neuralNetwork('myModel.json', modelLoaded);

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

Ключевые моменты:

  • Файл JSON должен находиться в доступной для браузера директории.
  • Бинарные веса (.bin) должны находиться в том же каталоге.
  • После загрузки сохраняется структура слоёв, веса и метаданные, что позволяет сразу делать предсказания или продолжать обучение.

Рекомендации по управлению файлами моделей

  • Хранить все файлы одной модели в отдельной папке, чтобы избежать конфликтов.
  • Использовать осмысленные имена (imageClassifier_v1.json, weights_v1.bin) для облегчения версионирования.
  • Для больших моделей использовать локальные серверы или CDN, так как загрузка больших файлов через браузер может быть медленной.

Итоговые преимущества сохранения моделей в ml5.js

  • Портативность: однажды обученная модель может быть перенесена в любой проект.
  • Снижение зависимости от интернета: предобученные или сохранённые модели можно использовать оффлайн.
  • Гибкость: возможность хранения как обученных весов, так и архитектуры сети, включая метаданные.