首页 > 解决方案 > 原始模型和模型(原始模型的输入,原始模型的输出)之间有什么不同吗?

问题描述

我想在损失函数中使用中间层输出,所以我使用

dis_loss = Model(input=dis_model.get_input_at(0), output=dis_model.get_output_at(-1))
func_x = dis_loss(y_true)
func_x = dis_loss(y_pred) 

然后,我收到如下错误消息。

ValueError: Graph disconnected: cannot obtain value for tensor Tensor("input_layer_1:0", shape=(?, 224, 224, 3), dtype=float32) at layer "input_layer". The following previous layers were accessed without issue: []

我检查了 的名称dis_model.get_input_at(0)dis_model.layer[0].input并且它们是相同的。第一层的名称dis_model.summary()也相同。

但是我尝试直接使用dis_loss = dis_model,然后模型编译成功。两种型号有区别吗?输入和输出来自同一个模型,它们不应该连接吗?

标签: pythonkeras

解决方案


2 个输入层会导致 2 个输出层,所以

dis_loss = Model(input=dis_model.get_input_at(0), output=dis_model.get_output_at(-1))

必须修改为

dis_loss = Model(input=dis_model.get_input_at(0), output=dis_model.get_output_at(0))

梳理2个模型时,

gen_x = gen_model.output
dis_z = dis_model(gen_x)
d_on_g = model(input=gen_x.input, output=[gen_x, dis_z])

它创建第二个输出, dis_model 的输出也是如此,因此dis_model.get_output_at(0)dense_1/Tanh:0连接到 dis_model 的输入。

dis_model.get_output_at(1)model_2/dense_1/Tanh:0d_on_g 的输出,所以它连接到 d_on_g 的输入,它等于 gen_model 的输入。


推荐阅读