Сохранение модели: tf.LayersModel.save

В TensorFlow.js модели, созданные с помощью API tf.LayersModel, могут быть сохранены для дальнейшего использования. Это позволяет не обучать модель повторно при каждом запуске приложения и обеспечивает переносимость между проектами. Метод save предоставляет гибкие возможности для сохранения модели как на стороне клиента, так и на сервере.


Основы метода save

Метод save применяется к объекту tf.LayersModel и имеет следующую сигнатуру:

model.save(handlerOrURL, config);
  • handlerOrURL — строка с указанием места сохранения или функция-обработчик (IOHandler), которая управляет процессом сохранения.
  • config — необязательный объект с дополнительными параметрами, например {includeOptimizer: true}.

Метод возвращает Promise, который разрешается в объект с информацией о сохранённой модели:

{
  modelArtifactsInfo: {
    dateSaved: '2026-03-07T12:34:56.789Z',
    modelTopologyType: 'JSON',
    modelTopologyBytes: 12345,
    weightSpecsBytes: 67890,
    weightDataBytes: 67890
  }
}

Способы сохранения модели

  1. Сохранение на файловой системе (Node.js)

Для Node.js доступна файловая система как место хранения:

await model.save('file://./my-model');

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

  • my-model.json — структура сети и метаданные.
  • my-model.weights.bin — бинарные веса модели.

Файл .json содержит ссылки на .bin, что позволяет легко загружать модель обратно через tf.loadLayersModel.


  1. Сохранение в IndexedDB (браузер)

IndexedDB предоставляет возможность хранить модель прямо в браузере:

await model.save('indexeddb://my-model');
  • indexeddb:// указывает, что данные сохраняются в локальной базе IndexedDB.
  • Позволяет повторно использовать модель при последующих сессиях без необходимости скачивания файлов.

Пример загрузки обратно:

const loadedModel = await tf.loadLayersModel('indexeddb://my-model');

  1. Сохранение в локальные файлы через скачивание (браузер)

Модели могут быть сохранены пользователем в виде файлов через downloads://:

await model.save('downloads://my-model');

После вызова этого метода браузер предложит сохранить my-model.json и соответствующий бинарный файл весов.


Настройка параметров сохранения

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

  • includeOptimizer (boolean) — по умолчанию true. Определяет, сохраняются ли состояния оптимизатора (например, моментум, адаптивные коэффициенты). Если модель будет использоваться только для инференса, можно указать false, чтобы уменьшить размер файлов.
await model.save('localstorage://my-model', { includeOptimizer: false });
  • weightDataBytes — внутренний параметр, отражающий размер бинарных весов. Обычно используется для мониторинга и логирования.

Пользовательские обработчики сохранения

TensorFlow.js позволяет создавать собственные IOHandler для сохранения модели в нестандартные хранилища, например, на сервер через HTTP POST:

const myHandler = {
  save: async function(modelArtifacts) {
    await fetch('https://myserver.com/upload', {
      method: 'POST',
      body: JSON.stringify(modelArtifacts)
    });
    return {
      modelArtifactsInfo: {
        dateSaved: new Date(),
        modelTopologyType: 'JSON',
        modelTopologyBytes: modelArtifacts.modelTopology
          ? JSON.stringify(modelArtifacts.modelTopology).length
          : 0,
        weightSpecsBytes: modelArtifacts.weightSpecs.length,
        weightDataBytes: modelArtifacts.weightData.byteLength
      }
    };
  }
};

await model.save(myHandler);

Такой подход позволяет интегрировать TensorFlow.js с облачными хранилищами или собственными серверами, обеспечивая гибкость в развертывании моделей.


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

  • Оптимизация веса: Для моделей, используемых исключительно для инференса, рекомендуется отключать сохранение оптимизатора.
  • Версионирование: При частых обновлениях модели использовать уникальные идентификаторы или метки времени для каждого сохранения, чтобы избежать перезаписи предыдущих версий.
  • Проверка загрузки: После сохранения важно протестировать модель с tf.loadLayersModel для проверки целостности и совместимости.
  • Сжатие: Для больших моделей можно применять gzip или другие методы сжатия при сохранении через серверные обработчики.

С помощью tf.LayersModel.save управление моделями становится предсказуемым, гибким и полностью интегрированным с различными средами выполнения, от браузера до Node.js. Многообразие способов сохранения и возможность создания пользовательских обработчиков делают этот метод ключевым инструментом при работе с TensorFlow.js.