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

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


Форматы моделей

Модель нейронной сети в ml5.js состоит из двух компонентов:

  1. Архитектура модели – описывает структуру сети: количество слоёв, нейронов, функции активации.
  2. Весовые коэффициенты (weights) – значения параметров, обученные на данных.

Для сохранения этих компонентов используется формат JSON для архитектуры и bin для весов. Файлы сохраняются локально или на сервере и могут быть загружены позднее для использования в веб-приложениях.


Сохранение модели

Метод сохранения доступен через объект ml5.neuralNetwork. После завершения обучения модели применяется метод:

// Пример сохранения модели
model.save('my-model');

При этом создаются два файла:

  • my-model.json – описание структуры сети.
  • my-model.weights.bin – сохранённые веса нейронной сети.

Если требуется указать конкретный путь или имя для файлов, можно использовать:

model.save({
  json: 'custom-model.json',
  weights: 'custom-model.weights.bin'
});

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


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

Для повторного использования модели применяется метод ml5.neuralNetwork.load, который принимает объект с путями к файлам:

ml5.neuralNetwork.load({
  model: 'my-model.json',
  metadata: 'my-model.meta.json', // опционально, если есть метаданные
  weights: 'my-model.weights.bin'
}).then((loadedModel) => {
  // Использование загруженной модели
});

Особенности загрузки:

  • Загрузка модели является асинхронной операцией, поэтому используется Promise или async/await.
  • При загрузке автоматически восстанавливается структура сети и весовые коэффициенты, что позволяет сразу выполнять предсказания или дообучение.
  • Метаданные (.meta.json) включают информацию о типе сети, параметрах обучения и используемых признаках.

Использование загруженной модели

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

const inputData = { feature1: 0.5, feature2: 1.2 };
loadedModel.predict(inputData, (err, results) => {
  if (err) {
    console.error(err);
  } else {
    console.log(results);
  }
});

Если требуется продолжить обучение на новых данных, можно использовать метод train:

loadedModel.train({ inputs: newInputs, outputs: newOutputs }, trainingOptions, () => {
  console.log('Дополнительное обучение завершено');
});

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


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

  • Версионирование моделей: при обновлении архитектуры или данных рекомендуется создавать новые версии файлов, чтобы избежать конфликтов.
  • Метаданные: всегда сохранять .meta.json, особенно если модель будет использоваться в разных проектах.
  • Оптимизация веса: для крупных моделей можно сжимать файлы весов с помощью методов сервера, но важно корректно загружать их обратно в ml5.js.
  • Асинхронность: все операции загрузки и сохранения являются асинхронными, что следует учитывать при построении пользовательского интерфейса.

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

В веб-приложениях файлы модели можно загружать:

  • Локально: через file input пользователя.
  • С сервера: указав URL к JSON и bin файлам.
  • IndexedDB: при желании сохранить модель прямо в браузере для оффлайн-доступа (не поддерживается напрямую ml5.js, требует интеграции с TensorFlow.js).

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