Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 尝试使用.get_layer方法在Keras中创建模型时,图形断开连接_Python_Tensorflow_Keras_Neural Network_Keras Layer - Fatal编程技术网

Python 尝试使用.get_layer方法在Keras中创建模型时,图形断开连接

Python 尝试使用.get_layer方法在Keras中创建模型时,图形断开连接,python,tensorflow,keras,neural-network,keras-layer,Python,Tensorflow,Keras,Neural Network,Keras Layer,在普通代码中,我执行类似的操作,并且一切正常: 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(

在普通代码中,我执行类似的操作,并且一切正常:

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
属性:

model = Model(network1.input, network2.get_layer('network2_output').output)
然后它给出了以下错误:

图形已断开连接:无法获取张量的值 “input_4”层的张量(“input_4:0”,shape=(?,50),dtype=float32)。 访问以下以前的层时没有问题:[]

我的问题 但是,不应该是
output
network2.get\u layer('network2\u output')。output
是一样的吗?当我试着把它们都打印出来时,上面写着:

张量(“model_14/network2_output/BiasAdd:0”,shape=(?,1),dtype=float32)

张量(“网络2_输出_1/BiasAdd:0”,形状=(?,1),数据类型=浮点32)

network2
已经连接到
network1
的输出,我不明白为什么会断开连接。如何使代码与
.get\u层
输出
方法一起工作


我正在使用keras==2.24和tensorflow gpu==1.5。

在运行这一行之后:

output = network2(network1.output)
network2
模型有两个计算流:一个是运行
make_network2()
时构造的原始计算流,另一个是运行上述行时构造的带有
network1.output
的计算流。因此,它将有两个输出,分别对应于这两个计算流:

>>> network2.get_output_at(0)
<tf.Tensor 'network2_output_4/BiasAdd:0' shape=(?, 1) dtype=float32>

>>> network2.get_output_at(1)
<tf.Tensor 'model_14/network2_output/BiasAdd:0' shape=(?, 1) dtype=float32>
本质上,
network2.get\u output\u at(1)
相当于在此行中获得的
output
output=network2(network1.output)

不应为output和network2.get\u层('network2\u output')。output 同样的事情

不!,它们不是一回事。 让我解释一下这里发生了什么

network1 = make_network1()
network2 = make_network2()
output = network2(network1.output)
首先创建两个模型,每个层有一个输入,然后用第一个模型的最后一个层输出替换第二个模型的输入。这样,您就可以将
输出
变量的输入作为第一个模型的输入。因此,
网络1.输入
输出
连接起来。 但是在下一行中,
network1.input
network2.get\u层('network2\u output')。output

model = Model(network1.input, network2.get_layer('network2_output').output)

我现在明白了。如果我想得到中间层的输出呢?我找不到任何等价的
。get\u layer\u output\u at()
。只是好奇是否可以对中间层而不是最后的输出层做类似的事情。@RavenCheuk没有,因为您已经在
network1.output
上应用了整个
network2
模型,并且由于
model
类继承自Keras中的
layer
类,它可以单独应用于张量。此外,实现模型的调用方法,使得中间层的内部属性不被更新;相反,调用它们只是为了获得它们的输出。因此,我们只能访问模型的新符号输出,而不能访问模型中间层的符号输出。是否有可能强制新输入作为network2的唯一输入?我想通过将几个组件(1个函数1个组件)拼接在一起来创建我的神经网络。然而,我不确定这样做是否正确
model = Model(network1.input, network2.get_layer('network2_output').output)