У меня есть модель 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-операции должны быть введены, поэтому я пытаюсь использовать более «хакерский» способ вставить их в исходный код графа.операторы работают?
спасибо!