如何解决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
相关产品推荐
相关产品推荐

