Не понимаю средние значения и значения стандартного отклонения при конвертировании .pb в ff-lite - PullRequest
0 голосов
/ 23 сентября 2019

Я пытаюсь квантовать график тензопотока, хранящийся в .pb.Вводом сети является матрица, в которой каждая строка нормализована со средним значением 0 и стандартным значением 1. Я хочу создать модель с тензорным потоком, облегчающую квантование для взаимодействия быстрее.Я не знаю, как передать входные данные для преобразования строки.Это всего лишь одно значение?вектор с 64 значениями?как это передается?

Модель хорошо конвертируется без квантования.

tflite_convert \
    --output_file=model_simple_weight_q.tflite \
    --graph_def_file=model_simple.pb \
    --inference_type=QUANTIZED_UINT8 \
    --input_arrays=input \
    --output_arrays=LogSoftmax \
    --mean_values= # dont know  \
    --std_dev_values=# dont know

Если я передам два отдельных значения, --mean_values ​​= 127 и --std_dev_values ​​= 128, например.Просто чтобы узнать, что происходит, я получаю следующую ошибку:

F tensorflow/lite/toco/graph_transformations/resolve_constant_gather.cc:108] Check failed: coords_array.data_type == ArrayDataType::kInt32 Only int32 indices are supported
Aborted (core dumped)

Ответы [ 2 ]

0 голосов
/ 30 сентября 2019

Поскольку каждая строка ввода нормализована со средним значением 0 и стандартным значением 1, вы должны указать --mean_values=0 и --std_dev_values=1.Кроме того, когда вы выполняете «фиктивное квантование после трассировки», вам необходимо указать минимальный и максимальный диапазон для функций активации.Вы должны предоставить --default_ranges_min = и --default_ranges_max =.

Поскольку тензор потока не дает очень четкого описания того, как рассчитать диапазон активации, лучше выполнить «полное обучение целочисленного квантования после обучения» с небольшими калибровочными данными - здесь .В этом методе диапазон функции активации рассчитывается с помощью калибровочных изображений.

С уважением,

0 голосов
/ 26 сентября 2019

Ошибка, которую вы видите, не связана со средними значениями / std_dev.Это ошибка при конвертации вашего графика в целом.Это говорит о том, что в одной из ваших операций с графом индекс используется в tf.gather (или, может быть, в разрезе) и имеет тип, который не int32, но это единственный поддерживаемый тип индекса.

К сожалению, ошибки преобразования TFLite часто не сообщают вам исходный код, вызвавший ошибку, поэтому вам придется делать обоснованные предположения.

В отношении средних значений / std_dev, я предлагаю вам взглянуть на этот ответ: https://stackoverflow.com/a/58096430/834565

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...