Экспорт модели в JSON и бинарные веса

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

Структура модели в JSON

Модель Keras состоит из последовательности слоёв с различными параметрами: тип слоя, количество нейронов, функции активации и другие настройки. Для переноса модели в Keras.js архитектура сохраняется в формате JSON. Пример кода на Python для экспорта:

from keras.models import load_model
import json

model = load_model('my_model.h5')

# Сохраняем структуру модели в JSON
model_json = model.to_json()
with open('model.json', 'w') as json_file:
    json_file.write(model_json)

В файле model.json содержится объект JSON с описанием слоёв, конфигурацией каждой функции активации и параметрами компиляции. Важно: JSON не содержит веса, только архитектуру.

Пример структуры JSON для простой модели:

{
    "class_name": "Sequential",
    "config": {
        "name": "sequential",
        "layers": [
            {
                "class_name": "Dense",
                "config": {
                    "units": 64,
                    "activation": "relu",
                    "name": "dense_1"
                }
            },
            {
                "class_name": "Dense",
                "config": {
                    "units": 10,
                    "activation": "softmax",
                    "name": "dense_2"
                }
            }
        ]
    }
}

Экспорт весов в бинарный формат

Весовые коэффициенты модели необходимо сохранять отдельно. Keras.js ожидает веса в бинарном формате (.bin), соответствующем JSON. Для этого используется метод save_weights с указанием формата HDF5 или через конвертацию в бинарные массивы.

Пример сохранения весов через Python и Numpy:

import numpy as np

weights = model.get_weights()
for i, w in enumerate(weights):
    np.save(f'weight_{i}.npy', w)

Для работы с Keras.js обычно используется утилита kerasjs-converter, которая автоматически преобразует веса из формата HDF5 в бинарный файл, совместимый с Jav * aScript:

kerasjs-converter --input_model my_model.h5 --output_model ./kerasjs_model

Результатом будет папка kerasjs_model с двумя основными файлами:

  • model.json — архитектура модели.
  • model_weights.buf — бинарные веса.

Загрузка модели в Keras.js

В браузере или Node.js загрузка модели осуществляется через объект KerasJS.Model. Пример инициализации:

const model = new KerasJS.Model({
  filepaths: {
    model: 'model.json',
    weights: 'model_weights.buf'
  },
  gpu: true
});

model.ready()
  .then(() => {
    const inputData = new Float32Array([/* данные для предсказания */]);
    return model.predict({ input_1: inputData });
  })
  .then(outputData => {
    console.log(outputData);
  });

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

  • Путь к JSON и бинарным весам должен быть корректным относительно страницы.
  • В браузере можно использовать fetch или локальные пути при работе через локальный сервер.
  • gpu: true позволяет ускорить вычисления на WebGL.

Формат бинарных весов

Бинарный файл содержит все веса модели в порядке, соответствующем слоям. В Keras.js используется последовательная запись float32 массивов. Каждое ядро и смещение слоёв записаны отдельно, что обеспечивает корректное распределение при загрузке.

Важно соблюдать точный порядок слоёв и их параметров, иначе модель не будет работать. Конвертация через официальные утилиты Keras.js автоматически решает эту проблему.

Рекомендации по экспорту

  • Проверять версию Keras при экспорте — несовпадение версий может вызвать ошибки при чтении JSON.
  • Всегда использовать официальные конвертеры для генерации бинарных весов.
  • Минимизировать размер модели через удаление ненужных слоёв или использование pruning перед экспортом для ускорения работы в браузере.
  • Тестировать модель в Node.js перед внедрением в фронтенд, чтобы исключить ошибки пути к файлам и некорректные форматы данных.

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