使用 conv2d 等的 python 函数复制 TFLite 模型层

Posted

技术标签:

【中文标题】使用 conv2d 等的 python 函数复制 TFLite 模型层【英文标题】:Replicate the TFLite model layers using python function of conv2d etc 【发布时间】:2021-07-29 20:53:01 【问题描述】:

如果我想使用 python tensorflow 函数复制 TFLite 模型中的层以对张量数据执行一些实验,我该怎么做? conv 可以通过 tf.nn.conv2d 完成,但是向它添加偏差然后应用 relu 并不能给出正确的输出。 所有功能都可以使用 - 模型 - 使用 tensorflow lite 转换器和优化命令将 tf resnet50 转换为 tflite

【问题讨论】:

我无法理解这个问题。如果您提供到目前为止您已经尝试过的代码以及没有奏效的代码,那将非常有帮助。 【参考方案1】:

几个月前我经历过这个。尝试在常规 Tensorflow 中复制 TFLite 层的问题在于权重的顺序不同。 conv2d 示例:

TFLite - [out_channels, filter_height, filter_width, in_channels] 常规 TF - [filter_height, filter_width, in_channels, out_channels]

这是一个示例 python 实现,它接受一个 TFLite 张量 W 并对其进行重新排序,以便可以在常规 TF 中使用:

def reorderWeights(W, in_channels, out_channels, kernel):
     flatW = W.flatten()
     newW = []
     for j in range(in_channels*kernel*kernel):
          for i in range(out_channels):
              newW.append(flatW[i*(kernel*kernel*in_channels) + j])
     newW = np.array(newW)
     return newW.reshape(kernel, kernel, in_channels, out_channels)

【讨论】:

以上是关于使用 conv2d 等的 python 函数复制 TFLite 模型层的主要内容,如果未能解决你的问题,请参考以下文章

python实现卷积神经网络卷积层Conv2D实现(带stridepadding)

Python---高级函数map, filter, zip, enumerate等的用法

518大创基础知识学习

TF-卷积函数 tf.nn.conv2d 介绍

TF-卷积函数 tf.nn.conv2d 介绍

PyTorch中的Conv2d使用