在正常的代码中,我这样做,一切正常:
from keras.layers import Input, Dense
from keras.models import Model
import keras.backend as K
import numpy as np
import tensorflow as tf
from sklearn.datasets import make_blobs
X, y = make_blobs(500,50,2)
def make_network1():
input_layer = Input((50,))
layer1 = Dense(100,name='network1_dense1')(input_layer)
output = Dense(50,name='network1_dense2')(layer1)
model = Model(input_layer,output)
return model
def make_network2():
input_layer = Input((50,))
layer1 = Dense(100,name='network2_dense1')(input_layer)
output = Dense(1,name='network2_output')(layer1)
model = Model(input_layer,output)
return model
network1 = make_network1()
network2 = make_network2()
output = network2(network1.output)
model = Model(network1.input, output)
现在,我想试验一下Keras中的.get_layer
方法和.output
属性,将最后一行代码替换为:
然后它会给出以下错误:
Graph disconnected: cannot obtain value for tensor Tensor("input_4:0", shape=(?, 50), dtype=float32) at layer "input_4". The following previous layers were accessed without issue: []
然而,output
和{
Tensor("model_14/network2_output/BiasAdd:0", shape=(?, 1), dtype=float32)
以及
Tensor("network2_output_1/BiasAdd:0", shape=(?, 1), dtype=float32)
并且network2
已经连接到network1
的输出,我不明白它为什么断开连接。如何使代码与.get_layer
和.output
方法一起工作?在
我使用keras==2.24和tensorflow gpu==1.5。在
不!,它们不是一回事。 让我解释一下这里发生了什么
首先创建两个模型,每个层有一个输入,然后将第二个模型的输入替换为第一个模型的最后一个层的输出。这样,您就可以将}是连接的。
但是在下一行中,}之间没有联系
^{pr2}$output
变量的输入作为第一个模型的输入。所以network1.inputs
和{network1.input
和{跑完这条线后:
^{pr2}$network2
模型有两个计算流:一个是运行make_network2()
时构造的原始流,另一个是在运行上述行时以network1.output
作为输入的计算流。因此,它将有两个对应于这两个计算流的输出:因此,当您要从
network1.input
转换到network2
模型的输出时,必须使用连接到network1.input
的第二个输出:本质上,
network2.get_output_at(1)
相当于在这一行中获得的output
:output = network2(network1.output)
。相关问题 更多 >
编程相关推荐