我可以从量化的Tensoflow模型得到什么结果?

时间:2019-08-30 16:08:33

标签: python tensorflow tpu

我有一个非常简单的Tensorflow模型,它基于6个传感器的输入(输入范围从0.0到1.0)输出3个值(左,直,右)

inputSensor = Input(shape=(3))
modelSensor = Dense(32, activation="relu")(inputSensor)
modelSensor = Dense(32, activation="relu")(modelSensor)
modelSensor = Dense(numClasses, activation="softmax")(modelSensor)
model = Model(inputs=inputSensor, outputs=modelSensor)

训练模型后,我可以使用

将其转换为普通的TFLite模型
converter = tf.compat.v1.lite.TFLiteConverter.from_keras_model_file("models/modelpath.h5")
converter.optimizations = [tf.lite.Optimize.DEFAULT]

tflite_model = converter.convert()

然后,我在模型上运行了一些推理测试,得到了期望的结果。 3个输出之一 是99%,其他人非常低。

测试权 输入[0.0,0.0,1.0] 结果[[0.00089144 0.00154889 0.99755967]]

直接测试 输入[0.0,1.0,0.0] 结果[[0.00087439 0.996424 0.00270158]]

左测试 输入[1.0,0.0,0.0] 结果[[0.9948014 0.00256803 0.00263061]]

然后我对模型进行量化(以便在边缘TPU上使用)

converter =tf.compat.v1.lite.TFLiteConverter. from_keras_model_file 
("models/modelpath.h5")
converter.representative_dataset = representativeDataset_gen
converter.target_spec.supported_ops = 
[tf.lite.OpsSet.TFLITE_BUILTINS_INT8]
converter.inference_input_type = tf.uint8
converter.inference_output_type = tf.uint8
converter.optimizations = [tf.lite.Optimize.DEFAULT]

,我进行了与上述相同的测试。结果仍然正确,但最大输出为132,其他输出为62。

测试权 输入[0.0,0.0,1.0] [[62 62 132]]

直接测试 输入[0.0,1.0,0.0] [[62 132 62]]

左测试 输入[1.0,0.0,0.0] [[132 62 62]]

我希望得到的结果范围为[[255 0 0]]

当我使用整数输入如 输入[0,0,255]

Quantazion转换是否有问题? 我应该使用浮点数的整数作为输入吗?

2 个答案:

答案 0 :(得分:0)

在进行训练后量化时,小型模型肯定会遭受较大的精度下降。实际上,TensorFlow团队已建议在应用训练后量化后执行准确性检查。

如果准确性受到严重影响,建议使用quantization-aware-training

在撰写此答案时,尚未启动量化感知培训。

答案 1 :(得分:0)

我自己发现了问题。

我用于量化转换的代表性数据集不够代表性。它由零的数组组成。使用适当的数据集(与用于训练的数据集相同)固定输出-> [[255 0 0]]