Функция evaluate предназначена для количественной оценки
качества обученной модели на наборе данных, который не использовался в
процессе обучения. В контексте TensorFlow.js эта функция применяется к
объектам моделей, созданным с помощью классов tf.Sequential
и tf.LayersModel. Основная цель — вычисление значения
функции потерь и метрик на тестовых данных, что позволяет понять,
насколько модель способна обобщать информацию за пределами обучающей
выборки.
Метод вызывается у объекта модели следующим образом:
const result = model.evaluate(x, y, { batchSize, verbose });
Параметры:
x — входные данные для оценки. Может быть:
tf.Tensor с формой
[numSamples, ...inputShape]y — целевые метки для соответствующих входов.
Аналогично, может быть тензором или массивом тензоров.
batchSize (опционально) — размер
мини-батча, используемого при вычислениях. Оптимальный размер зависит от
объема данных и доступной памяти.
verbose (опционально) — уровень
логирования. 0 — без вывода, 1 — вывод
прогресса в консоль.
Возвращаемое значение: Функция возвращает массив значений, содержащих:
Если метрик несколько, они возвращаются в том порядке, в котором были
указаны при вызове model.compile().
Простейший случай — модель с одним входом и одной метрикой, например
accuracy:
const result = model.evaluate(testXs, testYs);
result.print();
Вывод будет примерно таким:
Tensor
[[0.135], // Потери
[0.95]] // Точность
Здесь первый элемент массива соответствует функции потерь, второй — точности модели на тестовой выборке.
Если модель имеет несколько выходов, evaluate вернет
массив для каждого выхода по отдельности:
const results = model.evaluate([x1, x2], [y1, y2]);
results.forEach(tensor => tensor.print());
При нескольких метриках на каждом выходе массив будет содержать значения всех метрик в порядке, указанном при компиляции.
batchSizeИспользование параметра batchSize важно при работе с
большими наборами данных, чтобы избежать переполнения памяти:
const batchSize = 32;
const result = model.evaluate(testXs, testYs, { batchSize });
TensorFlow.js разбивает данные на пакеты указанного размера и последовательно вычисляет потери и метрики для каждого пакета, затем усредняет результаты.
tf.data.DatasetМетод evaluate поддерживает объекты типа
tf.data.Dataset, что позволяет оценивать модели на
потоковых данных:
const dataset = tf.data.array({ xs: testXs, ys: testYs })
.batch(32);
const result = await model.evaluateDataset(dataset);
Отличие метода evaluateDataset в том, что он работает
асинхронно и может эффективно обрабатывать большие объемы данных без
необходимости загружать их полностью в память.
accuracy) для классификации или
среднеквадратичная ошибка (mse) для регрессии.const model = tf.sequential({
layers: [
tf.layers.dense({ units: 64, activation: 'relu', inputShape: [10] }),
tf.layers.dense({ units: 3, activation: 'softmax' })
]
});
model.compile({
optimizer: 'adam',
loss: 'categoricalCrossentropy',
metrics: ['accuracy']
});
// Обучение модели
await model.fit(trainXs, trainYs, { epochs: 10, batchSize: 32 });
// Оценка модели
const [loss, accuracy] = model.evaluate(testXs, testYs);
console.log(`Loss: ${loss.dataSync()}, Accuracy: ${accuracy.dataSync()}`);
В этом примере показано сочетание методов fit и
evaluate для полного цикла обучения и тестирования
модели.
evaluateDataset с батчингом.evaluate не изменяет параметры модели, а только
вычисляет показатели на заданных данных.Метод evaluate является ключевым инструментом для
объективной проверки производительности модели и контроля переобучения,
обеспечивая надежное измерение качества прогнозов.