Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将Keras模型转换为可用于边缘TPU的量化Tensorflow Lite模型_Python_Tensorflow_Keras_Tensorflow Lite_Tpu - Fatal编程技术网

Python 将Keras模型转换为可用于边缘TPU的量化Tensorflow Lite模型

Python 将Keras模型转换为可用于边缘TPU的量化Tensorflow Lite模型,python,tensorflow,keras,tensorflow-lite,tpu,Python,Tensorflow,Keras,Tensorflow Lite,Tpu,我有一个Keras模型,我想在Coral Edge TPU设备上运行。要做到这一点,它需要是一个全整数量化的Tensorflow Lite模型。我能够将模型转换为TFLite模型: model.save('keras_model.h5')) converter=tf.lite.TFLiteConverter.from_keras_model_文件(“keras_model.h5”) tflite_model=converter.convert() 打开(“转换的_模型.tflite”,“wb”)

我有一个Keras模型,我想在Coral Edge TPU设备上运行。要做到这一点,它需要是一个全整数量化的Tensorflow Lite模型。我能够将模型转换为TFLite模型:

model.save('keras_model.h5'))
converter=tf.lite.TFLiteConverter.from_keras_model_文件(“keras_model.h5”)
tflite_model=converter.convert()
打开(“转换的_模型.tflite”,“wb”).write(tflite_模型)
但是,当我运行
edgetpu\u compiler converted\u model.tflite
时,会出现以下错误:

Edge TPU Compiler version 2.0.267685300
Invalid model: converted_model.tflite
Model not quantized
这是因为我需要量化模型,但我不确定如何做到这一点。我发现它告诉我怎么做,但它想让我做一个输入数据生成器。这是它提供的示例:

def representative_dataset_gen():
对于范围内的(校准步数):
#在您选择的方法中以numpy数组的形式获取示例输入数据。
产量[投入]

如何调整此代码以处理输入数据?
num\u校准步骤从何而来?有更好的方法吗?(我看到了
tf.contrib.tpu.keras\u到\u tpu\u模型的引用
,但它已被弃用)

我相信
num\u calibration\u steps
只是转换器使用rep set确定量化级别的次数。只是一个猜测,但它可能会多次从您的代表集中进行子采样(自举或自切)。我自己仍在研究整个过程,但如果我只为每个产量传递一张图像,并在大约100处使用
num\u calibration\u steps
(例如,100张代表性图像),这似乎对我有效。你可以看到我的演示脚本

关键部分是:

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]
另见我对这个问题的类似回答:

我做了更多的测试。似乎代表性的_dataset_gen()必须以我描述的格式生成一个且仅一个图像。因此,没有自举或jackknifing。num_calibration_steps变量可能更适合命名为num_calibration_images。虽然没有什么可以阻止某人多次使用相同的图像,所以我想num_calibration_步骤仍然有效,并且是一个更一般的描述。