【问题标题】:What is the correct way to create representative dataset for TFliteconverter?为 TFliteconverter 创建代表性数据集的正确方法是什么?
【发布时间】:2019-11-26 20:50:15
【问题描述】:

我试图用INT8 权重和激活来推断tinyYOLO-V2。我可以使用 TFliteConverter 将权重转换为 INT8。对于INT8 激活,我必须给出具有代表性的数据集来估计比例因子。我创建此类数据集的方法似乎是错误的。

正确的程序是什么?

def rep_data_gen():
    a = []
    for i in range(160):
        inst = anns[i]
        file_name = inst['filename']
        img = cv2.imread(img_dir + file_name)
        img = cv2.resize(img, (NORM_H, NORM_W))
        img = img / 255.0
        img = img.astype('float32')
        a.append(img)
    a = np.array(a)
    print(a.shape) # a is np array of 160 3D images
    img = tf.data.Dataset.from_tensor_slices(a).batch(1)
    for i in img.take(BATCH_SIZE):
        print(i)
        yield [i]
# https://www.tensorflow.org/lite/performance/post_training_quantization
converter = tf.lite.TFLiteConverter.from_keras_model_file("./yolo.h5")
converter.optimizations = [tf.lite.Optimize.DEFAULT]
converter.target_ops = [tf.lite.OpsSet.TFLITE_BUILTINS_INT8]
converter.inference_input_type = [tf.int8]
converter.inference_output_type = [tf.int8]
converter.representative_dataset=rep_data_gen
tflite_quant_model = converter.convert()

ValueError: 无法设置张量:得到了 STRING 类型的张量,但输入 27 的预期类型为 FLOAT32,名称:input_1

【问题讨论】:

    标签: tensorflow dataset tensorflow-lite


    【解决方案1】:

    我使用您的代码读取数据集并发现错误:

    img = img.astype('float32') 应该是

    img = img.astype(np.float32)

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 2021-04-30
      • 1970-01-01
      • 1970-01-01
      • 2012-06-01
      • 2017-03-19
      • 2014-08-28
      • 1970-01-01
      • 2012-12-28
      相关资源
      最近更新 更多