Пользовательские метрики

Keras.js — это библиотека для работы с моделями нейронных сетей в браузере на JavaScript. Она позволяет загружать заранее обученные модели Keras и выполнять их инференс на клиентской стороне. В процессе оценки работы модели критически важно использовать метрики, которые отражают качество предсказаний. Помимо стандартных метрик, таких как accuracy или meanSquaredError, Keras.js поддерживает создание пользовательских метрик, что позволяет гибко измерять эффективность модели под специфические задачи.

Основы метрик в 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);

Ключевые моменты:

  • Метрика должна быть синхронной и возвращать число.
  • На вход подаются готовые массивы данных, а не тензоры Keras.
  • Метрики могут быть несколько, каждая добавляется в объект 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 для бинарной классификации или специализированные показатели для детектирования объектов.

Совместимость и производительность

  • Keras.js работает на чистом JavaScript, поэтому метрики должны быть оптимизированы для работы с массивами, чтобы не создавать узких мест при больших данных.
  • Для больших моделей рекомендуется использовать WebGL или GPU режим, однако вычисление пользовательских метрик выполняется на CPU, что может быть медленнее, чем инференс.
  • Метрики должны учитывать формат данных: Keras.js может возвращать объекты с несколькими выходами, поэтому важно корректно выбирать нужный ключ.

Практические советы

  1. Проверка размеров входных данных — убедиться, что массивы yTrue и yPred одинаковой длины.
  2. Сглаживание вычислений — добавление малых чисел (1e-7) для избежания деления на ноль.
  3. Кэширование результатов — для больших выборок можно вычислять метрики по батчам и усреднять результат.
  4. Унификация формата — стандартизировать входные данные как Float32Array для совместимости с WebGL-бэкендом.

Пользовательские метрики в Keras.js открывают широкие возможности для оценки моделей в браузере, предоставляя полный контроль над вычислениями качества и позволяя создавать сложные метрики, адаптированные под конкретные задачи нейросетевой аналитики.