Keras.js предоставляет возможность загружать модели в формате Keras (HDF5 или JSON с весами в бинарном формате) прямо в браузере, используя JavaScript. Это позволяет выполнять инференс без серверной поддержки, что особенно полезно для интерактивных приложений с нейронными сетями. Однако полная загрузка больших моделей может быть ресурсозатратной. Для решения этой задачи применяется частичная загрузка модели.
Частичная загрузка позволяет подгружать только необходимые слои или
веса модели. Keras.js реализует это через параметр
loadLayers при создании экземпляра модели. Слои модели
перечисляются по именам, что дает возможность:
Пример структуры частичной загрузки:
import KerasJS from 'keras-js';
const model = new KerasJS.Model({
filepath: 'model.json',
gpu: true,
loadLayers: ['conv2d_1', 'dense_1']
});
model.ready()
.then(() => {
console.log('Выбранные слои загружены');
})
.catch(err => console.error(err));
В этом примере загружаются только первый сверточный и первый полносвязный слой, остальные остаются незагруженными до необходимости.
.bin для весов. Для частичной загрузки
необходимо отдельно сгенерировать бинарные веса для выбранных слоев с
помощью Python-скрипта.Горячая замена модели — это возможность менять модель в браузере во
время работы приложения без перезагрузки страницы. В Keras.js это
реализуется через повторное создание объекта Model и его
подгрузку.
Пример:
import KerasJS from 'keras-js';
let currentModel = new KerasJS.Model({ filepath: 'model_v1.json', gpu: true });
currentModel.ready()
.then(() => currentModel.predict({ input_1: new Float32Array([0,1,2]) }))
.then(output => {
console.log('Выход старой модели:', output);
// Горячая замена
currentModel = new KerasJS.Model({ filepath: 'model_v2.json', gpu: true });
return currentModel.ready();
})
.then(() => currentModel.predict({ input_1: new Float32Array([0,1,2]) }))
.then(output => console.log('Выход новой модели:', output))
.catch(err => console.error(err));
model = null и сборки мусора
браузера.import KerasJS from 'keras-js';
// Загружаем только базовые слои
let model = new KerasJS.Model({
filepath: 'base_model.json',
gpu: true,
loadLayers: ['input', 'conv2d_1']
});
model.ready()
.then(() => {
console.log('Базовые слои загружены');
return model.predict({ input_1: new Float32Array([1,2,3]) });
})
.then(output => {
console.log('Результат инференса базовой модели:', output);
// Горячая подгрузка расширенных слоев
model = new KerasJS.Model({
filepath: 'extended_model.json',
gpu: true
});
return model.ready();
})
.then(() => model.predict({ input_1: new Float32Array([1,2,3]) }))
.then(output => console.log('Результат инференса расширенной модели:', output))
.catch(err => console.error(err));
В этом примере демонстрируется последовательная загрузка базовой модели с минимальным набором слоев и последующая горячая замена на полную версию модели. Такой подход снижает время ожидания и экономит ресурсы при работе в браузере.