无法将 Keras 模型转换为 tflite

Posted

技术标签:

【中文标题】无法将 Keras 模型转换为 tflite【英文标题】:Can't convert Keras model to tflite 【发布时间】:2019-09-05 15:14:19 【问题描述】:

我保存了一个 Keras 模型,其中包含以下行:

tf.keras.models.save_model(model, "path/to/model.h5")

稍后,我尝试将其转换为tflite 文件,如下所示:

converter = tf.contrib.lite.TFLiteConverter.from_keras_model_file('path/to/model.h5')
tflite_model = converter.convert()
open("path/to/model.tflite", "wb").write(tflite_model)

但我得到一个奇怪的错误:

您正在尝试将包含 35 层的权重文件加载到具有 0 层的模型中。

我知道我的模型运行良好。我能够加载它并得出推论。此错误仅在尝试将其保存为 tflite 模型时出现。

TensorFlow 版本:tensorflow-gpu 1.12.0

我正在使用 tf.keras。

【问题讨论】:

【参考方案1】:

事实证明,问题是由于明确定义了 InputLayer 和一些 input_shape

我的模型是这样的:

InputLayer(input_shape=(...))

BatchNormalization()

....剩余层

我改成:

BatchNormalization(input_shape=(...))

....剩余层

并在此处转移先前模型的权重。现在它完美地工作了。

【讨论】:

以上是关于无法将 Keras 模型转换为 tflite的主要内容,如果未能解决你的问题,请参考以下文章

TFLite 转换器:为 keras 模型实现的 RandomStandardNormal,但不适用于纯 TensorFlow 模型

来自自定义 keras 层的 tflite 转换器

如何将 TensorFlow 模型转换为 TFLite 模型

获取 input_array 和 output_array 项以将模型转换为 tflite 格式

YOLOV3——PyTorch训练TensorFlowLite部署模型转换

将 Tensorflow Keras 模型(编码器 - 解码器)保存为 SavedModel 格式