Tensorflow-Lastdaten: schlechte Marschalldaten

Aug 19 2020

Ich möchte FaceNet in Keras laden, erhalte jedoch Fehler. Die modale Datei facenet_keras.h5 ist fertig, kann aber nicht geladen werden.

Sie können facenet_keras.h5 über diesen Link erhalten:

https://drive.google.com/drive/folders/1pwQ3H4aJ8a6yyJHZkTwtjcL4wYWQb7bn

Meine Tensorflow-Version ist:

tensorflow.__version__

'2.2.0'

und wenn ich Daten laden möchte:

from tensorflow.keras.models import load_model
load_model('facenet_keras.h5')

Erhalte diesen Fehler:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-6-2a20f38e8217> in <module>
----> 1 load_model('facenet_keras.h5')

~/.local/lib/python3.8/site-packages/tensorflow/python/keras/saving/save.py in load_model(filepath, custom_objects, compile)
    182     if (h5py is not None and (
    183         isinstance(filepath, h5py.File) or h5py.is_hdf5(filepath))):
--> 184       return hdf5_format.load_model_from_hdf5(filepath, custom_objects, compile)
    185 
    186     if sys.version_info >= (3, 4) and isinstance(filepath, pathlib.Path):

~/.local/lib/python3.8/site-packages/tensorflow/python/keras/saving/hdf5_format.py in load_model_from_hdf5(filepath, custom_objects, compile)
    175       raise ValueError('No model found in config file.')
    176     model_config = json.loads(model_config.decode('utf-8'))
--> 177     model = model_config_lib.model_from_config(model_config,
    178                                                custom_objects=custom_objects)
    179 

~/.local/lib/python3.8/site-packages/tensorflow/python/keras/saving/model_config.py in model_from_config(config, custom_objects)
     53                     '`Sequential.from_config(config)`?')
     54   from tensorflow.python.keras.layers import deserialize  # pylint: disable=g-import-not-at-top
---> 55   return deserialize(config, custom_objects=custom_objects)
     56 
     57 

~/.local/lib/python3.8/site-packages/tensorflow/python/keras/layers/serialization.py in deserialize(config, custom_objects)
    103     config['class_name'] = _DESERIALIZATION_TABLE[layer_class_name]
    104 
--> 105   return deserialize_keras_object(
    106       config,
    107       module_objects=globs,

~/.local/lib/python3.8/site-packages/tensorflow/python/keras/utils/generic_utils.py in deserialize_keras_object(identifier, module_objects, custom_objects, printable_module_name)
    367 
    368       if 'custom_objects' in arg_spec.args:
--> 369         return cls.from_config(
    370             cls_config,
    371             custom_objects=dict(

~/.local/lib/python3.8/site-packages/tensorflow/python/keras/engine/network.py in from_config(cls, config, custom_objects)
    984         ValueError: In case of improperly formatted config dict.
    985     """
--> 986     input_tensors, output_tensors, created_layers = reconstruct_from_config(
    987         config, custom_objects)
    988     model = cls(inputs=input_tensors, outputs=output_tensors,

~/.local/lib/python3.8/site-packages/tensorflow/python/keras/engine/network.py in reconstruct_from_config(config, custom_objects, created_layers)
   2017   # First, we create all layers and enqueue nodes to be processed
   2018   for layer_data in config['layers']:
-> 2019     process_layer(layer_data)
   2020   # Then we process nodes in order of layer depth.
   2021   # Nodes that cannot yet be processed (if the inbound node

~/.local/lib/python3.8/site-packages/tensorflow/python/keras/engine/network.py in process_layer(layer_data)
   1999       from tensorflow.python.keras.layers import deserialize as deserialize_layer  # pylint: disable=g-import-not-at-top
   2000 
-> 2001       layer = deserialize_layer(layer_data, custom_objects=custom_objects)
   2002       created_layers[layer_name] = layer
   2003 

~/.local/lib/python3.8/site-packages/tensorflow/python/keras/layers/serialization.py in deserialize(config, custom_objects)
    103     config['class_name'] = _DESERIALIZATION_TABLE[layer_class_name]
    104 
--> 105   return deserialize_keras_object(
    106       config,
    107       module_objects=globs,

~/.local/lib/python3.8/site-packages/tensorflow/python/keras/utils/generic_utils.py in deserialize_keras_object(identifier, module_objects, custom_objects, printable_module_name)
    367 
    368       if 'custom_objects' in arg_spec.args:
--> 369         return cls.from_config(
    370             cls_config,
    371             custom_objects=dict(

~/.local/lib/python3.8/site-packages/tensorflow/python/keras/layers/core.py in from_config(cls, config, custom_objects)
    988   def from_config(cls, config, custom_objects=None):
    989     config = config.copy()
--> 990     function = cls._parse_function_from_config(
    991         config, custom_objects, 'function', 'module', 'function_type')
    992 

~/.local/lib/python3.8/site-packages/tensorflow/python/keras/layers/core.py in _parse_function_from_config(cls, config, custom_objects, func_attr_name, module_attr_name, func_type_attr_name)
   1040     elif function_type == 'lambda':
   1041       # Unsafe deserialization from bytecode
-> 1042       function = generic_utils.func_load(
   1043           config[func_attr_name], globs=globs)
   1044     elif function_type == 'raw':

~/.local/lib/python3.8/site-packages/tensorflow/python/keras/utils/generic_utils.py in func_load(code, defaults, closure, globs)
    469   except (UnicodeEncodeError, binascii.Error):
    470     raw_code = code.encode('raw_unicode_escape')
--> 471   code = marshal.loads(raw_code)
    472   if globs is None:
    473     globs = globals()

ValueError: bad marshal data (unknown type code)

Dankeschön.

Antworten

1 TensorflowSupport Aug 23 2020 at 12:02

Die möglichen Lösungen für diesen Fehler sind unten aufgeführt:

  1. Das wurde Modelmöglicherweise erstellt und gespeichert Python 2.xund Sie verwenden es möglicherweise Python 3.x. Die Lösung besteht darin, dasselbe zu verwenden, Python Versionmit dem das gewesen Modelist Builtund Saved.

  2. Verwenden Sie dieselbe Version von Keras(und möglicherweise tensorflow), auf der sich Ihr Modell befand Builtund Saved.

  3. Die Saved Modelkönnen benutzerdefinierte Objekte enthalten. In diesem Fall müssen Sie das Modell mithilfe des Codes laden.

    new_model = tf.keras.models.load_model('model.h5', custom_objects={'CustomLayer': CustomLayer})

  4. Wenn Sie architectureden Code neu erstellen können (dh Sie haben den ursprünglichen Code, der zum Generieren verwendet wurde), können Sie den modelCode aus diesem Code instanziieren und dann model.load_weights('your_model_file.hdf5')zum Laden der Gewichte verwenden. Dies ist keine Option, wenn Sie nicht über den Code verfügen, mit dem das Original erstellt wurde architecture.

Weitere Informationen finden Sie in dieser Github-Ausgabe . Weitere Informationen zu Saving and Loading the Modelwith Custom Objectsfinden Sie in dieser Tensorflow-Dokumentation und in dieser Antwort zum Stapelüberlauf .