对tflite模型进行量化的过程中遇到错误

错误代码:

keras_model = tf.keras.models.load_model('lenet_GPU.h5')
converter = tf.lite.TFLiteConverter.from_keras_model(keras_model)
tflite_model = converter.convert()

报错如下:

ConverterError: d:\Anaconda\envs\tensorflow\lib\site-packages\tensorflow\python\saved_model\save.py:1267:0: error: 'tf.Conv2D' op is neither a custom op nor a flex op :0: note: loc(fused["StatefulPartitionedCall:", "StatefulPartitionedCall"]): called from d:\Anaconda\envs\tensorflow\lib\site-packages\tensorflow\python\saved_model\save.py:1267:0: note: Error code: ERROR_NEEDS_FLEX_OPS :0: error: failed while converting: 'main': Some ops are not supported by the native TFLite runtime, you can enable TF kernels fallback using TF Select. See instructions: https://www.tensorflow.org/lite/guide/ops_select TF Select ops: Conv2D Details: tf.Conv2D(tensor, tensor<3x3x1x8xf32>) -> (tensor) : {data_format = "NHWC", device = "", dilations = [1, 1, 1, 1], explicit_paddings = [], padding = "SAME", strides = [1, 1, 1, 1], use_cudnn_on_gpu = true}

ChatGPT:

这个错误是由于在将 TensorFlow 模型转换为 TensorFlow Lite(TFLite)模型时遇到了不支持的操作。具体来说,错误指出了 'tf.Conv2D' 操作不是自定义操作(custom op)也不是弹性操作(flex op),因此无法在 TFLite 运行时使用。

解决这个问题的一种方法是启用 TensorFlow 内核回退(TF kernels fallback),通过 TF Select 选择需要的操作。你可以按照链接 https://www.tensorflow.org/lite/guide/ops_select 中提供的说明来启用 TF Select。

精选 TensorFlow 算子:

由于 TensorFlow Lite 内置算子库仅支持有限数量的 TensorFlow 算子,所以并非所有模型都可以转换。

为了允许进行转换,用户可以在 TensorFlow Lite 模型中启用特定 TensorFlow 算子的使用。但是,运行带 TensorFlow 算子的 TensorFlow Lite 模型需要引入核心 TensorFlow 运行时,这会增加 TensorFlow Lite 解释器的二进制文件大小。

代码修正:

keras_model = tf.keras.models.load_model('lenet_GPU.h5')
converter = tf.lite.TFLiteConverter.from_keras_model(keras_model)
converter.target_spec.supported_ops = [
  tf.lite.OpsSet.TFLITE_BUILTINS, # enable TensorFlow Lite ops.
  tf.lite.OpsSet.SELECT_TF_OPS # enable TensorFlow ops.
]
tflite_model = converter.convert()

 

posted @ 2023-05-21 20:56  U羊U  阅读(119)  评论(0编辑  收藏  举报