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

Keras.js — это библиотека, предназначенная для запуска моделей Keras непосредственно в браузере с использованием JavaScript и WebGL. Одной из ключевых особенностей является поддержка двух форматов сохранения моделей: LayersModel и GraphModel, которые определяют структуру сети, способ загрузки и совместимость с различными типами архитектур.


LayersModel

LayersModel — это основной формат для последовательных и функциональных моделей Keras, который используется для моделей с линейной или частично ветвящейся архитектурой.

Структура LayersModel:

  1. JSON-файл модели Содержит описание слоев, их конфигурацию и взаимосвязи. Структура файла определяется стандартом Keras:

    • class_name: тип слоя (Dense, Conv2D, LSTM и др.)
    • config: параметры слоя (количество нейронов, активация, размер ядра и т.д.)
    • inbound_nodes: связи с предыдущими слоями
  2. Бинарные файлы весов (.bin) Содержат веса всех слоев модели в формате float32. Обычно один файл на всю модель, но при больших моделях могут быть разделены на несколько частей.

Пример загрузки LayersModel в Keras.js:

const model = new KerasJS.Model({
  filepath: 'model/model.json',
  gpu: true
});

await model.ready();

Особенности LayersModel:

  • Поддержка большинства стандартных слоев Keras.
  • Простая интеграция с веб-приложениями.
  • Удобство при последовательных архитектурах (Sequential) и простых функциональных моделях.

GraphModel

GraphModel предназначен для более сложных архитектур, где модель может содержать сложные графы зависимостей между слоями, ветвления и skip-соединения. Этот формат часто используется для моделей с ResNet-подобной структурой или многовыходными моделями.

Структура GraphModel:

  1. JSON-файл модели Описывает полный граф вычислений, включая узлы (слои), их входы и выходы.

    • nodes: список всех слоев с параметрами
    • inputs и outputs: обозначение входных и выходных точек графа
    • layers: детализированное описание каждого слоя с конфигурацией и связями
  2. Файлы весов Поддерживают как отдельные файлы для каждого слоя, так и один объединённый файл. Формат float32.

Пример использования GraphModel в Keras.js:

const model = new KerasJS.Model({
  filepath: 'graph_model/model.json',
  gpu: true
});

await model.ready();

Особенности GraphModel:

  • Поддержка сложных топологий.
  • Возможность использования многовыходных и многовходных моделей.
  • Удобство при работе с нейросетями, где слои соединены не последовательно.

Отличия LayersModel и GraphModel

Характеристика LayersModel GraphModel
Архитектура Последовательная или простая функциональная Сложный граф с ветвлениями и skip-соединениями
JSON-файл Описание слоев и их конфигурации Полный граф вычислений
Веса Один или несколько бинарных файлов Отдельные файлы на слой или объединённый
Использование Простые модели Keras Модели ResNet, Inception, многовыходные сети
Поддержка Keras слоев Большинство стандартных слоев Полный набор с графовыми связями

Принципы подготовки модели для Keras.js

  1. Экспорт из Keras:

    • В Python необходимо сохранить модель в формате Keras (.h5) или использовать model.to_json() для получения структуры.
  2. Конвертация в Keras.js:

    • Для LayersModel используется утилита kerasjs-converter, которая преобразует .h5 в JSON + бинарные веса.
    • Для GraphModel необходимо корректно указать все входы и выходы, чтобы Keras.js смог построить граф вычислений.
  3. Оптимизация для браузера:

    • Сжатие весов (quantization) для уменьшения размера.
    • Разделение больших весов на несколько бинарных файлов для ускорения загрузки.

Загрузка и использование моделей в Keras.js

После подготовки модели ключевой шаг — её интеграция в JavaScript-код:

const inputData = new Float32Array([/* входные данные */]);

const outputData = await model.predict({ input: inputData });
console.log(outputData.output);

Ключевые моменты:

  • gpu: true позволяет использовать WebGL для ускорения вычислений.
  • Входные данные должны соответствовать форме (shape) слоев модели.
  • Выходные данные возвращаются в виде Float32Array, независимо от архитектуры.

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

  • Для простых моделей предпочтителен LayersModel: быстрее загружается и проще интегрируется.
  • Для сложных сетей с ветвлениями и skip-соединениями необходим GraphModel.
  • Веб-оптимизация включает предварительную нормализацию входных данных, минимизацию размера весов и асинхронную загрузку JSON + бинарных файлов.
  • Всегда проверять совместимость слоев Keras с Keras.js: некоторые специализированные слои могут требовать дополнительной поддержки или модификации.

Механизм выбора между LayersModel и GraphModel напрямую зависит от структуры нейронной сети и требований к производительности в браузере. Грамотная подготовка и корректная конвертация модели позволяют полностью использовать возможности Keras.js для клиентских приложений на JavaScript.