当前位置: 首页 > 面试题库 >

Keras将输入提供给中间层并获得最终输出

施琦
2023-03-14
问题内容

我的模型是一个简单的完全连接的网络,如下所示:

inp=Input(shape=(10,))
d=Dense(64, activation='relu')(inp)
d=Dense(128,activation='relu')(d)
d=Dense(256,activation='relu')(d)     #want to give input here, layer3
d=Dense(512,activation='relu')(d)
d=Dense(1024,activation='relu')(d)
d=Dense(128,activation='linear')(d)

因此,保存模型后,我想将输入提供给第3层。我现在正在做的是:

model=load_model('blah.h5')    #above described network
print(temp_input.shape)        #(16,256), which is equal to what I want to give

index=3
intermediate_layer_model = Model(inputs=temp_input,
                                 outputs=model.output)

End_output = intermediate_layer_model.predict(temp_input)

但这不起作用,即我收到诸如不兼容输入之类的错误,输入应为元组等。错误消息为:

raise TypeError('`inputs` should be a list or tuple.') 
TypeError: `inputs` should be a list or tuple.

有什么办法可以让我在网络中间传递自己的输入并获取输出,而不是在开始时输入并从末尾获取输出?任何帮助将不胜感激。


问题答案:

首先,您必须在Keras中学习到,在输入上应用层时,在该层内创建了一个新节点,该节点连接输入和输出张量。每一层可具有将不同的输入张量连接到其相应的输出张量的多个节点。要构建模型,将遍历这些节点并创建一个新的模型图,其中包括从输入张量(即在创建模型时指定的)到达输出张量所需的所有节点model = Model(inputs=[...], outputs=[...])

现在,您想提供模型的中间层并获取模型的输出。由于这是一条新的数据流路径,因此我们需要为与该新计算图相对应的每一层创建新节点。我们可以这样做:

idx = 3  # index of desired layer
input_shape = model.layers[idx].get_input_shape_at(0) # get the input shape of desired layer
layer_input = Input(shape=input_shape) # a new input tensor to be able to feed the desired layer

# create the new nodes for each layer in the path
x = layer_input
for layer in model.layers[idx:]:
    x = layer(x)

# create the model
new_model = Model(layer_input, x)

幸运的是,您的模型由一个分支组成,我们可以简单地使用for循环来构建新模型。但是,对于更复杂的模型,这样做可能并不容易,并且您可能需要编写更多代码来构建新模型。



 类似资料:
  • 在模型中添加LSTM层之前,我不确定是否需要添加密集输入层。例如,使用以下模型: LSTM层是否为输入层,密集层是否为输出层(即无隐藏层)?或者Keras是否创建了一个输入层,这意味着LSTM层将是一个隐藏层?

  • 本文向大家介绍给keras层命名,并提取中间层输出值,保存到文档的实例,包括了给keras层命名,并提取中间层输出值,保存到文档的实例的使用技巧和注意事项,需要的朋友参考一下 更新: 感谢评论区提供的方案。 采用model.summary(),model.get_config()和for循环均可获得Keras的层名。 示例如下图 对于keras特定层的命名,只需在层内添加 name 即可 补充知识

  • 问题内容: 我拥有的代码(我无法更改)将Resnet与input_tensor一起使用。 研究源代码,ResNet50函数使用创建一个新的keras输入层,然后创建模型的其余部分。这是我要用自己的模型复制的行为。我从h5文件加载我的模型。 由于此模型已经具有输入层,因此我想用定义的新输入层替换它。 如何替换输入层? 问题答案: 使用以下方法保存模型时: 它将保存以下内容: 模型的体系结构,允许创建

  • 问题内容: 我已经使用CNN训练了二进制分类模型,这是我的代码 在这里,我想像TensorFlow一样获得每一层的输出,我该怎么做? 问题答案: 你可以使用以下命令轻松获取任何图层的输出: 对于所有图层,请使用以下命令: 注:为了模拟差使用learning_phase如1.在layer_outs以其它方式使用0. 编辑:(基于评论) 创建张量函数,该函数随后用于从给定输入的符号图中获取输出。 现在

  • 问题内容: 在Keras中创建顺序模型时,我知道您在第一层中提供了输入形状。然后,此输入形状会构成 隐式 输入层吗? 例如,下面的模型明确指定了2个密集层,但这实际上是一个3层模型,即由输入形状隐含的一个输入层,一个具有32个神经元的隐藏密集层,然后一个具有10个可能输出的输出层组成的模型吗? 问题答案: 好吧,实际上它实际上 是 一个隐式输入层,即您的模型是一个具有三层“输入,隐藏和输出”的“老

  • 问题内容: 我对如何从ssh等终端子进程发送输入和接收输出有疑问。 我在Golang中找不到一个简单的示例,其工作原理与上述类似。 在Golang中,我想做这样的事情,但是似乎不起作用: 然而; 我不确定如何执行此操作,因为每次执行此ssh命令时,我只能获取输出。我无法通过代码自动输入密码。有没有人写过ssh等终端进程的示例?如果是这样,请分享。 问题答案: 由于上面的评论,我可以使用密码使用ss