Настройка окружения: Node.js, браузер, сборщики

Установка и настройка Node.js

Keras.js работает как в браузере, так и в среде Node.js, что позволяет интегрировать модели глубокого обучения в веб-приложения и серверные приложения на JavaScript. Для работы в Node.js необходимо:

  1. Установка Node.js Последнюю стабильную версию Node.js можно скачать с официального сайта. Рекомендуется использовать версии LTS для стабильной работы. После установки проверка производится командой:

    node -v
    npm -v
  2. Инициализация проекта Для удобного управления зависимостями и скриптами создается package.json:

    npm init -y

    Это создаёт минимальный конфигурационный файл с настройками проекта.

  3. Установка Keras.js Keras.js поставляется как npm-пакет. Установка производится командой:

    npm install keras-js

    В Node.js Keras.js использует WebGL через пакет headless-gl или может работать через CPU, если WebGL недоступен.

Подготовка моделей Keras

Модели, созданные в Python с использованием Keras, необходимо экспортировать в формат, поддерживаемый Keras.js. Процесс включает следующие шаги:

  1. Сохранение модели в формате JSON

    model_json = model.to_json()
    with open("model.json", "w") as json_file:
        json_file.write(model_json)
    model.save_weights("model_weights.h5")

    Keras.js требует разделения архитектуры (JSON) и весов (HDF5).

  2. Конвертация весов в формат Keras.js Для работы в браузере и Node.js веса нужно преобразовать в бинарный формат .bin. Для этого используется утилита kerasjs-converter:

    kerasjs-converter model.json model_weights.h5 ./kerasjs_model

    После конвертации появляется структура файлов:

    kerasjs_model/
    ├─ model.json
    ├─ group1-shard1of1.bin
    └─ manifest.json

Использование Keras.js в браузере

Keras.js поддерживает работу через WebGL и CPU. Основные моменты:

  1. Подключение библиотеки

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

    const model = new KerasJS.Model({
        filepath: 'kerasjs_model/model.json',
        gpu: true
    });
    
    model.ready()
        .then(() => {
            console.log('Модель загружена');
        })
        .catch(err => console.error(err));
  3. Передача данных и получение результатов Keras.js работает с TypedArray, чаще всего Float32Array. Пример передачи одного изображения:

    const inputData = new Float32Array([/* нормализованные пиксели */]);
    model.predict({ input: inputData })
        .then(outputData => {
            console.log(outputData.output);
        });

Использование Keras.js в Node.js

Для Node.js ключевым отличием является настройка среды выполнения и необходимость пакета для WebGL:

  1. Установка зависимости для WebGL

    npm install gl canvas

    Это позволяет использовать Keras.js с ускорением GPU или CPU.

  2. Импорт и инициализация

    const KerasJS = require('keras-js');
    const model = new KerasJS.Model({
        filepath: './kerasjs_model/model.json',
        gpu: false
    });
    
    model.ready()
        .then(() => {
            console.log('Модель готова к использованию');
        });
  3. Работа с входными данными Node.js также использует Float32Array для передачи тензоров. При необходимости данные можно загружать из изображений через пакет canvas:

    const { createCanvas, loadImage } = require('canvas');
    
    async function loadImageData(path) {
        const image = await loadImage(path);
        const canvas = createCanvas(image.width, image.height);
        const ctx = canvas.getContext('2d');
        ctx.drawImage(image, 0, 0);
        const imageData = ctx.getImageData(0, 0, image.width, image.height).data;
        return Float32Array.from(imageData).map(v => v / 255);
    }

Интеграция с сборщиками модулей

Keras.js можно использовать совместно с Webpack, Rollup или Parcel. Основные рекомендации:

  1. Настройка Webpack

    • В webpack.config.js указать алиас для Keras.js:

      resolve: {
        alias: {
          'keras-js': require.resolve('keras-js')
        }
      }
    • Добавить file-loader для бинарных файлов моделей:

      module: {
        rules: [
          {
            test: /\.bin$/,
            use: 'file-loader'
          }
        ]
      }
  2. Использование с Rollup

    • Подключить плагин rollup-plugin-url для корректной загрузки бинарных файлов:

      import url fr om '@rollup/plugin-url';
      
      export default {
        plugins: [
          url({
            include: ['**/*.bin'],
            lim it: 0
          })
        ]
      }
  3. Parcel

    • Parcel автоматически обрабатывает .bin и .json, достаточно импортировать модель через import modelPath from './kerasjs_model/model.json';.

Оптимизация работы моделей

  • Использование GPU: ускоряет вычисления, если устройство поддерживает WebGL 2.0.
  • Минификация модели: удаление ненужных слоёв и параметров до конвертации в Keras.js.
  • Разделение модели: для больших моделей рекомендуется разделять слои на несколько файлов .bin для уменьшения времени загрузки.

Логирование и отладка

Keras.js поддерживает включение подробного логирования:

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

Отладочная информация включает размер тензоров, используемые слои и время вычислений, что особенно полезно при оптимизации моделей для браузера.