Квантизация весов — метод уменьшения размера модели и ускорения вычислений за счёт представления параметров сети с меньшей точностью, чем стандартные 32-битные числа с плавающей запятой. В Keras.js она применяется для оптимизации моделей Keras перед запуском в браузере с использованием JavaScript, где ресурсы ограничены и критична производительность.
Снижение разрядности: Весовые коэффициенты и
смещения могут храниться в формате float16 или даже
целочисленном (int8), что уменьшает объём памяти и ускоряет
загрузку модели в браузере.
Сохранение точности: Основная цель квантизации — минимизировать потерю точности сети. Алгоритмы выбирают масштабирование весов так, чтобы диапазон значений соответствовал выбранной разрядности.
Масштабирование и смещение: Для каждого слоя вычисляется коэффициент масштабирования, который переводит исходные веса в диапазон целочисленных значений. Формула типичной линейной квантизации: [ w_q = (), s = ] где (w) — исходный вес, (w_q) — квантизованный вес, (b) — битовая разрядность.
Перед экспортом модели для использования в Keras.js необходимо:
JSON для Keras.js.Пример квантизации весов через TensorFlow:
import tensorflow as tf
converter = tf.lite.TFLiteConverter.from_keras_model(model)
converter.optimizations = [tf.lite.Optimize.DEFAULT]
tflite_model = converter.convert()
После этого модель можно экспортировать в Keras.js в формате JSON.
Keras.js позволяет загружать квантизованные модели аналогично обычным моделям:
const model = new KerasJS.Model({
filepath: 'model-quantized/model.json',
gpu: true
});
await model.ready();
filepath указывает путь к JSON-файлу модели.gpu: true активирует WebGL-ускорение, которое особенно
полезно для квантизованных моделей, так как операции с меньшей точностью
быстрее выполняются на GPU.Снижение размера модели: Для моделей с большим количеством слоев и весов квантизация может уменьшить размер файла в 2–4 раза.
Ускорение инференса: Меньшая разрядность позволяет выполнять вычисления быстрее, особенно на устройствах с ограниченными ресурсами, таких как смартфоны или планшеты.
Снижение потребления памяти: В браузере это критично, так как память JavaScript ограничена, а квантизация позволяет избежать переполнения или чрезмерного использования оперативной памяти.
Классификация изображений: Квантизация весов позволяет загружать модели ResNet или MobileNet в браузере и выполнять предсказания на клиентской стороне без загрузки больших файлов.
Обработка текста: Для моделей NLP, например LSTM или GRU, квантизация снижает задержку при предсказании последовательностей слов, ускоряя интерактивные веб-приложения.
Модели для IoT и браузерных игр: Квантизация делает возможным использование глубоких сетей на устройствах с ограниченной памятью и вычислительной мощностью.
Квантизация весов в Keras.js является мощным инструментом оптимизации моделей для выполнения в веб-среде. Она сочетает уменьшение размера, ускорение вычислений и снижение потребления памяти, позволяя запускать сложные нейросетевые приложения непосредственно на клиенте.