tensorflow - 当我在 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.Input
with
inputs = tf.placeholder(tf.float32, shape=(None,X_resampled.shape[1]))
deep_inputs = tf.keras.Input(tensor=(inputs))
使它们tf.layers.Input
如本页所述。但我仍然面临同样的问题。
我正在使用张量流==1.10.0
有人可以帮我解决这个问题吗?
谢谢!
解决方案
In inputs=wide_model.input + [deep_model.input]
,wide.model.input
可能不是列表,因此您传递的是新Add
张量而不是输入列表。尝试inputs=[wide_model.input] + [deep_model.input]
通过
推荐阅读
- java - 使用 relativelayout 共享 TextView 内容
- c# - 在 C# 中有效地在海量文件中搜索字符串
- matlab - 从音频文件 Matlab 中去除噪声
- python - 如何计算姿势图优化器(slam)?
- c++ - 有没有办法合并两个(或多个)for循环以降低整体时间复杂度?
- kubernetes - PodDisruptionBudgets 是否优先于 HorizontalPodAutoscaler?
- python-3.x - 为什么我的列表在使用 for 循环追加后不断变化?
- regex - 正则表达式使字符串的最后一部分是可选的,如果它是可选的,则捕获所有内容
- java - 在 AWS 上导入密钥对之前,如何通过 Java 验证 OpenSSH 公钥格式?
- azure - for-each 在 azure 数据工厂中一次传递所有文件