更多细节请参考:Tensorflow官方文档 训练后动态范围量化
全整型量化整型量化是将32位浮点数 转换为8位定点数 。这样可以缩减模型大小并加快推理速度,这对低功耗设备(如微控制器)很有价值 。仅支持整数的加速器(如Edge TPU)也需要使用此数据格式 。
对于全整数量化,需要校准或估算模型中所有浮点张量的范围,即 (min, max) 。与权重和偏差等常量张量不同,模型输入、激活(中间层的输出)和模型输出等变量张量不能校准,除非我们运行几个推断周期 。因此,转换器需要一个有代表性的数据集来校准它们 。这个数据集可以是训练数据或验证数据的一个小子集(大约 100-500 个样本) 。请参阅下面的 representative_dataset() 函数 。
从 TensorFlow 2.7 版本开始,您可以通过签名指定代表数据集,示例如下:

文章插图

文章插图
def representative_dataset(): for data in dataset: yield { "image": data.image, "bias": data.bias, }如果给定的 TensorFlow 模型中有多个签名,则可以通过指定签名密钥来指定多个数据集:

文章插图

文章插图
def representative_dataset(): # Feed data set for the "encode" signature. for data in encode_signature_dataset: yield ( "encode", { "image": data.image, "bias": data.bias, } ) # Feed data set for the "decode" signature. for data in decode_signature_dataset: yield ( "decode", { "image": data.image, "hint": data.hint, }, )您可以通过提供输入张量列表来生成代表性数据集:

文章插图

文章插图
def representative_dataset(): for data in tf.data.Dataset.from_tensor_slices((images)).batch(1).take(100): yield [tf.dtypes.cast(data, tf.float32)]从 TensorFlow 2.7 版本开始,我们推荐使用基于签名的方法,而不是基于输入张量列表的方法,因为输入张量排序可以很容易地翻转 。
出于测试目的,您可以使用如下所示的虚拟数据集:

文章插图

经验总结扩展阅读
- 幼师好还是护士好 哪个更吃香
- 2023年2月6日是买衣服的黄道吉日吗 2023年2月6日买衣服黄道吉日
- 2023年2月6日适合制作寿衣吗 2023年2月6日是制作寿衣吉日吗
- 2023年2月6日买鸡黄道吉日 2023年2月6日买鸡行吗
- 2023年2月6日买牛好不好 2023年2月6日买牛吉日一览表
- 2023年2月6日画画好不好 2023年农历正月十六画画吉日
- 2023年10月1日入学行吗 2023年农历八月十七入学吉日
- 2023年10月1日是举办成人仪式的黄道吉日吗 2023年10月1日举办成人仪式吉日一览表
- 2023年10月1日上学好不好 2023年10月1日适合上学吗
- 2023年10月1日清扫房屋好吗 2023年农历八月十七宜清扫房屋吗