Сбой квантования TensorFlow во время преобразования - PullRequest
0 голосов
/ 06 августа 2020

Я пытаюсь квантовать модель с помощью TensorFlow 2.3.0. У меня возникли проблемы с сохранением окончательного результата, и мне непонятно, в чем именно заключается проблема. Вот мой код

import os 
os.environ["TF_CPP_MIN_LOG_LEVEL"] = "2" 
import tensorflow as tf 
saved_model_dir = "quantization/recognizer/" 
converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir) 
converter.optimizations = [tf.lite.Optimize.DEFAULT] 
tflite_model = converter.convert() 
tflite_model_quant_file = "quantization/recognizer_quant.tflite" 
tflite_model_quant_file.write_bytes(tflite_model)   

Когда я запускаю приведенный выше код, он просто начинает выплевывать бесконечный поток байтов, что в конечном итоге приводит к сбою моего терминала. Я захватил часть вывода ниже:

loc(callsite(callsite(callsite(unknown at "functional_9/lstm_10/PartitionedCall@__inference__wrapped_model_37849") at "StatefulPartitionedCall@__inference_signature_wrapper_51309") at "StatefulPartitionedCall")): error: We cannot duplicate the value since it's not constant.

error: Failed to duplicate values for the stateful op


ExceptionTraceback (most recent call last)
/usr/local/lib/python3.6/dist-packages/tensorflow/lite/python/convert.py in toco_convert_protos(model_flags_str, toco_flags_str, input_data_str, debug_info_str, enable_mlir_converter)
    198                                                  debug_info_str,
--> 199                                                  enable_mlir_converter)
    200       return model_str

/usr/local/lib/python3.6/dist-packages/tensorflow/lite/python/wrap_toco.py in wrapped_toco_convert(model_flags_str, toco_flags_str, input_data_str, debug_info_str, enable_mlir_converter)
     37       debug_info_str,
---> 38       enable_mlir_converter)
     39 

Exception: <unknown>:0: error: loc(callsite(callsite(callsite(unknown at "functional_9/lstm_10/PartitionedCall@__inference__wrapped_model_37849") at "StatefulPartitionedCall@__inference_signature_wrapper_51309") at "StatefulPartitionedCall")): We cannot duplicate the value since it's not constant.

<unknown>:0: note: loc("StatefulPartitionedCall"): called from
<unknown>:0: note: loc(callsite(callsite(callsite(unknown at "functional_9/lstm_10/PartitionedCall@__inference__wrapped_model_37849") at "StatefulPartitionedCall@__inference_signature_wrapper_51309") at "StatefulPartitionedCall")): see current operation: %123 = "tfl.unidirectional_sequence_lstm"(%118, %cst_55, %cst_56, %cst_57, %cst_58, %cst_47, %cst_48, %cst_49, %cst_50, %cst_111, %cst_111, %cst_111, %cst_51, %cst_52, %cst_53, %cst_54, %cst_111, %cst_111, %122, %122, %cst_111, %cst_111, %cst_111, %cst_111) {cell_clip = 1.000000e+01 : f32, fused_activation_function = "TANH", proj_clip = 0.000000e+00 : f32, time_major = false} : (tensor<?x?x128xf32>, tensor<128x128xf32>, tensor<128x128xf32>, tensor<128x128xf32>, tensor<128x128xf32>, tensor<128x128xf32>, tensor<128x128xf32>, tensor<128x128xf32>, tensor<128x128xf32>, none, none, none, tensor<128xf32>, tensor<128xf32>, tensor<128xf32>, tensor<128xf32>, none, none, tensor<?x128xf32>, tensor<?x128xf32>, none, none, none, none) -> tensor<?x?x128xf32>
<unknown>:0: error: Failed to duplicate values for the stateful op

<unknown>:0: note: see current operation: "func"() ( {
^bb0(%arg0: tensor<?x31x200x1xf32>):  // no predecessors
  %cst = "std.constant"() {value = dense<"0x24DCBABB3DE4A1BD88A370BDEA32E63DEE6B0ABCDA88983A0DCF663DA68FA2B90BE8013E52E7A3BD37CDFCBC3CDC4FBD480C3E3EA53BB1BB87379A3E62D1A4BC29FA0CBC35494ABBE4EE9FBBF45DDE3DA6FE86BBE4734D3D50DC40BEE242BA3D1E02EFBB72AFF8BD7AA8ED3DFCD65CBDB8C6D1BAA2E480BC89914CBDE92E023E60F8D03D4C0C423EDD5CA53EDE6E9DBD09E075BD0FAE6CBCFCA8863C6916DCBC94D941BCC93EDD3D5767883B8C3FA53DFB53953D3CE828BB70A3ADBD29ED9BBC56E6E8BCEA7839BD71EDA13DD5917D3EEBCAC43D047498BBCF196FBC2EF2473E0C1412BDCF8BCABB608C87BDD8AB993EB3E52E3E5FCC68BCBBD3043DE0D5BD3DD12282BB6B4B543E52333BBD87E2A8BD1DEAA0BDC36B7ABAF1D85DBDADF5B2BB109CA2BB3CC67B3CF53198BBB0BA8D3D73935D3CAE532B3AE236C83E144DBDBB623E383E8692683CC4E59E3E251AEABB65EC8EBD7CBD0DBDB40BA4BC45A8383ED9668EBC4253D0BC727D3EBC10CEAEBBEAB3D0BB6917FA3D77650E3DE5289ABB02AF85BD96AA80BC8FC2DDBCB30484BD6F0ECBBBFF91C43DAC484EBD5DB9093E78F846BD91F06FBBD6B3893EEAF42D3CD62BC0BD84C5873D6A2887BB0F372EBE0AFDC7BBD4F1ABBC03B57A3E66E245BD723BB2BDA2CE223D1CEA

Очевидно ли из вышесказанного, действительно ли есть ошибка в процессе квантования? Я не могу понять, почему он все еще регистрирует байты модели (последняя часть 0x24DCBABB3DE4A1BD88A370BD... в конечном итоге перегружает терминал), несмотря на то, что я пытался отключить опцию ведения журнала tenorflow.

1 Ответ

0 голосов
/ 07 августа 2020

Попробуйте сохранить преобразованную модель с помощью open(tflite_model_quant_file).write(tflite_model)

...