Keras.js представляет собой библиотеку для запуска предварительно обученных моделей Keras непосредственно в браузере на JavaScript. Основной задачей при работе с Keras.js является загрузка модели, передача данных и получение результатов. Однако для сложных сценариев требуется использование пользовательских колбэков, позволяющих контролировать процесс инференса, логировать промежуточные результаты или управлять потоками данных.
Колбэк в Keras.js — это объект с определёнными методами, которые вызываются на различных этапах работы модели. Основная цель колбэка — предоставление возможности выполнять дополнительный код в момент:
Классический пример структуры колбэка:
const customCallback = {
onLoad: function(model) {
console.log('Модель успешно загружена:', model);
},
onPredictStart: function(inputData) {
console.log('Начало предсказания для данных:', inputData);
},
onPredictEnd: function(outputData) {
console.log('Результаты предсказания:', outputData);
},
onError: function(error) {
console.error('Произошла ошибка:', error);
}
};
Каждый метод колбэка имеет свою семантику:
inputData содержит тензоры или массивы
входных данных. Используется для проверки или трансформации данных.outputData — массив или объект с
результатами. Здесь можно логировать результаты, визуализировать их или
передавать дальше по цепочке обработки.При создании экземпляра модели Keras.js колбэк передаётся через опции:
const model = new KerasJS.Model({
filepath: 'model.json',
gpu: true,
callback: customCallback
});
Флаг gpu указывает, что вычисления будут выполняться с
использованием WebGL для ускорения инференса. Передача колбэка через
опцию callback обеспечивает автоматический вызов методов на
соответствующих этапах работы модели.
Иногда требуется контролировать промежуточные слои модели. Keras.js позволяет получить доступ к внутренним слоям через объект модели. В колбэках можно извлекать промежуточные активации:
const monitorCallback = {
onPredictEnd: function(outputData) {
const intermediateLayer = model.getLayer('dense_1');
const activation = intermediateLayer.output;
console.log('Активация промежуточного слоя:', activation);
}
};
Метод getLayer(layerName) возвращает слой по имени, а
свойство output содержит тензор активаций для последней
инференции. Такой подход используется для визуализации скрытых слоёв или
отладки.
Колбэки Keras.js поддерживают асинхронные операции, что важно при работе с сетевыми запросами или динамическими источниками данных:
const asyncCallback = {
onPredictEnd: async function(outputData) {
const response = await fetch('/log_predictions', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(outputData)
});
console.log('Результаты отправлены на сервер, статус:', response.status);
}
};
Асинхронные функции внутри колбэка позволяют безопасно выполнять HTTP-запросы, сохранять данные в IndexedDB или обновлять интерфейс без блокировки основного потока браузера.
onPredictStart или
onPredictEnd, чтобы не замедлять инференс.onError
должен быть всегда реализован, особенно при работе с динамическими
данными.const fullCallback = {
onLoad: function(model) {
console.log('Модель загружена');
this.startTime = performance.now();
},
onPredictStart: function(inputData) {
console.log('Начало предсказания');
},
onPredictEnd: function(outputData) {
const duration = performance.now() - this.startTime;
console.log('Предсказание завершено за', duration.toFixed(2), 'мс');
},
onError: function(error) {
console.error('Ошибка во время инференса:', error.message);
}
};
Этот колбэк фиксирует время работы предсказания, выводит стартовые и конечные события, а также обрабатывает возможные ошибки.
Пользовательские колбэки в Keras.js предоставляют гибкий инструмент для мониторинга, логирования и расширения функционала модели на клиентской стороне. Правильная организация колбэков позволяет интегрировать инференс в сложные веб-приложения без потери производительности и удобства разработки.