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

Keras.js предоставляет возможность загружать и использовать модели, созданные в Keras, непосредственно в браузере с помощью JavaScript. Это особенно удобно для веб-приложений, где требуется выполнение предсказаний на стороне клиента без необходимости обращения к серверу.

Структура модели для Keras.js

Модель, используемая в Keras.js, должна быть экспортирована в формате JSON и сопутствующих бинарных весов:

  1. Файл модели (model.json) – содержит архитектуру сети, настройки слоёв и информацию о входных и выходных данных.
  2. Файлы весов (*.bin) – бинарные файлы с параметрами модели, обычно разбитые по слоям для оптимизации загрузки.

При подготовке модели в Keras нужно использовать функцию model.save() с указанием формата tfjs:

import tensorflow as tf
from tensorflow import keras

model = keras.Sequential([...])
model.save('model_tfjs', save_format='tfjs')

Результатом будут model.json и несколько .bin файлов, которые можно загрузить на веб-сервер.

Инициализация Keras.js

Для загрузки модели из URL создаётся объект KerasJS.Model, которому передаётся конфигурация:

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

Параметры конструктора:

  • filepath – URL до файла модели model.json.
  • gpu – флаг использования WebGL для ускорения вычислений. При значении false используется CPU.
  • debug – логирование внутренних операций для отладки (по умолчанию false).

Асинхронная загрузка модели

Загрузка и подготовка модели выполняется асинхронно методом ready():

model.ready()
  .then(() => {
    console.log('Модель успешно загружена и готова к предсказаниям.');
  })
  .catch(err => {
    console.error('Ошибка загрузки модели:', err);
  });

Метод ready() автоматически загружает все .bin файлы весов, указанные в model.json. В случае сетевых ошибок или отсутствия файлов вызывается отклонение промиса.

Формат входных и выходных данных

Keras.js использует объекты с типом Float32Array для передачи данных:

const inputData = {
  input_1: new Float32Array([0.1, 0.2, 0.3, 0.4])
};

model.predict(inputData)
  .then(outputData => {
    console.log('Результат предсказания:', outputData.output_1);
  });

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

  • Ключи объекта должны совпадать с именами входных слоёв, указанными в модели.
  • Размер массива должен соответствовать форме входа (input_shape) модели.
  • Метод predict возвращает объект с ключами, соответствующими выходным слоям модели.

Управление ресурсами при загрузке

Keras.js позволяет управлять использованием памяти и графического процессора:

  • gpu — выбор между WebGL и CPU.
  • progressCallback — функция для отслеживания прогресса загрузки весов:
const model = new KerasJS.Model({
  filepath: 'https://example.com/model/model.json',
  gpu: true,
  progressCallback: (loaded, total) => {
    console.log(`Загружено ${loaded} из ${total} байт`);
  }
});

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

Поддержка нескольких моделей

Можно одновременно загружать несколько моделей, создавая отдельные экземпляры KerasJS.Model. Важно контролировать использование GPU, так как WebGL имеет ограничение на память текстур. Оптимальная стратегия — загружать одну модель для предсказаний за раз или использовать CPU для фоновых моделей.

Ошибки и диагностика

Наиболее частые ошибки при загрузке модели:

  • 404 при загрузке model.json или .bin файлов – нужно проверить URL и доступность файлов на сервере.
  • Несовпадение формы входных данных – убедиться, что передаваемый Float32Array соответствует ожидаемой input_shape.
  • WebGL memory error – для больших моделей рекомендуется отключить GPU (gpu: false) или уменьшить размер батча предсказаний.

Кэширование загруженных моделей

После загрузки модель остаётся в памяти, что ускоряет повторные предсказания. Для долгосрочного использования можно реализовать кэширование бинарных весов через IndexedDB или Service Workers, что снижает нагрузку на сеть при повторной инициализации модели.

Примеры интеграции с веб-приложением

async function loadAndPredict(url, inputArray) {
  const model = new KerasJS.Model({ filepath: url, gpu: true });
  await model.ready();
  const output = await model.predict({ input_1: new Float32Array(inputArray) });
  return output.output_1;
}

loadAndPredict('https://example.com/model/model.json', [0.5, 0.6, 0.7])
  .then(result => console.log('Предсказание:', result));

Этот пример демонстрирует полный цикл: загрузка модели, ожидание готовности и выполнение предсказания на клиенте без обращения к серверу.

Загрузка моделей через URL делает Keras.js мощным инструментом для веб-разработки с глубоким обучением, обеспечивая высокую гибкость и переносимость моделей.