我用Keras/TensorFlow训练了LeNet5 CNN。我使用TensorFlow Lite来量化FP32权重,并激活INT8。我提取并可视化了重量,偏倚,零分的鳞片,多亏了尼特恩.
我需要用C语言设计LeNet5 CNN。在FP32格式中,我的模型推理工作得很好。但是,我不明白用INT8格式进行推断的要点。
从“有效整数-算术推理的神经网络量化和训练”:https://arxiv.org/abs/1712.05877中,作者详细描述了用量化INT8卷积进行推理的工作流程:在输入和权值之间的卷积步骤之后的卷积INT8推理,然后加上偏差,作者精确地说明了从INT32到INT8的降尺度是由M= (S1*S2)/S3定义的M常数完成的。
S1是输入的规模。对我来说,S2是权重的尺度,S3是输出的尺度。
然而,在Netron中,对于conv2d权重,我无法查看所涉及的秤:Netron中的conv2d滤波器
但我可以查看完全连接操作的规模:内强重物
我的问题是:卷积的S2是什么?这是Netron可视化的问题,还是我误解了卷积过程的M下采样因子?
谢谢你的帮助
发布于 2022-01-24 07:11:29
Netron不支持tflite的每通道量化参数.
每个输出通道都有一个刻度。使用tflite解释器检查这些。
i = tf.lite.Interpreter('/path/to/my_model.tflite')
[y['quantization_parameters'] for y in i.get_tensor_details() \
if y['name'] == 'sequential/conv2d_1/Conv2D']https://stackoverflow.com/questions/70446587
复制相似问题