ошибка при преобразовании модели keras в tflite

#tensorflow #keras #tensorflow-lite

#тензорный поток #keras #тензорный поток-облегченный

Вопрос:

Я использую 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:ProgramDataAnaconda3libsite-packagestensorflowlitepythonlite.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:ProgramDataAnaconda3libsite-packagestensorflowpythonsaved_modelload.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:ProgramDataAnaconda3libsite-packagestensorflowpythonsaved_modelload.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:ProgramDataAnaconda3libsite-packagestensorflowpythonsaved_modelloader_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:ProgramDataAnaconda3libsite-packagestensorflowpythonsaved_modelloader_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:ProgramDataAnaconda3libsite-packagestensorflowpythonutilcompat.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>
 

Я понятия не имею, как решить эту проблему и почему это произошло. Есть какие-нибудь предложения по решению этой проблемы?

Комментарии:

1. Вы не должны смешивать keras и tensorflow таким образом. Если вы хотите использовать keras, вы должны использовать из tensorflow.keras import

Ответ №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)
 

Подробности смотрите здесь