Keras.js — это библиотека, позволяющая запускать модели, обученные с использованием Keras на Python, прямо в браузере с помощью JavaScript. Основное преимущество использования Keras.js для работы с временными рядами заключается в возможности создавать интерактивные приложения и визуализировать прогнозы без необходимости серверной обработки.
Временные ряды характеризуются последовательной зависимостью между наблюдениями. Для работы с ними необходимо подготовить данные в виде последовательностей фиксированной длины. Пример стандартной процедуры подготовки:
Нормализация данных Значения временного ряда обычно нормализуются для ускорения обучения и повышения стабильности модели:
function normalizeSeries(series) {
const min = Math.min(...series);
const max = Math.max(...series);
return series.map(x => (x - min) / (max - min));
}Формирование обучающих последовательностей Если
используется окно размером window_size, то каждое окно
данных становится входом модели, а следующее значение — выходом:
function createSequences(series, window_size) {
const X = [];
const y = [];
for (let i = 0; i < series.length - window_size; i++) {
X.push(series.slice(i, i + window_size));
y.push(series[i + window_size]);
}
return { X, y };
}Для задач прогнозирования временных рядов обычно применяются рекуррентные нейронные сети (RNN), особенно LSTM (Long Short-Term Memory). В Keras модели обучаются на Python, а затем экспортируются для использования в браузере с Keras.js.
Ключевые моменты при проектировании модели:
window_size).Пример на Python для подготовки модели, которую затем можно загрузить в Keras.js:
from keras.models import Sequential
from keras.layers import LSTM, Dense
model = Sequential()
model.add(LSTM(50, input_shape=(window_size, 1)))
model.add(Dense(1))
model.compile(optimizer='adam', loss='mse')
model.save('model.json')
После экспорта модели в формате JSON её можно загрузить в браузере:
const KerasJS = require('keras-js');
const model = new KerasJS.Model({
filepaths: {
model: 'model.json',
weights: 'model_weights.buf',
metadata: 'model_metadata.json'
},
gpu: true
});
gpu: true позволяет ускорить вычисления на GPU с
поддержкой WebGL.await model.ready();
Для предсказания следующего значения временного ряда:
Float32Array и
нормализуются.const inputData = {
input: new Float32Array(windowedSequence) // длина = window_size
};
const outputData = await model.predict(inputData);
const predictedValue = outputData.output[0];
Для многократного прогнозирования на несколько шагов вперёд используется скользящее окно, где каждый следующий прогноз подставляется в конец окна:
let currentWindow = initialWindow.slice();
const predictions = [];
for (let i = 0; i < n_steps; i++) {
const inputData = { input: new Float32Array(currentWindow) };
const outputData = await model.predict(inputData);
const nextValue = outputData.output[0];
predictions.push(nextValue);
currentWindow.shift();
currentWindow.push(nextValue);
}
Использование Keras.js для прогнозирования временных рядов эффективно в следующих сценариях:
Keras.js обеспечивает переносимость моделей, низкую задержку прогнозирования и интеграцию с фронтенд-приложениями, сохраняя при этом все преимущества архитектуры Keras.