Я пытаюсь квантовать модель с помощью 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.