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 - Keras ValueError: A merge layer should be called on a list of inputs - Stack Overflow
标签:inputs,layer,list,should,merge,called From: https://www.cnblogs.com/nomornings/p/17170751.html