当我在 Tensorflow 上使用 Keras API 连接两个模型时,模型的输入张量必须来自 `tf.layers.Input`
Posted
技术标签:
【中文标题】当我在 Tensorflow 上使用 Keras API 连接两个模型时,模型的输入张量必须来自 `tf.layers.Input`【英文标题】:Input tensors to a Model must come from `tf.layers.Input` when I concatenate two models with Keras API on Tensorflow 【发布时间】:2019-01-18 14:49:02 【问题描述】:我正在使用 Keras 函数式 API 在 tensorflow 上创建一个广泛而深入的模型。
当我尝试合并两个模型时,出现以下错误。
----------------------------------- ---------------------------- ValueError Traceback(最近一次调用 最后)在() 1 merge_out = tf.keras.layers.concatenate([wide_model.output, deep_model.output]) 2 merge_out = tf.keras.layers.Dense(1)(merged_out) ----> 3 combine_model = tf.keras.Model(inputs=wide_model.input + [deep_model.input], outputs=merged_out) 4 打印(combined_model.summary())
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py 在 init(self, *args, **kwargs) 111 112 def 初始化(自我,*args,**kwargs): --> 113 super(Model, self).init(*args, **kwargs) 114 # 为迭代器 get_next 操作创建缓存。 115 self._iterator_get_next = weakref.WeakKeyDictionary()
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/network.py 在 init(self, *args, **kwargs) kwargs 中的 77 个“输入”和 kwargs 中的“输出”): 78 # 图网络 ---> 79 self._init_graph_network(*args, **kwargs) 80 其他: 81 # 子类网络
/usr/local/lib/python3.6/dist-packages/tensorflow/python/training/checkpointable/base.py 在 _method_wrapper(self, *args, **kwargs) 362 self._setattr_tracking = False #pylint:禁用=保护访问 363尝试: --> 364 方法(自我,*args,**kwargs) 365终于: 366 self._setattr_tracking = previous_value # pylint: disable=protected-access
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/network.py 在_init_graph_network(自我,输入,输出,名称) 193 '必须来自
tf.layers.Input
。 ' 194 '收到:' + str(x) + --> 195 '(缺少前一层元数据)。') 196 # 检查 x 是否是输入张量。 197 # pylint:禁用=保护访问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.Input
with
inputs = tf.placeholder(tf.float32, shape=(None,X_resampled.shape[1]))
deep_inputs = tf.keras.Input(tensor=(inputs))
让他们tf.layers.Input
就像this page 提到的那样。
但我仍然面临同样的问题。
我正在使用 tensorflow==1.10.0
有人可以帮我解决这个问题吗?
谢谢!
【问题讨论】:
【参考方案1】:在inputs=wide_model.input + [deep_model.input]
中,wide.model.input
可能不是列表,因此您传递的是新的Add
张量而不是输入列表。尝试传递inputs=[wide_model.input] + [deep_model.input]
【讨论】:
以上是关于当我在 Tensorflow 上使用 Keras API 连接两个模型时,模型的输入张量必须来自 `tf.layers.Input`的主要内容,如果未能解决你的问题,请参考以下文章
如何确保 Keras 使用 GPU 和 tensorflow 后端?
如何在 Windows 上降级 keras 和 tensorflow 版本?