[問題] tflite quantization

看板Python作者 (蕭)時間2年前 (2022/04/04 15:09), 編輯推噓0(001)
留言1則, 1人參與, 2年前最新討論串1/1
各位大大好 試著把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) 不知道是不是我哪裡忽略算錯了呢 感謝!! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.161.59.187 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1649056152.A.DCF.html

04/05 09:44, 2年前 , 1F
可以轉DataScience版,讓高手解答w
04/05 09:44, 1F
文章代碼(AID): #1YIfcOtF (Python)