Keras.js предоставляет возможность загружать и использовать модели, созданные в Keras, непосредственно в браузере с помощью JavaScript. Это особенно удобно для веб-приложений, где требуется выполнение предсказаний на стороне клиента без необходимости обращения к серверу.
Модель, используемая в Keras.js, должна быть экспортирована в формате JSON и сопутствующих бинарных весов:
model.json) – содержит
архитектуру сети, настройки слоёв и информацию о входных и выходных
данных.*.bin) – бинарные файлы с
параметрами модели, обычно разбитые по слоям для оптимизации
загрузки.При подготовке модели в Keras нужно использовать функцию
model.save() с указанием формата tfjs:
import tensorflow as tf
from tensorflow import keras
model = keras.Sequential([...])
model.save('model_tfjs', save_format='tfjs')
Результатом будут model.json и несколько
.bin файлов, которые можно загрузить на веб-сервер.
Для загрузки модели из URL создаётся объект
KerasJS.Model, которому передаётся конфигурация:
const model = new KerasJS.Model({
filepath: 'https://example.com/model/model.json',
gpu: true
});
Параметры конструктора:
filepath – URL до файла модели
model.json.gpu – флаг использования WebGL для ускорения
вычислений. При значении false используется CPU.debug – логирование внутренних операций для отладки (по
умолчанию false).Загрузка и подготовка модели выполняется асинхронно методом
ready():
model.ready()
.then(() => {
console.log('Модель успешно загружена и готова к предсказаниям.');
})
.catch(err => {
console.error('Ошибка загрузки модели:', err);
});
Метод ready() автоматически загружает все
.bin файлы весов, указанные в model.json. В
случае сетевых ошибок или отсутствия файлов вызывается отклонение
промиса.
Keras.js использует объекты с типом Float32Array для
передачи данных:
const inputData = {
input_1: new Float32Array([0.1, 0.2, 0.3, 0.4])
};
model.predict(inputData)
.then(outputData => {
console.log('Результат предсказания:', outputData.output_1);
});
Особенности:
input_shape) модели.predict возвращает объект с ключами,
соответствующими выходным слоям модели.Keras.js позволяет управлять использованием памяти и графического процессора:
gpu — выбор между WebGL и CPU.progressCallback — функция для отслеживания прогресса
загрузки весов:const model = new KerasJS.Model({
filepath: 'https://example.com/model/model.json',
gpu: true,
progressCallback: (loaded, total) => {
console.log(`Загружено ${loaded} из ${total} байт`);
}
});
Такой подход полезен для больших моделей, где загрузка весов может занимать значительное время.
Можно одновременно загружать несколько моделей, создавая отдельные
экземпляры KerasJS.Model. Важно контролировать
использование GPU, так как WebGL имеет ограничение на память текстур.
Оптимальная стратегия — загружать одну модель для предсказаний за раз
или использовать CPU для фоновых моделей.
Наиболее частые ошибки при загрузке модели:
model.json или
.bin файлов – нужно проверить URL и доступность
файлов на сервере.Float32Array соответствует ожидаемой
input_shape.gpu: false) или уменьшить
размер батча предсказаний.После загрузки модель остаётся в памяти, что ускоряет повторные предсказания. Для долгосрочного использования можно реализовать кэширование бинарных весов через IndexedDB или Service Workers, что снижает нагрузку на сеть при повторной инициализации модели.
async function loadAndPredict(url, inputArray) {
const model = new KerasJS.Model({ filepath: url, gpu: true });
await model.ready();
const output = await model.predict({ input_1: new Float32Array(inputArray) });
return output.output_1;
}
loadAndPredict('https://example.com/model/model.json', [0.5, 0.6, 0.7])
.then(result => console.log('Предсказание:', result));
Этот пример демонстрирует полный цикл: загрузка модели, ожидание готовности и выполнение предсказания на клиенте без обращения к серверу.
Загрузка моделей через URL делает Keras.js мощным инструментом для веб-разработки с глубоким обучением, обеспечивая высокую гибкость и переносимость моделей.