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

TensorFlow.js предоставляет гибкие механизмы для сохранения и загрузки моделей машинного обучения. Работа с файловой системой особенно актуальна в Node.js, где доступ к локальным файлам позволяет управлять моделями вне браузера и организовывать долговременное хранение обученных сетей.

Основные форматы хранения моделей

Модель в TensorFlow.js состоит из двух ключевых компонентов:

  1. Архитектура модели — JSON-файл, описывающий слои, их параметры и связи.
  2. Веса модели — бинарные файлы (.bin), содержащие параметры нейронной сети.

Формат хранения позволяет сохранять модели как в одной папке с отдельными файлами весов, так и объединять их в единый архив при необходимости. В Node.js чаще всего используется метод file:// для указания пути к файловой системе.

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

Сохранение модели осуществляется методом model.save(). Для сохранения в локальную файловую систему используется следующая структура:

const tf = require('@tensorflow/tfjs-node');

async function saveModel(model, path) {
    await model.save(`file://${path}`);
    console.log(`Модель успешно сохранена в ${path}`);
}

Пояснения:

  • file:// указывает на работу с файловой системой.
  • path должен быть абсолютным или относительным путем к папке, где будут созданы файлы model.json и .bin.
  • Метод save() возвращает промис, который завершится после успешного сохранения.

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

/my-model
  ├─ model.json
  ├─ group1-shard1of1.bin

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

Для загрузки сохраненной модели используется функция tf.loadLayersModel(). Пример:

const tf = require('@tensorflow/tfjs-node');

async function loadModel(path) {
    const model = await tf.loadLayersModel(`file://${path}/model.json`);
    console.log('Модель загружена');
    return model;
}

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

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

Управление версиями и организация хранения

При разработке проектов с большим количеством моделей рекомендуется структурировать директории следующим образом:

/models
  ├─ model_v1
  │   ├─ model.json
  │   └─ group1-shard1of1.bin
  ├─ model_v2
  │   ├─ model.json
  │   └─ group1-shard1of1.bin

Такой подход упрощает откат к предыдущей версии модели и позволяет хранить экспериментальные варианты без риска потери данных.

Сохранение и загрузка в формате tfjs_layers_model

TensorFlow.js использует несколько форматов для сериализации моделей. Наиболее распространённый — tfjs_layers_model, который подходит для моделей, построенных через tf.Sequential или tf.Model. Примеры:

  • Сохранение:

    await model.save('file://./models/my_model');
  • Загрузка:

    const model = await tf.loadLayersModel('file://./models/my_model/model.json');

Метод автоматически обрабатывает веса и архитектуру, обеспечивая совместимость между разными версиями TensorFlow.js.

Дополнительные возможности

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

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

  • Перед сохранением проверять корректность всех весов и архитектуры модели.
  • Использовать отдельные директории для каждой новой версии модели.
  • Для крупных моделей оптимизировать пути хранения, чтобы избежать проблем с доступом к файловой системе при многопоточном обучении.
  • При работе в Node.js рекомендуется использовать @tensorflow/tfjs-node для ускорения операций с TensorFlow через нативные библиотеки.

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