Keras.js — это JavaScript-библиотека, позволяющая выполнять модели, обученные в Keras (Python), непосредственно в браузере или на Node.js без необходимости серверной обработки. Основное преимущество заключается в переносимости нейронных сетей и возможности работы с ними на клиентской стороне, что снижает задержки при прогнозировании и исключает передачу данных на сервер.
Модели Keras.js используют формат JSON для описания
архитектуры и веса модели, экспортированные из Keras через
model.to_json() и model.save_weights(). После
загрузки они становятся доступными для выполнения предсказаний через API
Keras.js.
Модель в Keras.js состоит из двух частей:
Для выполнения предсказаний используется объект
KerasJS.Model, который инициализируется указанием пути к
JSON и весам.
const model = new KerasJS.Model({
filepaths: {
model: 'model.json',
weights: 'model_weights.buf'
},
gpu: true
});
await model.ready();
Классификационная голова (classification head) — это
верхний слой нейронной сети, который отвечает за формирование
окончательного прогноза. В типичных CNN она состоит из одного или
нескольких плотных (Dense) слоев, завершающихся softmax для
многоклассовой классификации или sigmoid для бинарной.
Замена головы необходима при адаптации предобученной модели к новой задаче, например, если сеть обучена на ImageNet (1000 классов), а требуется классификация на 10 классов.
Предварительно экспортированная модель загружается в Keras.js так же, как любая другая:
const baseModel = new KerasJS.Model({
filepaths: {
model: 'base_model.json',
weights: 'base_model_weights.buf'
},
gpu: true
});
await baseModel.ready();
Архитектура модели хранится в JSON. Для замены головы необходимо:
Dense с количеством нейронов,
соответствующим новой задаче.Пример структуры нового слоя:
{
"class_name": "Dense",
"config": {
"units": 10,
"activation": "softmax"
},
"name": "new_classification_head"
}
После модификации JSON его можно сохранить и загрузить в Keras.js так же, как исходную модель.
Новые слои не имеют предобученных весов, поэтому их необходимо
инициализировать случайным образом. В Keras.js поддерживается загрузка
весов в формате бинарных файлов .buf. Для новых слоев можно
оставить веса пустыми или задать их генератором случайных чисел.
После изменения архитектуры создается новый объект
KerasJS.Model, указывающий на измененный JSON и веса:
const newModel = new KerasJS.Model({
filepaths: {
model: 'modified_model.json',
weights: 'modified_model_weights.buf'
},
gpu: true
});
await newModel.ready();
С предобученной базой и новой головой модель готова к прогнозированию. Важно, что слои до головы сохраняют знания, а верхний слой отвечает за новую классификацию.
const inputData = new Float32Array([/* данные */]);
const outputData = await newModel.predict({ input: inputData });
console.log(outputData.output);
softmax, для бинарной —
sigmoid.Dense слоев,
подключенных к общей базе..buf для повторного
использования в Keras.js.Замена классификационной головы в Keras.js позволяет эффективно адаптировать предобученные модели под новые задачи, сохраняя вычислительные ресурсы и ускоряя процесс развертывания нейросетей на фронтенде.