我正在研究一个分类问题,目的是在固定大小的帧序列中识别手势。 该模型由三个较小的模型组成:
模型按如下方式连接以生成用于训练的集成模型:
input_frames = [tf.keras.Input(shape=cnn_input_shape) for i in range(num_frames)]
features_out = list()
for i in input_frames:
features_out.append(cnn(i)) # generate CNN outputs, cnn is a keras.Model
经过几个时期后,这是集成模型的混淆矩阵。
虽然这个集成模型用于训练,但我实际上对三个子模型感兴趣,我必须对它们进行量化,但我没有找到合适的方法。我遵循 TensorFlow 指南的标准程序,该程序使用代表性数据集进行量化
我首先尝试将集成网络作为一个整体进行量化。这会导致准确度下降约 15%(我相信可以通过一些归一化或其他技术来降低,但稍后会出现问题),但最终我没有得到我希望的三个量化子模型。混淆矩阵看起来还是挺有意义的。
我还注意到每个输入(对于每一帧)都有自己的量化scale和零,我觉得这很奇怪(毕竟 CNN 是一样的)。
然后我尝试自己量化三个子模型。为此,我必须为三个子模型中的每一个提供“代表性数据集”。 我使用了以下内容:
我尝试了量化和非量化的 CNN 和 TCN 模型来生成我用于代表性数据集的数据,最终结果几乎没有差异。这种方法导致几乎随机的准确性,其中预测倾向于仅针对任何输入的一个/两个标签崩溃(混淆矩阵本质上是一条水平线)。
有没有更好的方法来做到这一点?我刚刚开始使用 TensorFlow,所以我也愿意改变网络的设计,前提是功能得到维护。
谢谢。