Tf2 ValueError: A merge layer should be called on a list of inputs

Tf2 ValueError: A merge layer should be called on a list of inputs

问题描述

最近遇到了一个tensorflow的问题,在load已经save下来的模型的时候,发生了报错:

/opt/conda/lib/python3.6/site-packages/tensorflow/python/keras/engine/base_layer.py in _infer_output_signature(self, inputs, args, kwargs, input_masks)
    878           self._maybe_build(inputs)
    879           inputs = self._maybe_cast_inputs(inputs)
--> 880           outputs = call_fn(inputs, *args, **kwargs)
    881 
    882         self._handle_activity_regularization(inputs, outputs)

/opt/conda/lib/python3.6/site-packages/tensorflow/python/keras/layers/merge.py in call(self, inputs)
    116   def call(self, inputs):
    117     if not isinstance(inputs, (list, tuple)):
--> 118       raise ValueError('A merge layer should be called on a list of inputs.')
    119     if self._reshape_required:
    120       reshaped_inputs = []

ValueError: A merge layer should be called on a list of inputs.

这个问题以前遇到过,这次又遇到的时候忘了怎么解决的,这次进行一下记录。

我先搜了下资料,如果有这个类似问题的话可以跳转至 参考 部分。

解决

tensorflow2 有两种方式进行save模型,一种是通过pb的形式进行save,这种方式可以保持模型结构的name以及相应的结构。

比如以下方式:

 train_model.save('{}/ckpt'.format(output_path))

另外一种是通过json config的形式进行save模型,这里只会保存模型的结构,所以使用这种模型save的checkpoint需要结构一致。

  train_model.save_weights('{}/ckpt'.format(output_path), save_format='tf')

对代码进行排查发现,模型预期应该使用pb的checkpoint进行restore,但是由于部分公共代码改动导致使用了json config的checkpoint进行restore,导致出现这个问题。

参考

python - tf.keras.models.load_model return ValueError: A merge layer should be called on a list of inputs - Stack Overflow

python 3.x - ValueError: A merge layer should be called on a list of inputs. Tensorflow Keras - Stack Overflow

python - Keras ValueError: A merge layer should be called on a list of inputs - Stack Overflow

python - tf.keras.models.load_model return ValueError: A merge layer should be called on a list of inputs - Stack Overflow

posted @ 2023-03-02 09:43  NoMornings  阅读(170)  评论(0编辑  收藏  举报