You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决Keras孪生网络的ValueError: Graph disconnected错误?

解决Keras孪生网络获取嵌入时的图断开问题

问题原因

你错误地尝试从完整孪生网络模型(siamese)中仅传入单个输入来获取merge_layer_1的输出,但该层依赖两个输入分支的结果;同时你实际需要的是嵌入网络的输出(即embedding_network的输出)而非合并层输出,这导致计算图断开,触发报错。

正确解决方案

方案1:直接使用预定义的嵌入网络(推荐)

你已经单独定义了embedding_network,它本身就是生成输入样本嵌入的专用模型,直接调用即可:

# 定义获取嵌入的函数
get_embedding = tf.keras.backend.function([embedding_network.input], [embedding_network.output])
# 示例:输入形状为(40,1)的样本,需扩展批量维度
sample = ... # 你的输入数据,形状(40,1)
embedding = get_embedding([sample.reshape(1,40,1)])[0]

方案2:从孪生网络中提取嵌入(若必须通过siamese模型)

如果需要从完整孪生网络中提取某一个分支的嵌入,需明确指定对应分支的输出层:

# 获取第一个输入分支的嵌入输出
get_embedding_from_siamese = tf.keras.backend.function([siamese.input[0]], [siamese.layers[2].output])
# 示例调用
sample = ... # 你的输入数据,形状(40,1)
embedding = get_embedding_from_siamese([sample.reshape(1,40,1)])[0]

注:siamese.layers[2]对应cnn_1层(即embedding_network对input_1的输出),可通过打印siamese.layers确认层索引是否准确。

原错误代码的问题点

你之前的代码tf.keras.backend.function([siamese.layers[0].input],[siamese.layers[-2].output])存在两个核心问题:

  • siamese.layers[-2]是merge_layer_1,它需要两个输入分支的结果,仅传入siamese.layers[0].input(即input_1)无法满足依赖,导致计算图断开。
  • 你实际需要的是嵌入(embedding_network的输出),而非合并层的输出。

内容的提问来源于stack exchange,提问作者user8034918

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 02:25:15