Keras.js представляет собой JavaScript-библиотеку, позволяющую запускать модели, обученные в Keras, непосредственно в браузере или в Node.js без необходимости установки Python. Библиотека загружает модели в формате JSON вместе с бинарными весами, предоставляя удобный интерфейс для предсказаний на стороне клиента.
Ключевые моменты работы с Keras.js:
model.to_json() и сохранены через
model.save_weights()..bin, чтобы Keras.js корректно их считывал.KerasJS.Model для инициализации
модели и model.predict() для получения предсказаний.const model = new KerasJS.Model({
filepath: 'model.json',
gpu: true
});
await model.ready();
const inputData = {
input_1: new Float32Array([0.5, 0.2, 0.1])
};
const outputData = await model.predict(inputData);
console.log(outputData.output_1);
Матрица ошибок (confusion matrix) является основным инструментом для оценки качества классификационных моделей. Она позволяет визуализировать, как модель распределяет предсказания между различными классами, и выявлять систематические ошибки.
Структура матрицы ошибок:
| Предсказанный Истинный | Класс 1 | Класс 2 | … | Класс N |
|---|---|---|---|---|
| Класс 1 | TP | FP | … | FP |
| Класс 2 | FN | TP | … | FP |
| … | … | … | … | … |
| Класс N | FN | FN | … | TP |
В Keras.js нет встроенной функции для генерации матрицы ошибок, поэтому её необходимо реализовать на стороне JavaScript.
Создание матрицы ошибок можно реализовать с использованием массивов и базовых циклов.
function confusionMatrix(trueLabels, predictedLabels, numClasses) {
const matrix = Array.from({ length: numClasses }, () =>
Array(numClasses).fill(0)
);
for (let i = 0; i < trueLabels.length; i++) {
const trueIndex = trueLabels[i];
const predIndex = predictedLabels[i];
matrix[trueIndex][predIndex] += 1;
}
return matrix;
}
Пояснения:
trueLabels и predictedLabels — массивы
числовых индексов классов.numClasses — общее количество классов.matrix[i][j] содержит количество
случаев, когда объект истинного класса i был предсказан как
класс j.Для наглядного анализа удобно выводить матрицу в консоль или на веб-страницу с цветовой дифференциацией.
function printMatrix(matrix) {
console.table(matrix);
}
Для более продвинутой визуализации можно использовать библиотеки D3.js или Chart.js, создавая тепловые карты, где интенсивность цвета соответствует количеству ошибок.
Процесс оценки модели через матрицу ошибок состоит из нескольких этапов:
const model = new KerasJS.Model({ filepath: 'model.json' });
await model.ready();
const trueLabels = [];
const predictedLabels = [];
for (let sample of testData) {
const output = await model.predict({ input_1: sample.input });
const predictedClass = output.output_1.indexOf(Math.max(...output.output_1));
predictedLabels.push(predictedClass);
trueLabels.push(sample.label);
}
const matrix = confusionMatrix(trueLabels, predictedLabels, numClasses);
printMatrix(matrix);
Матрица ошибок позволяет вычислять следующие ключевые метрики:
Точность (Accuracy): [ = ]
Полнота (Recall) для класса i: [ _i = ]
Точность предсказаний (Precision) для класса i: [ _i = ]
F1-мера: [ F1_i = 2 ]
Эти метрики можно вычислять динамически на основе данных матрицы ошибок в JavaScript, что позволяет получить полноценную оценку качества классификационной модели прямо в браузере.
При работе с большими тестовыми наборами рекомендуется:
Uint8Array
или Float32Array) для хранения меток и предсказаний, что
ускоряет доступ к данным.await в цикле, используя пакетную
обработку предсказаний.async function evaluateModel(model, testData, numClasses) {
const trueLabels = [];
const predictedLabels = [];
for (let i = 0; i < testData.length; i++) {
const output = await model.predict({ input_1: testData[i].input });
const predClass = output.output_1.indexOf(Math.max(...output.output_1));
predictedLabels.push(predClass);
trueLabels.push(testData[i].label);
}
const matrix = confusionMatrix(trueLabels, predictedLabels, numClasses);
printMatrix(matrix);
const accuracy = matrix.reduce((acc, row, i) => acc + row[i], 0) /
(testData.length);
console.log('Accuracy:', accuracy);
}
Этот подход позволяет полностью интегрировать Keras.js с анализом классификационной модели, предоставляя визуальную и количественную оценку её качества на JavaScript.