【问题标题】:error in conversion of keras model to tflite将 keras 模型转换为 tflite 时出错
【发布时间】:2020-12-09 12:40:03
【问题描述】:

我正在使用 tensorflow 版本 2.3.1 和 keras 2.4.3 我训练了一个 keras 模型,训练后我尝试使用以下命令将其转换为 tflite 模型:

from keras.models import load_model
import tensorflow as tf

model = load_model("model.h5")
converter = tf.lite.TFLiteConverter.from_saved_model(model)

我收到此错误:

TypeError                                 Traceback (most recent call last)
<ipython-input-4-759f94851ff5> in <module>
----> 1 converter = tf.lite.TFLiteConverter.from_saved_model(model)

C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\lite\python\lite.py in from_saved_model(cls, saved_model_dir, signature_keys, tags)
   1026
   1027     with context.eager_mode():
-> 1028       saved_model = _load(saved_model_dir, tags)
   1029     if not signature_keys:
   1030       signature_keys = saved_model.signatures

C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\saved_model\load.py in load(export_dir, tags, options)
    601     ValueError: If `tags` don't match a MetaGraph in the SavedModel.
    602   """
--> 603   return load_internal(export_dir, tags, options)
    604
    605

C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\saved_model\load.py in load_internal(export_dir, tags, options, loader_cls)
    612     tags = nest.flatten(tags)
    613   saved_model_proto, debug_info = (
--> 614       loader_impl.parse_saved_model_with_debug_info(export_dir))
    615
    616   if (len(saved_model_proto.meta_graphs) == 1 and

C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\saved_model\loader_impl.py in parse_saved_model_with_debug_info(export_dir)
     54     parsed. Missing graph debug info file is fine.
     55   """
---> 56   saved_model = _parse_saved_model(export_dir)
     57
     58   debug_info_path = os.path.join(

C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\saved_model\loader_impl.py in parse_saved_model(export_dir)
     84   # Build the path to the SavedModel in pbtxt format.
     85   path_to_pbtxt = os.path.join(
---> 86       compat.as_bytes(export_dir),
     87       compat.as_bytes(constants.SAVED_MODEL_FILENAME_PBTXT))
     88   # Build the path to the SavedModel in pb format.

C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\util\compat.py in as_bytes(bytes_or_text, encoding)
     84     return bytes_or_text
     85   else:
---> 86     raise TypeError('Expected binary or unicode string, got %r' %
     87                     (bytes_or_text,))
     88

TypeError: Expected binary or unicode string, got <tensorflow.python.keras.engine.functional.Functional object at 0x0000022EC9005250>

我不知道如何解决这个问题以及为什么会发生这种情况。有什么解决这个问题的建议吗?

【问题讨论】:

  • 你不应该以这种方式混合使用 keras 和 tensorflow。如果你想使用keras,你应该使用tensorflow.keras import

标签: tensorflow keras tensorflow-lite


【解决方案1】:

您正在尝试将 saved_model protobuf 的转换方法与 keras 模型一起使用。你的方法是tf.lite.TFLiteConverter.from_keras_model(model):

import tensorflow as tf
from tensorflow import keras
model = keras.models.load_model('path/to/location')
converter = tf.lite.TFLiteConverter.from_keras_model(model)
tflite_model = converter.convert()
with open('model.tflite', 'wb') as f:
  f.write(tflite_model)

查看详情here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-05
    • 2018-08-17
    • 2020-09-10
    • 1970-01-01
    • 1970-01-01
    • 2023-01-29
    • 1970-01-01
    • 2021-04-24
    相关资源
    最近更新 更多