Keras.js — это библиотека, позволяющая запускать модели Keras непосредственно в браузере на JavaScript с использованием WebGL. Она обеспечивает возможность применения глубокого обучения на клиентской стороне, что особенно полезно для задач сжатия и восстановления данных.
Для задач сжатия и восстановления данных обычно применяются автокодировщики (autoencoders). Автокодировщик состоит из двух основных частей:
В Keras.js модели строятся и обучаются в Python с использованием Keras, а затем экспортируются в формат JSON и весовые файлы для загрузки в браузер.
Пример структуры автокодировщика в Keras (Python):
from keras.models import Model
from keras.layers import Input, Dense
input_dim = 784 # размер входного вектора, например, изображение 28x28
encoding_dim = 64 # размер латентного пространства
input_layer = Input(shape=(input_dim,))
encoded = Dense(encoding_dim, activation='relu')(input_layer)
decoded = Dense(input_dim, activation='sigmoid')(encoded)
autoencoder = Model(inputs=input_layer, outputs=decoded)
autoencoder.compile(optimizer='adam', loss='binary_crossentropy')
После обучения модель сохраняется в формате JSON:
# Сохранение архитектуры
with open('autoencoder.json', 'w') as f:
f.write(autoencoder.to_json())
# Сохранение весов
autoencoder.save_weights('autoencoder_weights.h5')
В JavaScript Keras.js позволяет загружать модель и веса следующим образом:
import KerasJS from 'keras-js';
// Инициализация модели
const model = new KerasJS.Model({
filepaths: {
model: 'autoencoder.json',
weights: 'autoencoder_weights.buf',
metadata: 'autoencoder_metadata.json'
},
gpu: true
});
// Загрузка модели в память
model.ready()
.then(() => {
console.log('Модель загружена');
})
.catch(err => console.error(err));
Важно: веса необходимо конвертировать из формата
HDF5 в бинарный формат .buf, совместимый с Keras.js. Для
этого используются утилиты Keras.js конвертера.
Данные необходимо нормализовать и преобразовать в формат Float32Array перед передачей в модель:
// Пример нормализации изображения 28x28 пикселей
const inputArray = new Float32Array(28 * 28);
for (let i = 0; i < 28 * 28; i++) {
inputArray[i] = imageData[i] / 255; // масштабирование до [0,1]
}
После подготовки данных можно выполнить сжатие и восстановление:
const inputData = { input: inputArray };
model.predict(inputData)
.then(outputData => {
const reconstructed = outputData.output;
// reconstructed содержит восстановленные значения пикселей
})
.catch(err => console.error(err));
Ключевой момент: латентное представление не выводится напрямую в базовой конфигурации. Для работы с самим сжатием, нужно модифицировать модель, добавив промежуточный слой для извлечения латентного кода:
const encoder = Model(inputs=input_layer, outputs=encoded);
После экспорта и загрузки в Keras.js можно получить сжатое представление для анализа или дальнейшей передачи.
Использование GPU через WebGL позволяет ускорить обработку больших массивов данных, особенно при работе с изображениями или видео. Рекомендации:
Float32Array для
прямой загрузки в модель.float32
вместо float64) для уменьшения объема загружаемых
данных.Для оценки качества восстановления используются метрики:
В браузере их можно реализовать с помощью простых функций:
function mse(original, reconstructed) {
let sum = 0;
for (let i = 0; i < original.length; i++) {
const diff = original[i] - reconstructed[i];
sum += diff * diff;
}
return sum / original.length;
}
Keras.js позволяет выполнять сжатие и восстановление на лету. Примеры применения:
Благодаря использованию автокодировщиков и Keras.js, можно строить полностью клиентские решения для обработки данных с минимальной задержкой и без необходимости обращения к серверу, что обеспечивает конфиденциальность и мгновенную обработку.