Keras.js — это библиотека для выполнения предобученных моделей Keras в среде браузера на JavaScript с использованием WebGL. Одним из ключевых аспектов работы с моделями является подготовка входных данных, особенно если данные представлены в формате CSV или JSON. В Keras.js данные должны быть преобразованы в массивы чисел (Float32Array) и соответствовать форме (shape) входного слоя модели.
CSV (Comma-Separated Values) часто используется для хранения табличных данных. В JavaScript чтение CSV требует преобразования текстового формата в числовые массивы.
Пример загрузки CSV файла через fetch и его обработка:
async function loadCSV(url) {
const response = await fetch(url);
const text = await response.text();
const rows = text.trim().split('\n');
const data = rows.map(row => row.split(',').map(Number));
return data;
}
В этом примере:
fetch получает CSV файл с сервера.split('\n') разделяет текст на строки.split(',') преобразует каждую строку в массив
значений.map(Number) конвертирует строковые значения в
числа.После получения массива чисел его необходимо привести к форме, подходящей для модели.
Keras.js требует, чтобы входные данные были представлены в виде
одномерного Float32Array. Для двумерных данных из CSV (например,
[samples][features]) используется функция flatten:
function flattenData(data) {
return new Float32Array(data.flat());
}
Если модель ожидает определённую форму, необходимо убедиться, что данные имеют правильные размеры:
const inputShape = [1, 28, 28, 1]; // пример для изображения 28x28
const inputData = flattenData(csvData);
Здесь inputShape должен соответствовать форме входного
слоя модели, а inputData — одномерный массив
Float32Array.
JSON (JavaScript Object Notation) чаще используется для обмена структурированными данными. В контексте Keras.js JSON может содержать как массивы чисел, так и более сложные структуры.
Пример загрузки и обработки JSON данных:
async function loadJSON(url) {
const response = await fetch(url);
const json = await response.json();
return json.data; // предполагается, что числовые данные находятся в поле data
}
После получения данных JSON нужно преобразовать их в Float32Array аналогично CSV:
const inputData = new Float32Array(jsonData.flat());
Keras.js использует строгую привязку к форме входного слоя. Если входные данные имеют размерность, отличную от ожидаемой, модель не сможет обработать их.
Пример функции для проверки и корректировки формы:
function reshapeData(data, shape) {
const totalSize = shape.reduce((a, b) => a * b);
if (data.length !== totalSize) {
throw new Error(`Размер данных (${data.length}) не совпадает с ожидаемой формой (${totalSize})`);
}
return data;
}
Это обеспечивает соответствие данных требованиям модели и предотвращает ошибки во время предсказания.
После подготовки данных модель Keras.js использует объект
KerasJS.Model для выполнения предсказаний:
const model = new KerasJS.Model({
filepaths: {
model: 'model.json',
weights: 'model_weights.buf',
metadata: 'model_metadata.json'
},
gpu: true
});
await model.ready();
const outputData = await model.predict({ input: inputData });
console.log(outputData);
Особенности работы:
filepaths указывают пути к JSON описанию модели,
бинарным весам и метаданным.gpu: true позволяет использовать WebGL для
ускорения вычислений.Для корректной работы моделей часто требуется нормализация входных данных. В CSV и JSON числовые значения могут находиться в разных диапазонах, поэтому их следует привести к диапазону, ожидаемому моделью:
function normalize(data, min = 0, max = 1) {
const flatData = data.flat();
const dataMin = Math.min(...flatData);
const dataMax = Math.max(...flatData);
return new Float32Array(flatData.map(x => (x - dataMin) / (dataMax - dataMin) * (max - min) + min));
}
Для больших наборов данных имеет смысл разбивать данные на батчи, чтобы уменьшить нагрузку на память браузера:
function createBatches(data, batchSize) {
const batches = [];
for (let i = 0; i < data.length; i += batchSize) {
batches.push(new Float32Array(data.slice(i, i + batchSize).flat()));
}
return batches;
}
Такой подход позволяет постепенно передавать данные в модель и получать результаты без перегрузки ресурсов.
predict.Эти шаги обеспечивают корректную и эффективную работу моделей Keras.js с CSV и JSON данными, позволяя интегрировать машинное обучение непосредственно в браузерные приложения.