我想在损失函数中使用中间层输出,所以我使用
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
,然后模型成功编译。两种型号不同吗?输入和输出来自同一模型,它们不应该连接吗?
答案 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的输入。