ali*_*vne 1 quantization deep-learning tensorflow tensorflow-lite
当将 TF 模型转换为 tflite 模型(或者换句话说 - 使用“训练后量化”量化模型)时,Relu 层从图中消失。文档中对此进行了解释:“可以简单地从图中删除的操作 (tf.identity),替换为张量 (tf.placeholder),或者融合为更复杂的操作 (tf.nn.bias_add)。”
我的问题是 - 如何将 Relu 层融合到前一层?(这个“融合”之外的数学是什么?这是量化模型的特定程序,还是也可以在原始浮点模型中完成?)
小智 5
对于 TFLite 中的 Relu(或激活函数),融合背后并没有真正的数学运算,但更多的是因为 Conv 内核支持在计算卷积时进行激活。因此,与其构建 X 元素的张量作为 Conv 的输出,然后将其作为输入传递给下面的 Relu 层,后者只是迭代计算它,您可以在卷积期间直接钳制这些值。因此,由于 TFLite 内核支持这一点,我们可以在转换过程中简化图形并将激活层与 conv 融合,并在 ConvParams 中设置 FusedActivationFunction 类型,在卷积过程中应该发生激活。这不是特定于量化模型,TFLite float Conv kernels 也这样做。这是一个示例,其中在 GEMM 之前设置的钳位值 https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/kernels/internal/optimized/optimized_ops.h#L1338
对于bias_add 消失,转换器融合bias_add 和conv 并在Op 中设置bias 参数(以防要添加的值是恒定的),因此内核可以在卷积计算期间添加偏差值 https://github.com/ tensorflow/tensorflow/blob/master/tensorflow/lite/kernels/internal/reference/conv.h#L89
对于像 Mul 这样的情况,如果乘数是某个常数,转换器会将 mul 与 Conv 融合
Mul (Const_A, Conv(Input, Filter), bias)
Conv(Input, (Filter * Const_A), (bias * Const_A))
假设 Const_A 和 Filter 是可广播类型
希望有帮助。
| 归档时间: |
|
| 查看次数: |
906 次 |
| 最近记录: |