运行以下命令以量化模型:
$vai_q_tensorflow quantize \
--input_frozen_graph frozen_graph.pb \
--input_nodes ${input_nodes} \
--input_shapes ${input_shapes} \
--output_nodes ${output_nodes} \
--input_fn input_fn \
[options]
input_nodes
和 output_nodes
实参均为量化计算图的输入节点的名称列表。这两个实参分别作为量化的起点和终点。两者间的主计算图将进行量化(如可量化),如下图所示。
图 1. TensorFlow 量化流程
建议将 –input_nodes
设置为预处理部分的最后一个节点,将 -output_nodes
设置为主计算图的最后一个节点,因为预处理和后处理部分的某些操作不可量化。由 Vitis AI 编译器对该模型进行编译并将其部署到 DPU 时,这可能导致错误。
输入节点可能与计算图的占位符节点不同。如果冻结计算图不包含计算图内预处理,则应将占位符节点设置为输入节点。
input_fn
应与占位符节点保持一致。
[options] 表示可选参数。最常用的选项如下:
- weight_bit
- 已量化的权重和偏差的宽度,默认值为 8。
- activation_bit
- 量化激活的位宽,默认值为 8。
- method
- 量化方法,0 对应非溢出方法,1 对应最小差值方法,2 对应归一化的最小差值方法。此非溢出方法用于确保量化期间没有任何值达到饱和。结果可能受到离群值的影响。最小差值方法允许饱和以使量化尽可能降低量化差值。对于离群值而言,此方法更稳健,通常生成的范围比非溢出方法更小。