Загрузка моделей через tf.loadLayersModel

TensorFlow.js предоставляет гибкие возможности для работы с нейронными сетями в браузере и на сервере Node.js. Одним из ключевых инструментов является функция tf.loadLayersModel, предназначенная для загрузки заранее обученных моделей в формате Keras или TensorFlow.js.

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

Функция tf.loadLayersModel поддерживает следующие варианты загрузки моделей:

  1. HTTP(S)-ресурс Модель может храниться на веб-сервере и быть доступна по URL:

    const model = await tf.loadLayersModel('https://example.com/model.json');

    В этом случае model.json — основной файл, содержащий архитектуру сети, веса и метаданные. Весовые файлы хранятся в отдельной папке или рядом с JSON-файлом, с расширением .bin.

  2. Локальная файловая система (Node.js) Для серверной версии Node.js возможна загрузка через файловый путь:

    const model = await tf.loadLayersModel('file://./local_model/model.json');
  3. IndexedDB (в браузере) TensorFlow.js поддерживает хранение моделей в IndexedDB, что позволяет сохранять и загружать их между сессиями:

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

Структура загружаемой модели

Файл model.json содержит следующие ключевые компоненты:

  • modelTopology — JSON-представление архитектуры модели (слои, связи, параметры).
  • weightsManifest — массив объектов с информацией о весах (имена файлов, типы, порядок).
  • trainingConfig (необязательно) — конфигурация компиляции и оптимизаторов, если модель сохранялась вместе с обучением.

Асинхронная загрузка

tf.loadLayersModel возвращает Promise, что делает её асинхронной. Использование await гарантирует, что модель полностью загружена перед дальнейшей работой:

async function loadModel() {
    const model = await tf.loadLayersModel('https://example.com/model.json');
    console.log('Модель успешно загружена');
    model.summary();
}
loadModel();

Асинхронность важна, так как процесс загрузки может быть длительным из-за передачи больших весов и архитектуры через сеть.

Работа с загруженной моделью

После загрузки модель ведет себя аналогично объекту tf.Sequential или tf.LayersModel, созданному вручную:

  • Прогнозирование (inference):
const input = tf.tensor2d([[0.5, 0.8]]);
const prediction = model.predict(input);
prediction.print();
  • Компиляция и дообучение: Загруженная модель может быть повторно скомпилирована для дообучения или тонкой настройки:
model.compile({
    optimizer: 'adam',
    loss: 'categoricalCrossentropy',
    metrics: ['accuracy']
});
  • Сохранение модели:
await model.save('localstorage://my-model');

Это позволяет использовать загруженную модель повторно без повторной загрузки с сервера.

Настройка загрузки весов

tf.loadLayersModel автоматически загружает веса из .bin файлов. Возможна дополнительная настройка через параметр weightOptions:

const model = await tf.loadLayersModel('https://example.com/model.json', {
    strict: true,  // выбросить ошибку при несоответствии архитектуры и весов
});
  • strict: true гарантирует, что структура сети и веса совпадают строго по именам.
  • strict: false позволяет игнорировать несоответствия, загружая только совпадающие слои. Полезно при частичном дообучении или замене слоев.

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

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

  • Файл model.json не найден или недоступен — проверяется путь и права доступа.
  • Весовые файлы отсутствуют или повреждены — следует убедиться, что все .bin файлы находятся в правильной директории.
  • Несовпадение версии TensorFlow.js — модель, сохранённая в одной версии, может не поддерживаться в старой версии библиотеки.

Для диагностики ошибок рекомендуется использовать try/catch:

try {
    const model = await tf.loadLayersModel('https://example.com/model.json');
} catch (err) {
    console.error('Ошибка загрузки модели:', err);
}

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

  • Всегда проверять целостность модели перед использованием.
  • Для больших моделей использовать IndexedDB или локальные файлы для уменьшения времени загрузки и сетевых запросов.
  • Если планируется дообучение, сохранять модель с trainingConfig.
  • Использовать model.summary() для быстрого визуального контроля архитектуры после загрузки.

Загрузка моделей через tf.loadLayersModel обеспечивает универсальный механизм интеграции обученных нейронных сетей в веб-приложения и серверные приложения на Node.js, сочетая удобство асинхронного доступа с гибкостью дальнейшей работы с сетью.