Посттренинг полного целочисленного квантования модели Кераса - PullRequest
0 голосов
/ 30 октября 2019

Я пытаюсь выполнить полное 8-битное квантование модели Keras после обучения для компиляции и развертывания в EdgeTPU. У меня есть обученная модель Keras, сохраненная в виде файла .h5, и я пытаюсь выполнить шаги, указанные здесь: https://coral.withgoogle.com/docs/edgetpu/models-intro/, для развертывания на Coral Dev Board.

Я следую этим инструкциямдля квантования: https://www.tensorflow.org/lite/performance/post_training_quantization#full_integer_quantization_of_weights_and_activations)

Я пытаюсь использовать следующий код:

import tensorflow as tf

num_calibration_steps = 100 
def representative_dataset_gen():
  for _ in range(num_calibration_steps):
    # Get sample input data as a numpy array in a method of your choosing.
    yield [X_train_quant_conv]

converter = tf.compat.v1.lite.TFLiteConverter.from_keras_model_file('/tmp/classNN_simple.h5')
converter.optimizations = [tf.lite.Optimize.DEFAULT]
converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS_INT8]
converter.inference_input_type = tf.uint8
converter.inference_output_type = tf.uint8
converter.representative_dataset = representative_dataset_gen
tflite_full_integer_quant_model = converter.convert()

, где X_train_quant_conv - это подмножество моих тренировочных данных, преобразованных в np.array и типаnp.float32

При запуске этого кода я получаю следующую ошибку: ValueError: Cannot set tensor: Dimension mismatch

Я пытался изменить функцию representative_dataset_gen() по-разному, но каждый раз, когда получаюновая ошибка. Я не уверен, как эта функция должна быть. Я также сомневаюсь в том, что значение num_calibration_steps should have.

Любые предложения или рабочие примеры очень ценятся.

Этот вопрос очень похож на ответ на этот вопрос: Преобразование модели Keras в квантованную модель Tensorflow Lite, которую можно использовать на Edge TPU

Ответы [ 2 ]

0 голосов
/ 02 ноября 2019

Возможно, вы захотите посмотреть на мой демонстрационный скрипт для квантования, на github .

Это всего лишь предположение, поскольку я не вижу, что на самом деле есть X_train_quant_conv, но в моемРаботая в демоверсии, я получаю одно изображение за раз (случайные данные, созданные на лету, в моем случае) в representative_dataset_gen(). Изображение сохраняется как пакет размером 1 (например, тензорная форма (1, 56, 56, 32) для моего изображения 52x52x32). Для цветного изображения есть 32 канала, хотя обычно их будет всего 3. Я думаю, что representative_dataset_gen() должен получить список, содержащий тензор (или более одного?), Для которого первое измерение имеет длину 1.

image_shape = (56, 56, 32)

def representative_dataset_gen():
    num_calibration_images = 10
    for i in range(num_calibration_images):
        image = tf.random.normal([1] + list(image_shape))
        yield [image]
0 голосов
/ 31 октября 2019

Я собирался отправить тот же вопрос. Кто-нибудь, пожалуйста, ради любви Божьей, ответь.

...