Keras.js предоставляет возможность запускать модели, обученные в Keras (Python), непосредственно в браузере с использованием JavaScript. Для полноценного анализа работы модели и контроля процесса обучения важно правильно организовать логирование и мониторинг. Несмотря на то, что Keras.js ориентирован на инференс, методы для анализа метрик и состояния модели в процессе работы можно применять локально, используя доступные инструменты JavaScript.
Логирование в контексте Keras.js разделяется на несколько уровней:
Пример фиксации инференса:
const model = new KerasJS.Model({ filepath: 'model.bin' });
const inputData = new Float32Array([0.5, 0.8, 0.2]);
model.ready().then(() => {
model.predict({ input: inputData }).then(outputData => {
console.log('Предсказание модели:', outputData.output);
logInference(inputData, outputData.output);
});
});
function logInference(input, output) {
const timestamp = new Date().toISOString();
console.log(`[${timestamp}] Вход: ${input}, Выход: ${output}`);
}
Ключевой момент: логирование должно быть легковесным, чтобы не замедлять работу модели в браузере, особенно на мобильных устройствах.
Хотя Keras.js не обучает модели в браузере, возможны следующие сценарии:
Пример организации мониторинга метрик:
let metricsHistory = [];
function monitorMetrics(input, target, prediction) {
const error = computeMSE(target, prediction);
metricsHistory.push(error);
if (metricsHistory.length > 100) metricsHistory.shift();
console.log('Средняя ошибка последних 100 предсказаний:',
metricsHistory.reduce((a,b) => a+b, 0) / metricsHistory.length);
}
function computeMSE(target, prediction) {
let sum = 0;
for (let i = 0; i < target.length; i++) {
const diff = target[i] - prediction[i];
sum += diff * diff;
}
return sum / target.length;
}
Важное наблюдение: хранение истории метрик позволяет выявлять тренды и аномалии в поведении модели на новых данных, что критично для приложений с реальным временем отклика.
Для браузерного мониторинга метрик удобно использовать библиотеки визуализации, например Chart.js или Plotly. Это позволяет динамически строить графики ошибок и распределений предсказаний.
const ctx = document.getElementById('metricsChart').getContext('2d');
const chart = new Chart(ctx, {
type: 'line',
data: {
labels: [],
datasets: [{
label: 'MSE',
data: [],
borderColor: 'rgba(75, 192, 192, 1)',
fill: false
}]
}
});
function updateChart(error) {
chart.data.labels.push(new Date().toLocaleTimeString());
chart.data.datasets[0].data.push(error);
if (chart.data.labels.length > 50) {
chart.data.labels.shift();
chart.data.datasets[0].data.shift();
}
chart.update();
}
Рекомендация: использовать буферизацию данных, чтобы не перегружать браузер при высокочастотном мониторинге.
Для отладки или онлайн-адаптации полезно сохранять веса модели в локальном хранилище браузера:
function saveWeights(model) {
model.getWeights().then(weights => {
const serialized = weights.map(w => Array.from(w.dataSync()));
localStorage.setItem('modelWeights', JSON.stringify(serialized));
});
}
function loadWeights(model) {
const stored = localStorage.getItem('modelWeights');
if (!stored) return;
const parsed = JSON.parse(stored);
model.setWeights(parsed.map(arr => new Float32Array(arr)));
}
Ключевой момент: хранение весов в локальном хранилище помогает быстро восстановить состояние модели без необходимости повторной загрузки больших бинарных файлов.
Мониторинг времени выполнения отдельных операций критичен для сложных моделей, особенно при запуске на устройствах с ограниченными ресурсами:
const start = performance.now();
model.predict({ input: inputData }).then(() => {
const end = performance.now();
console.log('Время инференса (мс):', end - start);
});
Совет: регулярный контроль производительности помогает выявлять узкие места и оптимизировать структуру модели или формат данных.
Логирование и мониторинг являются фундаментальными инструментами для стабильной работы моделей Keras.js, особенно при использовании их в веб-приложениях с динамическими данными и пользовательским взаимодействием.