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