当前位置: 首页 > 知识库问答 >
问题:

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

梁丘远航
2023-03-14

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

我的问题是-如何将Relu层融合到先前的层中?(这种“融合”之外的数学是什么?这是量化模型的特定过程,还是也可以在原始浮点模型中完成?)

共有1个答案

黄凌龙
2023-03-14

>

或者在引用内核中https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/kernels/internal/reference/conv.h#L91

对于bias_add消失,转换器融合bias_add和conv,并在Op中设置bias param(如果要添加的值是常量),因此内核可以在卷积计算期间添加bias值https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/kernels/internal/reference/conv.h#L89

对于像Mul这样的情况,如果乘法器是某个常数,转换器将Mul与Conv熔断

Mul(常数A、Conv(输入、滤波器)、偏置)

Conv(输入,(滤波器*Const_A),(偏置*Const_A))

假设Const_A和Filter是可广播类型

这在转换过程中发生https://github.com/tensorflow/tensorflow/blob/master/tensorflow/compiler/mlir/lite/transforms/optimize_patterns.td#L118

希望有帮助。

 类似资料:
  • 我刚刚完成了ANN课程,开始学习CNN。我对CNN中的填充和跨步操作有基本的了解。 但在第一层神经元映射输入图像有困难,但我对人工神经网络中输入特征如何映射到第一层有基本的了解。 理解输入图像和第一conv层神经元之间映射的最佳方法是什么? 如何澄清我对以下代码示例的疑虑?代码取自Coursera的DL课程。 每个大小为4*4*3的8个过滤器如何处理大小为64*64*3的输入图像? 步幅=1,填充

  • [source] Add keras.layers.Add() 计算输入张量列表的和。 它接受一个张量的列表, 所有的张量必须有相同的输入尺寸, 然后返回一个张量(和输入张量尺寸相同)。 示例 import keras input1 = keras.layers.Input(shape=(16,)) x1 = keras.layers.Dense(8, activation='relu')(i

  • 我有一个谷歌地图,它使用一个融合表层来动态设置大量多边形的样式。在这一层的顶部,我还在多边形本身的特定板条位置生成一组标记。我希望有以下行为: 当您单击多边形上的任何位置时,将弹出一个infoWindow,由融合表中的数据填充。这是工作。 当您单击标记时,它应该将单击事件传递到融合表层,并创建与标记的LatLng处发生自然单击相同的弹出窗口。这就是我正在努力的,目前还没有成功。我在每个标记上添加一

  • 我有一个包含Conv2D层的网络,然后是ReLU激活,声明如下: 它被移植到TFLite,具有以下代表性: 无Q感知训练的基本TFLite网络 然而,在网络上执行量化感知训练并再次移植后,ReLU层现在在图中是明确的: TFLite网络在Q感知训练后 这导致它们在目标上被单独处理,而不是在Conv2D内核的评估期间,在我的整个网络中导致10%的性能损失。 使用以下隐式语法声明激活不会产生问题: 具

  • 这个问题的根源是从docker私有注册表中提取的速度非常慢。 然后我发现通过注册表远程API的速度是可以的。 现在我得到一个图像的层。如何将其作为映像加载到docker守护程序? ps: 我试着加载docker 结果如下。 FATA[0015]错误:打开 /home/docker/data/docker/tmp/docker-import-087506163/repo/etc/json:没有这样的

  • 在卷积神经网络中,如何知道特定conv层的输出?(我正在使用keras构建CNN模型) 例如,如果我使用一维conv层,其中number_of_filters=20,kernel_size=10,input_shape(500,1) 如果我使用的是二维conv层,其中\u过滤器的数量=64,内核大小=(5100),输入\u形状=(5720,1)(高度,宽度,通道) 以上两个conv层的输出数量是多