Загрузка предобученных моделей Keras Python

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

Конвертация модели Keras Python для использования в Keras.js

Перед использованием модели в Keras.js необходимо выполнить несколько шагов по подготовке модели:

  1. Сохранение модели в формате JSON и весов В Keras Python модель сохраняется в два отдельных файла:

    • архитектура модели: .json
    • веса модели: .bin или .h5, затем преобразованные в бинарный формат, поддерживаемый Keras.js.

    Пример сохранения архитектуры и весов:

    from keras.models import model_from_json
    
    # Сохранение архитектуры
    model_json = model.to_json()
    with open("model.json", "w") as json_file:
        json_file.write(model_json)
    
    # Сохранение весов
    model.save_weights("model.h5")
  2. Конвертация весов в формат Keras.js Keras.js не может напрямую работать с форматом .h5. Необходимо использовать утилиту kerasjs-converter, которая преобразует .h5 в JSON с бинарными данными:

    kerasjs-converter model.json model.h5 build/

    В результате создаются два файла: model.json (архитектура + ссылки на веса) и набор бинарных файлов с весами.

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

После подготовки файлов их можно загружать с помощью Keras.js в браузере или Node.js. Основной класс для работы — KerasJS.Model.

const KerasJS = require('keras-js');

// Инициализация модели
const model = new KerasJS.Model({
  filepaths: {
    model: 'build/model.json',
    weights: 'build/model_weights.buf'
  },
  gpu: true // использование WebGL, если поддерживается
});

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

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

  • filepaths.model — путь к JSON-файлу с архитектурой модели.
  • filepaths.weights — путь к бинарному файлу с весами.
  • Параметр gpu: true включает вычисления на GPU через WebGL, что значительно ускоряет инференс в браузере.

Применение модели к входным данным

После успешной загрузки модели можно выполнять прогнозирование. Keras.js принимает данные в виде Float32Array или стандартного массива чисел. Для многомерных входов необходимо правильно задавать форму тензора.

// Пример входного массива для модели с одним входом размером [1, 28, 28]
const inputData = new Float32Array(28 * 28); // Заполнить значениями пикселей

model.predict({ input: inputData })
  .then(outputData => {
    console.log('Результат инференса:', outputData.output);
  })
  .catch(err => {
    console.error('Ошибка при прогнозе:', err);
  });

Важные моменты:

  • В Keras.js выход модели также возвращается в объекте с ключами, соответствующими именам выходных слоев.
  • Необходимо соблюдать ту же нормализацию входных данных, которая использовалась при обучении модели в Keras Python.

Особенности совместимости

  • Keras.js поддерживает ограниченный набор слоев Keras Python. Сложные кастомные слои или Lambda-слои требуют предварительной переработки или реализации вручную.
  • Поддерживаются только слои, совместимые с инференсом в браузере: Dense, Conv2D, MaxPooling2D, Flatten, Activation и другие базовые слои.
  • Обработка больших моделей в браузере может быть ограничена памятью и производительностью. Для моделей с десятками миллионов параметров рекомендуется использовать серверную инференцию или WebAssembly-библиотеки с оптимизацией памяти.

Оптимизация производительности

  1. WebGL и GPU: использование gpu: true позволяет значительно ускорить вычисления.
  2. Пакетная обработка: объединение нескольких входов в батч позволяет уменьшить накладные расходы на выполнение инференса.
  3. Минификация модели: удаление неиспользуемых слоев и сокращение размера весов перед конвертацией уменьшает время загрузки.

Итоговые рекомендации по работе с Keras.js

  • Всегда проверять, что модель корректно конвертирована и все веса загружены.
  • Тестировать инференс на небольших данных перед использованием на больших массивах.
  • Поддерживать совместимость версий Keras Python и Keras.js для предотвращения ошибок при загрузке архитектуры и весов.

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