首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将Relu融合到conv层中?

如何将Relu融合到conv层中?
EN

Stack Overflow用户
提问于 2020-05-25 10:02:07
回答 1查看 1.9K关注 0票数 1

当将TF模型转换为tflite模型(换句话说,使用“训练后量化”对模型进行量化)时,Relu层将从图形中消失。这在文档中得到了解释:“可以简单地从图(tf.identity)中删除、由张量(tf.placeholder)代替或融合成更复杂的操作(tf.nn.bias_add)。”

我的问题是:如何将Relu层融合到前一层?(这种“融合”之外的数学是什么?这是量化模型的一个特定过程,还是可以在最初的浮点模型中实现?)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-02 02:30:03

  • 对于TFLite中的Relu (或激活函数),融合实际上并没有数学支持,更多的原因是Conv内核支持在计算卷积时执行激活。因此,与其建立X元素张量作为Conv的输出,然后将其作为输入传递给下面的Relu层,后者只是迭代来计算它,你可以在卷积过程中直接夹紧这些值。因此,由于TFLite内核支持这一点,我们可以简化转换过程中的图,并将激活层与conv融合,并在ConvParams中设置在卷积过程中应该进行激活的FusedActivationFunction类型。这并不是特定于量化模型,TFLite浮点内核也是这样做的。下面是在GEMM ops.h#L1338之前设置夹紧值的示例 或者在参考内核https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/kernels/internal/reference/conv.h#L91
  • 对于bias_add消失,转换器融合了bias_add和conv,并在Op中设置了偏置参数(如果要添加的值是常数的话),所以内核可以在卷积计算https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/kernels/internal/reference/conv.h#L89中添加偏置值。
  • 对于像Mul这样的情况,如果乘法器为常数,则转换器将mul与Conv融合。 Mul (Const_A,Conv(输入,滤波器),偏置) Conv(输入,(滤波器* Const_A),(偏置* Const_A)) 假设Const_A和Filter是可广播的类型 这种情况发生在转换patterns.td#L118期间。

希望这能有所帮助。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62000090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档