当我们用Tf1.15将tf.keras模型与PReLU进行转换时,PReLU层变成了ReLU,似乎与以前的算子融合了。因此,28 MB的keras h5文件在size.It中变为1.3MB,看起来参数的数量明显减少,因为我没有在PReLU中使用共享权重轴选项。那么,这种转换工作正常,没有任何准确性损失?PReLU的权重被完全丢弃了吗?同样,融合是否考虑了转置卷积层的偏置(在netron中没有将偏置作为输入特性)。这些融合是否在内部保留了训练过的权重参数,它们是否影响tflite的推理精度?
Prelu融合:-
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
转座子conv:-
cout1 = Conv2DTranspose(filters=8, kernel_size=2, strides=2, padding = 'same' )(pout1) # Bias is true by default

它在输出属性中不显示偏置。
那么,融合是通过组合权重来正常工作还是被丢弃了呢?
发布于 2020-04-11 02:03:49
如果权重中的所有值为零,则在融合/转换过程中自动丢弃它们。融合后PReLU变为ReLU,转座子conv+bias变为转座子。当您在训练前将模型转换为tflite格式时,会出现问题,因为权重有其默认值(零)。
https://stackoverflow.com/questions/61104227
复制相似问题