Как правильно внедрить в граф операции fake_quant? - PullRequest
0 голосов
/ 02 июля 2019

У меня есть модель wav2letter (модель распознавания речи), где я пытаюсь правильно ввести операции fakeQuant вручную.Мне удалось представить их в нужном месте (чтобы преобразователь tflite сумел сгенерировать u8_tflite_model), но моя проблема в том, что минимальные / максимальные диапазоны не обновляются в этих операциях во время обучения.Это означает, что они остаются одинаковыми (или почти одинаковыми) от начального уровня, и градиенты, кажется, не текут туда.

Я попытался определить поддельный квант разными способами (например):

min_w = tf.get_variable("min_quant_weights", shape=[], initializer=tf.constant_initializer(0), trainable=True)
max_w = tf.get_variable("max_quant_weights", shape=[], initializer=tf.constant_initializer(1), trainable=True)
filters = tf.fake_quant_with_min_max_vars(filters, min=tf.reduce_min(min_w), max=tf.reduce_max(max_w), num_bits=8)

или

min_w = tf.Variable(0.0, name="min_quant_weights")
max_w = tf.Variable(1.0, name="max_quant_weights")
filters = tf.fake_quant_with_min_max_vars(filters, min=min_w, max=max_w)

или

min_w = 0
max_w = 1
filters = tf.quantization.fake_quant_with_min_max_args(bias, min=min_w, max=max_w, num_bits=8, narrow_range=False, name=None)

, но что бы я ни пытался, значения min / max остаются прежними.Из-за этого модель (на данный момент настроенная только на одно предложение) удается адаптировать веса к этим диапазонам и не изменять диапазоны активации вообще.Я считаю, что и диапазоны, и веса должны обновляться во время тренировок с помощью fakeQuants (я прав?).

Кроме того, инструмент tf.contrib.quantize.create_training_graph, как описано здесь: https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/quantize не работает в моем случае, потому что модели определены так, что инструмент не может выяснить где эти fakeQuant-операции должны быть введены, поэтому я пытаюсь использовать более «хакерский» способ вставить их в исходный код графа.операторы работают?

спасибо!

1 Ответ

0 голосов
/ 08 июля 2019

Действительно сложно правильно подделать квант, потому что нужно манипулировать тренировочным графиком и вставлять подделку в нужное место.

В вашем случае, пожалуйста, попробуйте квантование после тренировки (https://medium.com/tensorflow/tensorflow-model-optimization-toolkit-post-training-integer-quantization-b4964a1ea9ba)? После обучения вам не нужно манипулировать графиком тренировок, и инструмент фиксирует минимальный / максимальный диапазон с данными калибровки.

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