Keras.js работает как в браузере, так и в среде Node.js, что позволяет интегрировать модели глубокого обучения в веб-приложения и серверные приложения на JavaScript. Для работы в Node.js необходимо:
Установка Node.js Последнюю стабильную версию Node.js можно скачать с официального сайта. Рекомендуется использовать версии LTS для стабильной работы. После установки проверка производится командой:
node -v
npm -vИнициализация проекта Для удобного управления
зависимостями и скриптами создается package.json:
npm init -y
Это создаёт минимальный конфигурационный файл с настройками проекта.
Установка Keras.js Keras.js поставляется как npm-пакет. Установка производится командой:
npm install keras-js
В Node.js Keras.js использует WebGL через пакет
headless-gl или может работать через CPU, если WebGL
недоступен.
Модели, созданные в Python с использованием Keras, необходимо экспортировать в формат, поддерживаемый Keras.js. Процесс включает следующие шаги:
Сохранение модели в формате 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).
Конвертация весов в формат Keras.js Для работы в
браузере и Node.js веса нужно преобразовать в бинарный формат
.bin. Для этого используется утилита
kerasjs-converter:
kerasjs-converter model.json model_weights.h5 ./kerasjs_model
После конвертации появляется структура файлов:
kerasjs_model/
├─ model.json
├─ group1-shard1of1.bin
└─ manifest.jsonKeras.js поддерживает работу через WebGL и CPU. Основные моменты:
Подключение библиотеки
Загрузка модели
const model = new KerasJS.Model({
filepath: 'kerasjs_model/model.json',
gpu: true
});
model.ready()
.then(() => {
console.log('Модель загружена');
})
.catch(err => console.error(err));Передача данных и получение результатов Keras.js
работает с TypedArray, чаще всего
Float32Array. Пример передачи одного изображения:
const inputData = new Float32Array([/* нормализованные пиксели */]);
model.predict({ input: inputData })
.then(outputData => {
console.log(outputData.output);
});Для Node.js ключевым отличием является настройка среды выполнения и необходимость пакета для WebGL:
Установка зависимости для WebGL
npm install gl canvas
Это позволяет использовать Keras.js с ускорением GPU или CPU.
Импорт и инициализация
const KerasJS = require('keras-js');
const model = new KerasJS.Model({
filepath: './kerasjs_model/model.json',
gpu: false
});
model.ready()
.then(() => {
console.log('Модель готова к использованию');
});Работа с входными данными 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. Основные рекомендации:
Настройка Webpack
В webpack.config.js указать алиас для Keras.js:
resolve: {
alias: {
'keras-js': require.resolve('keras-js')
}
}Добавить file-loader для бинарных файлов
моделей:
module: {
rules: [
{
test: /\.bin$/,
use: 'file-loader'
}
]
}Использование с Rollup
Подключить плагин rollup-plugin-url для корректной
загрузки бинарных файлов:
import url fr om '@rollup/plugin-url';
export default {
plugins: [
url({
include: ['**/*.bin'],
lim it: 0
})
]
}Parcel
.bin и
.json, достаточно импортировать модель через
import modelPath from './kerasjs_model/model.json';..bin для
уменьшения времени загрузки.Keras.js поддерживает включение подробного логирования:
const model = new KerasJS.Model({
filepath: './kerasjs_model/model.json',
gpu: true,
debug: true
});
Отладочная информация включает размер тензоров, используемые слои и время вычислений, что особенно полезно при оптимизации моделей для браузера.