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

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


Форматы сохранения

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

  • model.json — основная структура модели, описывающая слои и их связи.
  • weights.bin — бинарные данные весов сети.
  • metadata.json — дополнительные параметры модели (не всегда создаётся, зависит от типа модели и используемой функции).

Сочетание этих файлов позволяет полностью восстановить обученную модель без потери точности.


Методы сохранения моделей

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

1. Классификаторы изображений (Image Classifier)

let classifier;

function trainAndSave() {
  classifier = ml5.imageClassifier('MobileNet', modelReady);

  function modelReady() {
    classifier.train({epochs: 10}, finishedTraining);
  }

  function finishedTraining() {
    classifier.save('myTrainedModel');
  }
}
  • save(name) — сохраняет модель с указанным именем.
  • При вызове создаются файлы name-model.json, name-weights.bin и name-meta.json.
  • Метод автоматически сохраняет текущие веса и структуру сети.

2. Регрессия (Regression)

Для регрессионных моделей (например, ml5.neuralNetwork) процесс схож:

const options = {
  task: 'regression',
  debug: true
};

const nn = ml5.neuralNetwork(options);

nn.addData({x: 0}, {y: 0});
nn.addData({x: 1}, {y: 1});

nn.normalizeData();
nn.train({epochs: 50}, () => {
  nn.save('regressionModel');
});
  • Метод save работает как для классификации, так и для регрессии.
  • Можно сохранять как на локальном компьютере, так и на сервере при наличии соответствующих API.

Загрузка сохранённой модели

Восстановление модели выполняется с помощью метода load:

ml5.imageClassifier('myTrainedModel/model.json')
  .then(classifier => {
    classifier.classify(img, (err, results) => {
      console.log(results);
    });
  });
  • Важно передать путь к model.json.
  • Все веса и параметры будут загружены автоматически.
  • Для ml5.neuralNetwork:
const nn = ml5.neuralNetwork({task: 'regression'});
nn.load('regressionModel/model.json', () => {
  nn.predict({x: 2}, (err, results) => {
    console.log(results);
  });
});
  • Сохраняется совместимость с обученными данными.
  • Можно использовать модели на других страницах или проектах без дополнительного обучения.

Особенности работы с браузером

  • Локальное сохранение выполняется через стандартный диалог скачивания.
  • Для сохранения модели на сервер необходимо настроить соответствующий endpoint и использовать метод save(modelPath) с указанием URL.
  • В браузере файлы сохраняются в формате, совместимом с TensorFlow.js, что облегчает перенос между проектами.

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

  • Всегда нормализовать данные перед обучением, чтобы сохранённая модель была более точной и устойчивой к новым входным данным.
  • Использовать проверку загрузки модели через колбэки или промисы, чтобы убедиться в корректном восстановлении.
  • Сохранять модели с понятными именами и версионностью (model_v1, model_v2) для удобства разработки и поддержки.
  • Для больших моделей использовать отдельный сервер или облачное хранилище, чтобы избежать ограничений браузера на размер файлов.

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