Keras.js — это библиотека для работы с предварительно обученными моделями Keras непосредственно в браузере с использованием JavaScript. Одной из ключевых задач при обучении и тестировании моделей является анализ динамики кривых потерь (loss) и метрик (metrics), что позволяет оценить качество обучения и выявлять проблемы переобучения или недообучения.
Перед визуализацией необходимо загрузить модель и подготовить данные.
Keras.js поддерживает форматы моделей, экспортированных через
Keras в JSON. Пример загрузки модели:
const model = new KerasJS.Model({
filepath: 'model.json',
gpu: true
});
await model.ready();
Здесь:
filepath — путь к файлу модели.gpu: true активирует WebGL для ускорения
вычислений.Данные для анализа могут быть подготовлены как массивы
Float32Array, где каждая выборка соответствует входным
данным модели.
Keras.js не предоставляет встроенного механизма для прямого обучения
модели в браузере, однако кривые потерь можно получать при
оценке модели на данных. Для этого используется метод
model.predict() и ручной расчёт функции потерь.
Пример вычисления потерь на батче данных:
function meanSquaredError(yTrue, yPred) {
let sum = 0;
for (let i = 0; i < yTrue.length; i++) {
const diff = yTrue[i] - yPred[i];
sum += diff * diff;
}
return sum / yTrue.length;
}
const predictions = await model.predict({ input: inputData });
const loss = meanSquaredError(targetData, predictions.output);
console.log('Loss:', loss);
Ключевой момент: функция потерь определяется вручную, поскольку Keras.js в основном предназначен для инференса, а не для обучения.
Для отображения кривых потерь и метрик удобно использовать графические библиотеки, такие как Chart.js или Plotly.js.
const ctx = document.getElementById('lossChart').getContext('2d');
const lossChart = new Chart(ctx, {
type: 'line',
data: {
labels: epochs, // массив номеров эпох
datasets: [{
label: 'Loss',
data: lossValues, // массив потерь на каждой эпохе
borderColor: 'rgba(255,99,132,1)',
fill: false
}, {
label: 'Accuracy',
data: accuracyValues, // массив метрик
borderColor: 'rgba(54,162,235,1)',
fill: false
}]
},
options: {
responsive: true,
scales: {
x: { title: { display: true, text: 'Epochs' } },
y: { title: { display: true, text: 'Value' } }
}
}
});
Здесь:
lossValues и accuracyValues формируются в
процессе пошаговой оценки модели.epochs — массив индексов шагов (или эпох),
соответствующих значениям кривых.Для интерактивного анализа полезно обновлять графики после
каждой итерации предсказания, что позволяет отслеживать
изменения метрик на лету. В Chart.js это реализуется методом
update():
lossChart.data.datasets[0].data.push(newLossValue);
lossChart.data.datasets[1].data.push(newAccuracyValue);
lossChart.data.labels.push(currentEpoch);
lossChart.update();
Такой подход особенно эффективен при работе с потоковыми данными или при онлайн-оценке модели на новых выборках.
gpu: true в Keras.js и библиотек с WebGL (Plotly) ускоряет
отрисовку графиков.Kривые можно строить для любой метрики, рассчитанной вручную, например:
function meanAbsoluteError(yTrue, yPred) {
let sum = 0;
for (let i = 0; i < yTrue.length; i++) {
sum += Math.abs(yTrue[i] - yPred[i]);
}
return sum / yTrue.length;
}
Создание отдельного графика для каждой метрики или комбинированного графика позволяет визуально оценивать соотношение различных характеристик качества модели.
Эти методы позволяют строить подробную визуализацию динамики обучения и предсказаний, делая анализ моделей Keras в браузере удобным и информативным.