Извлечение признаков как отдельная задача

Keras.js представляет собой библиотеку, которая позволяет запускать модели, обученные в Keras (Python), прямо в браузере с использованием JavaScript. Одним из ключевых применений является извлечение признаков из изображений, аудио или текстовых данных без необходимости повторного обучения модели.

Механизм работы

В Keras.js модели загружаются в формате JSON вместе с весами в бинарном виде. Для извлечения признаков используется подход forward pass: входные данные пропускаются через слои модели до заданного уровня, после чего активизации этого слоя рассматриваются как признаки.

  • Выбор слоя: Выбор слоя критически важен. Обычно используются слои перед последним полносвязным слоем, так как они содержат абстрактные представления данных, не связанные напрямую с задачей классификации.
  • Формат входных данных: Keras.js требует, чтобы данные были представлены в формате Float32Array. Изображения нужно нормализовать (например, делением на 255), а текстовые данные — преобразовать в последовательности чисел с помощью токенизации.

Подключение и загрузка модели

import KerasJS from 'keras-js';

const model = new KerasJS.Model({
  filepaths: {
    model: 'model.json',
    weights: 'model_weights.buf',
    metadata: 'model_metadata.json'
  },
  gpu: true
});

await model.ready();
  • model.json содержит архитектуру сети в формате Keras.
  • model_weights.buf — бинарные веса модели.
  • model_metadata.json — информация о слоях, формах входов и выходов.

Использование флага gpu: true позволяет ускорить вычисления через WebGL.

Пропуск данных через модель

Для извлечения признаков создается объект с входными данными и указанием слоя, активизацию которого нужно получить:

const inputData = new Float32Array([/* нормализованные данные */]);

const output = await model.predict({ input_1: inputData });
  • Ключ input_1 соответствует имени входного слоя модели.
  • Результат output — объект, где ключи соответствуют именам выходных слоев. Для извлечения признаков выбирается нужный слой, например dense_2.

Использование промежуточных слоев

Для получения признаков из промежуточных слоев требуется изменить модель на этапе экспорта из Keras, чтобы промежуточные слои были доступны как выходные:

from keras.models import Model

base_model = load_model('original_model.h5')
feature_layer = base_model.get_layer('dense_2').output
feature_extractor = Model(inputs=base_model.input, outputs=feature_layer)
feature_extractor.save('feature_model.h5')

После этого модель можно конвертировать в формат, совместимый с Keras.js:

kerasjs-convert feature_model.h5

Применение извлечённых признаков

  1. Кластеризация и поиск похожих объектов Полученные векторы признаков можно использовать для поиска ближайших соседей, например с помощью алгоритма k-NN.
  2. Снижение размерности и визуализация Активизации слоев высокой размерности можно уменьшить через PCA или t-SNE для визуального анализа.
  3. Передача в другую модель Извлечённые признаки могут служить входом для другой модели машинного обучения, например, SVM или градиентного бустинга.

Оптимизация и производительность

  • Пакетная обработка: для больших наборов данных следует подавать их небольшими батчами, чтобы не перегружать память браузера.
  • WebGL-ускорение: использование GPU позволяет многократно ускорить вычисления свёрточных сетей.
  • Асинхронность: model.predict возвращает промис, что обеспечивает неблокирующее выполнение и возможность параллельной загрузки данных.

Примеры практического использования

  • Извлечение признаков лиц из изображений для распознавания личности без повторного обучения сети.
  • Генерация векторных представлений текстов для семантического поиска в браузере.
  • Преобразование аудио сигналов в эмбеддинги для классификации эмоций или жанров музыки.

Ключевые рекомендации

  • Использовать слои непосредственно перед классификационными слоями для наиболее информативных признаков.
  • Всегда нормализовать данные в соответствии с тем, как это делалось при обучении модели в Keras.
  • Проверять соответствие форм входных данных форме модели (model.metadata помогает уточнить размеры).

Извлечение признаков с помощью Keras.js превращает браузер в мощный инструмент для анализа данных без необходимости серверных вычислений, позволяя применять предобученные модели в реальном времени для визуализации, кластеризации и передачи признаков в другие алгоритмы.