Количественная оценка после обучения
Квантование после обучения — это общий способ уменьшить размер модели, одновременно уменьшая задержку в 3 раза и сохраняя точность модели. Квантование после обучения квантует веса от плавающей запятой до 8-битной точности. Эта технология находится вTensorFlow Lite model converterиспользуется как функциональная опция.
import tensorflow as tf
converter = tf.contrib.lite.TocoConverter.from_saved_model(saved_model_dir)
converter.post_training_quantize = True
tflite_quantized_model = converter.convert()
open("quantized_model.tflite", "wb").write(tflite_quantized_model)
Во время вывода значения веса преобразуются из 8-битной точности в значения с плавающей запятой и вычисляются с использованием ядер с плавающей запятой. Это преобразование выполняется только один раз и кэшируется для уменьшения задержки.
Commit suggestion Add suggestion to batch
Во время вывода значения веса преобразуются из 8-битной точности в значения с плавающей запятой и вычисляются с использованием ядер с плавающей запятой. Это преобразование выполняется только один раз и кэшируется для уменьшения задержки.
Чтобы еще больше уменьшить задержку, оператор смешивания динамически квантует активации до 8 бит и выполняет вычисления с использованием 8-битных весов и функций активации. Эта оптимизация может обеспечить задержку, близкую к полному выводу с фиксированной точкой. Однако вывод по-прежнему использует хранилище с плавающей запятой, поэтому ускорение гибридных операций все еще меньше, чем ускорение полных вычислений с фиксированной запятой. Гибридные операции можно использовать для большинства вычислительно-емких сетей:
- tf.contrib.layers.fully_connected
- tf.nn.conv2d
- tf.nn.embedding_lookup
- BasicRNN
- tf.nn.bidirectional_dynamic_rnn for BasicRNNCell type
- tf.nn.dynamic_rnn for LSTM and BasicRNN Cell types
Поскольку веса квантуются после обучения, может быть потеря точности, особенно для небольших сетей.TensorFlow Lite model repositoryПредоставляются полностью квантованные модели, предварительно обученные для конкретных сетей. Важно проверить точность квантованной модели, чтобы убедиться, что любое снижение точности находится в допустимых пределах. Вот инструмент для оценкиТочность модели TensorFlow Lite.
Если падение точности слишком велико, рассмотрите возможность использованияКоличественное обучение.
Представление квантованных тензоров
TensorFlow преобразует числовые массивы с плавающей запятой в 8-битное представление в качестве проблемы сжатия. Поскольку веса и тензоры активации в модели обученной нейронной сети, как правило, распределяются по относительно небольшому диапазону значений. (например, от -15 до +15 для весов и от -500 до 1000 для активации модели изображения). А поскольку нейронная сеть устойчива при работе с зашумленными данными, ошибка, вносимая квантованием до небольшого набора значений, сохраняет точность общего результата в пределах допустимых порогов. Выбранное представление должно выполнять быстрые вычисления, особенно умножения больших матриц, которые требуют больших вычислительных ресурсов при запуске модели.
Это представлено двумя числами с плавающей запятой, в которых хранятся общие минимальные и максимальные значения, соответствующие наименьшему и наибольшему квантованным значениям. Каждая запись в массиве квантования представляет значение с плавающей запятой в этом диапазоне, линейно распределенное между минимальным и максимальным значениями. Например, когда 8-битный массив имеет минимальное значение -10,0 и максимальное значение 30,0f, его квантованное значение представляется следующим образом:
квантованное значение | значение с плавающей запятой |
---|---|
0 | -10.0 |
128 | 10.0 |
255 | 30.0 |
Преимущества этого представительства:
- Он эффективно представляет диапазон произвольного размера. .
- Ценности не обязательно должны быть симметричными.
- Могут быть представлены как знаковые, так и беззнаковые числа.
- Линейное расширение упрощает умножение.