Keras.js — это библиотека для работы с моделями нейронных сетей в
браузере на JavaScript. Она позволяет загружать заранее обученные модели
Keras и выполнять их инференс на клиентской стороне. В процессе оценки
работы модели критически важно использовать метрики, которые отражают
качество предсказаний. Помимо стандартных метрик, таких как
accuracy или meanSquaredError, Keras.js
поддерживает создание пользовательских метрик, что
позволяет гибко измерять эффективность модели под специфические
задачи.
Метрика в Keras.js — это функция, которая получает на вход предсказания модели и истинные значения, а возвращает скаляр, характеризующий качество предсказаний. Стандартные метрики реализованы в Keras и автоматически доступны при экспорте модели, однако при необходимости измерять специфические показатели, требуется написать собственную функцию.
Структура пользовательской метрики в Keras.js обычно выглядит так:
function customMetric(yTrue, yPred) {
// yTrue и yPred — массивы чисел или тензоры
let sum = 0;
for (let i = 0; i < yTrue.length; i++) {
sum += Math.abs(yTrue[i] - yPred[i]);
}
return sum / yTrue.length;
}
В примере выше реализована метрика средней абсолютной ошибки (MAE) вручную. Обратите внимание на то, что Keras.js не использует backend TensorFlow при инференсе на клиенте, поэтому операции выполняются через чистый JavaScript и массивы данных.
При загрузке модели в Keras.js через объект
KerasJS.Model, пользовательские метрики можно указать в
конфигурации:
const model = new KerasJS.Model({
filepath: 'model.bin',
gpu: false,
customMetrics: {
'mae': customMetric
}
});
После этого при вызове метода model.predict() можно
вычислять метрики следующим образом:
const output = await model.predict({ input: inputData });
const score = model.customMetrics['mae'](trueLabels, output.outputName);
console.log('MAE:', score);
Ключевые моменты:
customMetrics.Пользовательские метрики могут учитывать сложные условия, например, классификацию с несколькими порогами или работу с последовательностями:
function f1Score(yTrue, yPred) {
let tp = 0, fp = 0, fn = 0;
for (let i = 0; i < yTrue.length; i++) {
const pred = yPred[i] > 0.5 ? 1 : 0;
if (pred === 1 && yTrue[i] === 1) tp++;
if (pred === 1 && yTrue[i] === 0) fp++;
if (pred === 0 && yTrue[i] === 1) fn++;
}
const precision = tp / (tp + fp + 1e-7);
const recall = tp / (tp + fn + 1e-7);
return 2 * (precision * recall) / (precision + recall + 1e-7);
}
Такой подход позволяет создавать метрики, которые не поддерживаются стандартными средствами Keras, например F1-score для бинарной классификации или специализированные показатели для детектирования объектов.
yTrue и yPred одинаковой длины.1e-7) для избежания деления на ноль.Float32Array для совместимости с
WebGL-бэкендом.Пользовательские метрики в Keras.js открывают широкие возможности для оценки моделей в браузере, предоставляя полный контроль над вычислениями качества и позволяя создавать сложные метрики, адаптированные под конкретные задачи нейросетевой аналитики.