Keras.js — это библиотека, позволяющая запускать предобученные модели Keras непосредственно в браузере на JavaScript с использованием WebGL для ускорения вычислений. В отличие от серверных фреймворков, Keras.js обеспечивает работу моделей на стороне клиента, что устраняет необходимость в постоянном подключении к серверу и снижает задержки при инференсе.
Ключевые компоненты Keras.js:
Модель в Keras.js может быть загружена двумя способами: локально или по URL. Важно убедиться, что все веса модели сохранены в формате, совместимом с Keras.js, так как несовпадение версий может привести к ошибкам при инференсе.
const KerasJS = require('keras-js');
const model = new KerasJS.Model({
filepath: 'model.bin',
gpu: true
});
model.ready().then(() => {
const inputData = {
input_1: new Float32Array([/* данные */])
};
model.predict(inputData).then(outputData => {
console.log(outputData);
});
});
Особенности работы с входными и выходными данными:
Float32Array.Keras.js поддерживает большинство популярных слоев, но существуют ограничения:
TimeDistributed с LSTM), могут работать медленно.Для работы в браузере модель Keras.js часто интегрируется в пайплайн данных, включающий этапы:
Float32Array.Пример обработки изображений перед инференсом:
function preprocessImage(imageElement) {
const canvas = document.createElement('canvas');
canvas.width = 224;
canvas.height = 224;
const ctx = canvas.getContext('2d');
ctx.drawImage(imageElement, 0, 0, 224, 224);
const imageData = ctx.getImageData(0, 0, 224, 224).data;
const floatArray = new Float32Array(224 * 224 * 3);
for (let i = 0; i < 224 * 224; i++) {
floatArray[i * 3 + 0] = imageData[i * 4 + 0] / 255.0;
floatArray[i * 3 + 1] = imageData[i * 4 + 1] / 255.0;
floatArray[i * 3 + 2] = imageData[i * 4 + 2] / 255.0;
}
return floatArray;
}
Интеграционное тестирование направлено на проверку корректности всего потока данных от источника до вывода модели:
Пример автоматизированного интеграционного теста с использованием Jest:
test('Model pipeline output matches expected shape', async () => {
const input = preprocessImage(document.getElementById('test-image'));
const modelInput = { input_1: input };
await model.ready();
const output = await model.predict(modelInput);
expect(output.output_1.length).toBe(1000); // проверка размерности
});
Keras.js позволяет ускорять вычисления с помощью:
gpu: true
позволяет значительно снизить время инференса.Float32Array вместо стандартных массивов JavaScript.Для кастомных слоев требуется реализовать класс на JavaScript, наследуя базовый интерфейс Keras.js:
class CustomLayer {
constructor(config) {
this.config = config;
}
call(inputs) {
// реализация операции
return inputs.map(x => x * this.config.scale);
}
}
После регистрации пользовательского слоя модель сможет корректно работать с ним, сохраняя совместимость с инференсом на клиенте.
Keras.js зависит от WebGL, поэтому интеграция должна учитывать:
WebGL 1.0 или 2.0 в
браузере.Эти факторы критичны при построении пайплайна данных, чтобы модель могла стабильно выполнять инференс без сбоев.