源模型和模型(源模型的输入,源模型的输出)之间有区别吗?

时间:2018-11-08 08:20:09

标签: python keras

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

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,然后模型成功编译。两种型号不同吗?输入和输出来自同一模型,它们不应该连接吗?

1 个答案:

答案 0 :(得分:0)

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.get_output_at(0)dense_1/Tanh:0,它是dis_model的输出,因此它连接到dis_model的输入。

dis_model.get_output_at(1)model_2/dense_1/Tanh:0,它是d_on_g的输出,因此它等同于d_on_g的输入,该输入等于gen_model的输入。