系统错误:使用 Keras 加载模型时未知操作码

Jin*_*inn 8 python machine-learning computer-vision keras tensorflow

我已经在此链接上在 Kaggle 上训练了一个模型: https: //www.kaggle.com/dcosmin/shufflenet-with-keras 使用此链接中的源代码: https: //github.com/opconty/keras-shufflenetV2/ blob/master/shufflenetv2.py。训练完成后,我保存了一个名为ShuffleNetV2.h5的模型和weights.hdf5。当我尝试在我的计算机上运行代码时:

# model = tf.keras.models.load_model('L-CNN v4.0.h5')
# model = tf.keras.models.load_model('MobileNetV2 - 131 - 2.0.h5')
model = tf.keras.models.load_model('ShuffleNetV2 - 131.h5')

model.compile(loss='categorical_crossentropy', 
              optimizer='adam',
              metrics=['accuracy'])
Run Code Online (Sandbox Code Playgroud)

我需要在最新版本的 Keras 和 Tensorflow 上使用 Python 3.7 运行此代码 - 我需要在 Raspberry Pi 上运行它。错误:

 SystemError                               Traceback (most recent call last)
<ipython-input-15-914c5b8863a1> in <module>
      1 #model = tf.keras.models.load_model('L-CNN v4.0.h5')
      2 #model = tf.keras.models.load_model('MobileNetV2 - 131 - 2.0.h5')
----> 3 model = tf.keras.models.load_model('ShuffleNetV2 - 131.h5')
      4 #model=load_model('ShuffleNetV2 - 131.h5')
      5 model.compile(loss='categorical_crossentropy', 

C:\ProgramData\Anaconda3\envs\Computer Vision\lib\site-packages\tensorflow_core\python\keras\saving\save.py in load_model(filepath, custom_objects, compile)
    144   if (h5py is not None and (
    145       isinstance(filepath, h5py.File) or h5py.is_hdf5(filepath))):
--> 146     return hdf5_format.load_model_from_hdf5(filepath, custom_objects, compile)
    147 
    148   if isinstance(filepath, six.string_types):

C:\ProgramData\Anaconda3\envs\Computer Vision\lib\site-packages\tensorflow_core\python\keras\saving\hdf5_format.py in load_model_from_hdf5(filepath, custom_objects, compile)
    166     model_config = json.loads(model_config.decode('utf-8'))
    167     model = model_config_lib.model_from_config(model_config,
--> 168                                                custom_objects=custom_objects)
    169 
    170     # set weights

C:\ProgramData\Anaconda3\envs\Computer Vision\lib\site-packages\tensorflow_core\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 

C:\ProgramData\Anaconda3\envs\Computer Vision\lib\site-packages\tensorflow_core\python\keras\layers\serialization.py in deserialize(config, custom_objects)
    104       module_objects=globs,
    105       custom_objects=custom_objects,
--> 106       printable_module_name='layer')

C:\ProgramData\Anaconda3\envs\Computer Vision\lib\site-packages\tensorflow_core\python\keras\utils\generic_utils.py in deserialize_keras_object(identifier, module_objects, custom_objects, printable_module_name)
    301             custom_objects=dict(
    302                 list(_GLOBAL_CUSTOM_OBJECTS.items()) +
--> 303                 list(custom_objects.items())))
    304       with CustomObjectScope(custom_objects):
    305         return cls.from_config(cls_config)

C:\ProgramData\Anaconda3\envs\Computer Vision\lib\site-packages\tensorflow_core\python\keras\engine\network.py in from_config(cls, config, custom_objects)
    935     """
    936     input_tensors, output_tensors, created_layers = reconstruct_from_config(
--> 937         config, custom_objects)
    938     model = cls(inputs=input_tensors, outputs=output_tensors,
    939                 name=config.get('name'))

C:\ProgramData\Anaconda3\envs\Computer Vision\lib\site-packages\tensorflow_core\python\keras\engine\network.py in reconstruct_from_config(config, custom_objects, created_layers)
   1901       if layer in unprocessed_nodes:
   1902         for node_data in unprocessed_nodes.pop(layer):
-> 1903           process_node(layer, node_data)
   1904 
   1905   input_tensors = []

C:\ProgramData\Anaconda3\envs\Computer Vision\lib\site-packages\tensorflow_core\python\keras\engine\network.py in process_node(layer, node_data)
   1849       if not isinstance(input_tensors, dict) and len(flat_input_tensors) == 1:
   1850         input_tensors = flat_input_tensors[0]
-> 1851       output_tensors = layer(input_tensors, **kwargs)
   1852 
   1853       # Update node index map.

C:\ProgramData\Anaconda3\envs\Computer Vision\lib\site-packages\tensorflow_core\python\keras\engine\base_layer.py in __call__(self, inputs, *args, **kwargs)
    771                     not base_layer_utils.is_in_eager_or_tf_function()):
    772                   with auto_control_deps.AutomaticControlDependencies() as acd:
--> 773                     outputs = call_fn(cast_inputs, *args, **kwargs)
    774                     # Wrap Tensors in `outputs` in `tf.identity` to avoid
    775                     # circular dependencies.

C:\ProgramData\Anaconda3\envs\Computer Vision\lib\site-packages\tensorflow_core\python\keras\layers\core.py in call(self, inputs, mask, training)
    844     with backprop.GradientTape(watch_accessed_variables=True) as tape,\
    845         variable_scope.variable_creator_scope(_variable_creator):
--> 846       result = self.function(inputs, **kwargs)
    847     self._check_variables(created_variables, tape.watched_variables())
    848     return result

C:\ProgramData\Anaconda3\envs\Computer Vision\lib\site-packages\tensorflow_core\python\keras\layers\core.py in channel_shuffle(x)

SystemError: unknown opcode
Run Code Online (Sandbox Code Playgroud)

我真的需要解决这种不兼容性。你能告诉我是否需要在 Kaggle 上进行一些更改才能再次训练它,或者我不知道..

ash*_*nod 1

此错误是由于版本差异造成的。您可以通过将架构保存为代码并将权重保存在 h5 中来解决此问题。这将跨版本兼容。这是在 Keras 存储库中提出的。 https://github.com/keras-team/keras/issues/9595