【问题标题】:Tensorfow-lite PReLU Fusion and TransposeConv BiasTensorflow-lite ReLU 融合和转置卷积偏差
【发布时间】:2026-01-08 12:25:05
【问题描述】:

当我们使用 tf 1.15 的 PReLU 转换 tf.keras 模型时,PReLU 层变为 ReLU,并且似乎与之前的运算符融合在一起。结果,28 MB 的 keras h5 文件大小变为 1.3 MB。看起来参数数量明显减少,因为我没有在 PReLU 中使用共享权重轴选项。那么,这种转换是否可以正常工作而没有任何精度损失? PReLU 的权重是否完全丢弃?同样,融合是否考虑了转置卷积层的偏差(在 netron 中没有将偏差作为输入属性提及)。这些融合是否在内部保留了训练后的权重参数,是否会影响 tflite 的推理精度?

Prelu Fusion:-

input = Input(shape=(512,512,3), name='ip')
x = Conv2D(filters=8, kernel_size=2, strides=2, padding='valid')(input)
x = PReLU()(x) # shared_axes not used

它在输出属性中显示 prelu/ReLU

转置转换:-

cout1 = Conv2DTranspose(filters=8, kernel_size=2, strides=2, padding = 'same' )(pout1) # Bias is true by default

在输出属性中没有显示偏差

那么,融合是通过组合权重正常工作还是被丢弃?

【问题讨论】:

    标签: tensorflow tf.keras tensorflow-lite relu


    【解决方案1】:

    如果权重中的所有值都是零,它会在融合/转换过程中自动丢弃它们。所以,PReLU融合后变成了ReLU,transpose conv+bias变成了transpose conv。当您在训练之前将模型转换为 tflite 格式时会出现问题,因为权重具有其默认值(零)。

    【讨论】: