python - 原始模型和模型(原始模型的输入,原始模型的输出)之间有什么不同吗?
问题描述
我想在损失函数中使用中间层输出,所以我使用
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
,然后模型编译成功。两种型号有区别吗?输入和输出来自同一个模型,它们不应该连接吗?
解决方案
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:0
d_on_g 的输出,所以它连接到 d_on_g 的输入,它等于 gen_model 的输入。
推荐阅读
- javascript - 页面完全加载时的Javascript随机点击
- haskell - 用另一个默认值 Haskell 替换默认值
- android - 系统重启后 Android 本地通知不会触发
- python - Python:为什么我的代码一直告诉我答案是错误的,而事实并非如此?
- python - Python 在保存函数定义的同时运行 JavaScript 代码
- c++ - 地图岛数量 - char ** 行和 /columns 的问题
- python - Python ValueError:ColumnTransformer,列顺序不相等
- angular - 刷新一系列 Angular HTTP TestRequest
- java - 线程不可中断
- java - 为什么要在测试时创建/删除测试数据库?