Метод evaluate: использование и интерпретация результатов

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


Синтаксис и базовое использование

В Keras.js метод evaluate вызывается на объекте модели:

model.evaluate(inputs, targets, options)
  .then(results => {
      console.log('Loss:', results[0]);
      console.log('Metrics:', results.slice(1));
  });

Аргументы метода:

  • inputs — массив или объект, содержащий входные данные для модели. Должны соответствовать форме входного слоя.

  • targets — массив или объект, содержащий правильные ответы для проверки. Должны соответствовать форме выходного слоя.

  • options — объект с дополнительными параметрами:

    • batchSize — размер пакета данных для вычислений (по умолчанию 32). Определяет, сколько примеров будет обработано одновременно, что влияет на потребление памяти и скорость.
    • verbose — уровень вывода: 0 (без вывода), 1 (вывод прогресса).

Возвращаемое значение: Метод возвращает массив, где первый элемент — значение функции потерь, а последующие — значения метрик, указанных при компиляции модели.


Пример использования

Допустим, модель была обучена на задаче классификации изображений с использованием функции потерь categoricalCrossentropy и метрики accuracy. Для оценки модели на тестовом наборе данных:

const testLossAndMetrics = await model.evaluate(testImages, testLabels, {
  batchSize: 64,
  verbose: 1
});

const loss = testLossAndMetrics[0];
const accuracy = testLossAndMetrics[1];

console.log(`Функция потерь на тесте: ${loss}`);
console.log(`Точность на тесте: ${accuracy}`);

В этом примере:

  • testImages — тензор входных изображений.
  • testLabels — тензор меток в формате one-hot encoding.
  • batchSize равен 64, что позволяет обрабатывать данные более эффективно при ограниченной памяти GPU.

Интерпретация результатов

Функция потерь (loss) отражает, насколько предсказания модели отклоняются от истинных значений. Чем меньше значение функции потерь, тем лучше модель соответствует данным. Для различных задач используются разные функции потерь:

  • categoricalCrossentropy — многоклассовая классификация.
  • binaryCrossentropy — бинарная классификация.
  • meanSquaredError — регрессия.
  • meanAbsoluteError — регрессия с акцентом на абсолютные ошибки.

Метрики (metrics) дают дополнительное представление о производительности модели. В классификации часто используют accuracy, precision, recall, f1Score. В регрессии метрики могут включать meanAbsoluteError или rootMeanSquaredError.

Важно понимать, что значение функции потерь зависит от выбранной функции и масштаба данных, поэтому прямое сравнение потерь между разными задачами некорректно.


Использование с пакетной обработкой данных

Для больших наборов данных метод evaluate поддерживает обработку пакетами (batch processing). Это позволяет экономить оперативную память, так как одновременно обрабатывается ограниченное число примеров.

const batchSize = 128;

for (let i = 0; i < testData.length; i += batchSize) {
  const batchInputs = testData.slice(i, i + batchSize);
  const batchTargets = testLabels.slice(i, i + batchSize);
  const batchResults = await model.evaluate(batchInputs, batchTargets, { batchSize });
  console.log('Пакетная потеря:', batchResults[0]);
}

Работа с несколькими входами и выходами

Keras.js поддерживает модели с несколькими входами и выходами. В этом случае inputs и targets передаются в виде объектов, где ключи соответствуют именам слоев:

const inputs = { inputA: tensorA, inputB: tensorB };
const targets = { output1: labels1, output2: labels2 };

const results = await model.evaluate(inputs, targets);
console.log('Функция потерь общего выхода:', results[0]);
console.log('Метрики отдельных выходов:', results.slice(1));

Важные моменты и рекомендации

  • Перед использованием evaluate необходимо убедиться, что модель была корректно скомпилирована с нужными функцией потерь и метриками.
  • Метод не изменяет веса модели — это чисто оценочная операция.
  • Для корректного вычисления метрик входные данные должны иметь ту же форму и масштабирование, что использовались при обучении.
  • Для сложных моделей с несколькими выходами порядок элементов массива результатов соответствует порядку выходов, указанному при компиляции.

Метод evaluate обеспечивает прозрачную и эффективную оценку модели на новых данных, позволяя контролировать качество работы нейронной сети и выявлять возможные проблемы с переобучением или недостаточной генерализацией.