首页 > 解决方案 > 当我在 Tensorflow 上使用 Keras API 连接两个模型时,模型的输入张量必须来自 `tf.layers.Input`

问题描述

我正在使用 tensorflow 上的 Keras 功能 API 创建一个广泛而深入的模型。

当我尝试合并这两个模型时,出现以下错误。

-------------------------------------------------- ------------------------- ValueError Traceback (最近一次调用最后一次) in () 1 merge_out = tf.keras.layers.concatenate([wide_model.输出,deep_model.output]) 2 merge_out = tf.keras.layers.Dense(1)(merged_out) ----> 3 combined_model = tf.keras.Model(inputs=wide_model.input + [deep_model.input], 输出=merged_out) 4 打印(combined_model.summary())

/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py in init (self, *args, **kwargs) 111 112 def init (self, *args, ** kwargs):-> 113 超级(模型,自我)。init (*args, **kwargs) 114 # 为迭代器 get_next op 创建一个缓存。第115章

/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/network.py init (self, *args, **kwargs) 77 kwargs 中的“输入”和 kwargs 中的“输出” ): 78 # 图网络 ---> 79 self._init_graph_network(*args, **kwargs) 80 else: 81 # 子类网络

/usr/local/lib/python3.6/dist-packages/tensorflow/python/training/checkpointable/base.py in _method_wrapper(self, *args, **kwargs) 362 self._setattr_tracking = False # pylint: disable=protected -access 363 try: --> 364 method(self, *args, **kwargs) 365 finally: 366 self._setattr_tracking = previous_value # pylint: disable=protected-access

/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/network.py in _init_graph_network(self, inputs, outputs, name) 193 ' 必须来自tf.layers.Input. ' 194 'Received: ' + str(x) + --> 195 ' (缺少前一层元数据)。') 196 # 检查 x 是否是输入张量。第197章

ValueError:模型的输入张量必须来自tf.layers.Input. 收到:Tensor("add_1:0", shape=(1, ?, 163), dtype=float32) (缺少前一层元数据)。

这是连接两者的代码。

merged_out = tf.keras.layers.concatenate([wide_model.output, deep_model.output])
merged_out = tf.keras.layers.Dense(1)(merged_out)
combined_model = tf.keras.Model(inputs=wide_model.input + [deep_model.input], outputs=merged_out)
print(combined_model.summary())

对于每个模型的输入,我尝试使用tf.layers.Inputwith

inputs = tf.placeholder(tf.float32, shape=(None,X_resampled.shape[1]))
deep_inputs = tf.keras.Input(tensor=(inputs))

使它们tf.layers.Input本页所述。但我仍然面临同样的问题。

我正在使用张量流==1.10.0

有人可以帮我解决这个问题吗?

谢谢!

标签: tensorflowkeras

解决方案


In inputs=wide_model.input + [deep_model.input],wide.model.input可能不是列表,因此您传递的是新Add张量而不是输入列表。尝试inputs=[wide_model.input] + [deep_model.input]通过


推荐阅读