Keras.js — это библиотека, позволяющая запускать модели Keras непосредственно в браузере с использованием JavaScript и WebGL. Она предоставляет возможность выполнять обучение и инференс на клиентской стороне, что снижает нагрузку на сервер и упрощает интеграцию нейросетевых моделей в веб-приложения.
Ключевые особенности Keras.js:
.json и .bin.Float32Array).Для задач классификации изображений чаще всего используются сверточные нейронные сети (CNN). Основная структура такой сети включает следующие слои:
Входной слой (Input) Определяет
форму входного изображения. Обычно изображения нормализуются и
преобразуются в массивы чисел с диапазоном [0, 1].
const inputShape = [64, 64, 3]; // 64x64 RGB изображениеСверточные слои (Conv2D) Извлекают
пространственные признаки изображения. Каждый сверточный слой содержит
несколько фильтров (kernels), которые сканируют изображение для
обнаружения паттернов.
Параметры Conv2D:
filters: количество фильтровkernelSize: размер ядраactivation: функция активации, чаще ReLUpadding: 'same' или
'valid'model.add(Conv2D({ filters: 32, kernelSize: [3, 3], activation: 'relu', inputShape }));Субдискретизирующие слои
(MaxPooling2D) Уменьшают пространственные размеры
карты признаков, что позволяет сократить количество параметров и
ускорить вычисления.
model.add(MaxPooling2D({ poolSize: [2, 2] }));Слои нормализации
(BatchNormalization) Стабилизируют процесс
обучения, ускоряют сходимость и уменьшают вероятность
переобучения.
Полносвязные слои (Dense) На
последних этапах сети признаки преобразуются в вектор для классификации.
Используется мягкаяmax-функция активации (softmax) для
многоклассовой классификации.
model.add(Dense({ units: 128, activation: 'relu' }));
model.add(Dense({ units: numClasses, activation: 'softmax' }));Регуляризация (Dropout)
Используется для предотвращения переобучения. Случайным образом
отключает часть нейронов на каждом шаге обучения.
model.add(Dropout({ rate: 0.5 }));Для эффективного обучения важно правильно подготовить изображения:
Пример создания тензора изображения в Jav * aScript:
const imageData = new Float32Array(width * height * 3); // RGB изображение
// заполнение массива данными пикселей
Модель, обученная в Python Keras, экспортируется в формат JSON вместе с бинарными весами. В Keras.js она загружается следующим образом:
const model = new KerasJS.Model({
filepaths: {
model: 'model.json',
weights: 'model_weights.buf',
},
gpu: true
});
await model.ready();
После загрузки можно выполнять инференс:
const outputData = await model.predict({ input_1: imageData });
outputData содержит вероятности классов, из которых
определяется наиболее вероятный класс.
Хотя Keras.js ограничен в возможностях обучения на клиенте, важно понимать следующие параметры, применяемые на этапе подготовки модели:
async/await предотвращает блокировку UI.Keras.js объединяет преимущества Keras и возможностей браузера, позволяя создавать интерактивные приложения с нейросетевыми моделями без необходимости серверного бэкенда. Правильная архитектура модели, подготовка данных и оптимизация вычислений обеспечивают точную и быструю классификацию изображений.