[问题] tflite quantization

楼主: jack155861 (萧)   2022-04-04 15:09:10
各位大大好
试着把h5的档案转为 int8 的 tflite
我想试着厘清转换后权重与scale与zero point的关系,但遇到了一些问题
我的模型很简单,如下
tf.keras.layers.Conv2D(16, (5,5), input_shape=(width,height, 1),
activation='relu', padding='same'),
tf.keras.layers.GlobalAveragePooling2D(),
tf.keras.layers.Dense(3, activation='softmax')
我用以下代码试着inference一张图片
interpreter = tf.lite.Interpreter(model_path="test.tflite")
interpreter.allocate_tensors()
input_index = interpreter.get_input_details()[0]["index"]
output_index = interpreter.get_output_details()[0]["index"]
input_scale, input_zero_point =
interpreter.get_input_details()[0]['quantization']
image_ = image_input / input_scale + input_zero_point
interpreter.set_tensor(input_index, image_.astype(np.int8))
interpreter.invoke()
interpreter.tensor(output_index)()
得到结果array([[-123, 77, -82]], dtype=int8),这应该是符合预期的分类结果
之后我想试着看 tflite 每一层的中关系想先从GlobalAveragePooling2D着手
经过conv2后得到一个80*80*16的矩阵以及经过GAV计算后得到一个1*16的矩阵,如下
https://i.imgur.com/Zq9OZST.jpg
依我对权重与scale与zero point我的计算如下
https://i.imgur.com/JyBw6nv.jpg
但结果似乎跟tflite真正计算的结果有很大的差异
这是我自己计算的结果
array([[ 63, 12, 8, 31, 67, 32, 16, 16, 34, 2, 51, -15, 66,
43, 64, 5]], dtype=int8)
这是tflite计算的结果
array([[-123, 77, -82, 32, 67, 32, 17, 16, 35, 2, 52,
-15, 67, 44, 65, 5]], dtype=int8)
不知道是不是我哪里忽略算错了呢
感谢!!
作者: lycantrope (阿宽)   2022-04-05 09:44:00
可以转DataScience版,让高手解答w

Links booklink

Contact Us: admin [ a t ] ucptt.com