Загрузка модели из файла

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

Основные принципы загрузки модели

Для работы с локальными или удалёнными моделями ml5.js использует объекты JSON-файлов модели и сопутствующие веса модели. Стандартный формат модели, поддерживаемый ml5.js, обычно состоит из двух компонентов:

  1. JSON-файл модели — описывает архитектуру нейросети, конфигурацию слоев и гиперпараметры.
  2. Файлы весов (weights) — бинарные данные, необходимые для работы модели.

ml5.js позволяет загрузить модель, используя функцию соответствующего класса, например ml5.neuralNetwork() для нейросетей, или специализированные методы, такие как ml5.imageClassifier(), ml5.poseNet(), ml5.soundClassifier(), если речь идёт о конкретных типах моделей.

Пошаговая инструкция по загрузке модели

  1. Создание экземпляра класса модели Для нейросетей это выглядит следующим образом:

    const options = {
      task: 'classification',
      debug: true
    };
    const nn = ml5.neuralNetwork(options);

    Параметр task определяет тип задачи: classification, regression или other. Опция debug позволяет отслеживать процесс загрузки и предсказаний.

  2. Загрузка файлов модели

    Функция load используется для загрузки модели и весов:

    const modelDetails = {
      model: 'model/model.json',
      metadata: 'model/model_meta.json',
      weights: 'model/model.weights.bin'
    };
    
    nn.load(modelDetails, () => {
      console.log('Модель успешно загружена');
    });

    Важно: пути к файлам должны быть корректными относительно корня проекта или URL-адресов, если модель хранится на сервере.

  3. Проверка доступности модели

    После загрузки можно получить информацию о структуре модели:

    console.log(nn.model);
    console.log(nn.data);

    Это позволяет убедиться, что слои и веса корректно подключены.

Работа с предсказаниями после загрузки

После загрузки модели её можно использовать для предсказаний на новых данных. Для классификации:

const input = { feature1: 0.5, feature2: 1.2 };
nn.classify(input, (err, results) => {
  if (err) {
    console.error(err);
    return;
  }
  console.log(results);
});

Для регрессии используется аналогичный метод predict:

nn.predict(input, (err, output) => {
  if (err) {
    console.error(err);
    return;
  }
  console.log(output);
});

Управление загрузкой больших моделей

  • Асинхронность: Загрузка модели происходит асинхронно. Использование async/await или колбеков необходимо для предотвращения ошибок при обращении к модели до её полной загрузки.

    async function loadModel() {
      await nn.load(modelDetails);
      console.log('Модель готова к использованию');
    }
    loadModel();
  • Оптимизация ресурсов: Большие модели могут потреблять значительное количество памяти. Рекомендуется использовать минимальный набор слоев и весов для конкретной задачи, а также выгружать модель при её неиспользовании:

    nn.dispose();

Работа с пользовательскими форматами моделей

ml5.js поддерживает загрузку моделей, экспортированных из TensorFlow.js. Экспорт включает JSON с архитектурой и бинарные файлы с весами. Формат совместим с ml5.js, если модель была обучена с использованием поддерживаемых слоев (Dense, Conv2D, LSTM и др.).

Загрузка моделей для классификаторов изображений

Для imageClassifier можно загружать как предобученные модели, так и кастомные:

const classifier = ml5.imageClassifier('model/custom-model/model.json', () => {
  console.log('Кастомная модель изображений загружена');
});

После загрузки можно производить классификацию изображений, видео с веб-камеры или canvas:

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

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

  • Разместить все файлы модели в отдельной папке, например model/.
  • JSON архитектуры должен иметь уникальное имя (model.json).
  • Весовые файлы (*.bin) должны быть рядом с JSON или указаны явно.
  • Метаданные (metadata.json) обеспечивают сохранение информации о классах, нормализации и других параметрах.

Ошибки и отладка

Частые ошибки при загрузке моделей:

  • Неверные пути к файлам. Решение: проверка относительных и абсолютных путей.
  • Несовместимость слоев TensorFlow.js с ml5.js. Решение: использовать поддерживаемые слои.
  • Попытка сделать предсказание до полной загрузки модели. Решение: использовать колбек или await для метода load.

Использование debug: true в опциях модели позволяет увидеть подробный процесс загрузки и выявить ошибки на ранней стадии.