更新:
感谢评论区提供的方案。
采用model.summary(),model.get_config()和for循环均可获得Keras的层名。
示例如下图
对于keras特定层的命名,只需在层内添加 name 即可
model.add(Activation('softmax',name='dense_1') ) # 注意 name 要放于函数内 #提取中间层 from keras.models import Model import keras layer_name = 'dense_1' #获取层的名称 intermediate_layer_model = Model(inputs=model.input, outputs=model.get_layer(layer_name).output)#创建的新模型 intermediate_output = intermediate_layer_model.predict(X_test) doc = open(r'C://Users//CCUT04//Desktop//1.txt','w') for i in intermediate_output: print(i) print(i , file = doc) doc.close()
补充知识:关于用keras提取NN中间layer输出
Build model... __________________________________________________________________________________________________ Layer (type) Output Shape Param # Connected to ================================================================================================== main_input (InputLayer) (None, 89, 39) 0 __________________________________________________________________________________________________ cropping1d_1 (Cropping1D) (None, 85, 39) 0 main_input[0][0] __________________________________________________________________________________________________ cropping1d_2 (Cropping1D) (None, 85, 39) 0 main_input[0][0] __________________________________________________________________________________________________ cropping1d_3 (Cropping1D) (None, 85, 39) 0 main_input[0][0] __________________________________________________________________________________________________ cropping1d_4 (Cropping1D) (None, 85, 39) 0 main_input[0][0] __________________________________________________________________________________________________ cropping1d_5 (Cropping1D) (None, 85, 39) 0 main_input[0][0] __________________________________________________________________________________________________ concatenate_1 (Concatenate) (None, 85, 195) 0 cropping1d_1[0][0] cropping1d_2[0][0] cropping1d_3[0][0] cropping1d_4[0][0] cropping1d_5[0][0] __________________________________________________________________________________________________ fc1 (BatchNormalization) (None, 85, 195) 780 concatenate_1[0][0] __________________________________________________________________________________________________ fc2 (Bidirectional) (None, 85, 2048) 9994240 fc1[0][0] __________________________________________________________________________________________________ fc3 (BatchNormalization) (None, 85, 2048) 8192 fc2[0][0] __________________________________________________________________________________________________ global_average_pooling1d_1 (Glo (None, 2048) 0 fc3[0][0] __________________________________________________________________________________________________ main_output (Dense) (None, 2) 4098 global_average_pooling1d_1[0][0] ================================================================================================== Total params: 10,007,310 Trainable params: 10,002,824 Non-trainable params: 4,486 __________________________________________________________________________________________________
假设我网络层数是上面这个结构.
如果我想得到pooling的输出, keras上有两张方法。
intermediate_layer_model = Model(inputs=model.input,outputs=model.get_layer(str('global_average_pooling1d_1')).output) #model.summary() #model.get_layer(str('cropping1d_1')) intermediate_output = intermediate_layer_model.predict(data)
data是你的输入所用的数据....
from keras import backend as K get_11rd_layer_output = K.function([model.layers[0].input], [model.layers[10].output]) layer_output = get_11rd_layer_output([data])[0]
我这里第10层是Pooling层.
这两个代码的output是一样的..
一般我看人用的都是第二个...
以上这篇给keras层命名,并提取中间层输出值,保存到文档的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持小牛知识库。
问题内容: 我的模型是一个简单的完全连接的网络,如下所示: 因此,保存模型后,我想将输入提供给第3层。我现在正在做的是: 但这不起作用,即我收到诸如不兼容输入之类的错误,输入应为元组等。错误消息为: 有什么办法可以让我在网络中间传递自己的输入并获取输出,而不是在开始时输入并从末尾获取输出?任何帮助将不胜感激。 问题答案: 首先,您必须在Keras中学习到,在输入上应用层时,在该层内创建了一个新节点
本文向大家介绍keras 获取某层输出 获取复用层的多次输出实例,包括了keras 获取某层输出 获取复用层的多次输出实例的使用技巧和注意事项,需要的朋友参考一下 官方文档很全面,搜索功能也很好。但是如果你想单独实现某个功能,根本无从搜寻。于是我写了这个笔记。从功能出发。 两个tensor经过一个layer实例会产生两个输出。 这个代码有错误,因为最后一行没有指定lstm这个layer实例的那个输
我正在尝试在keras中复制VGG16模型,以下是我的代码: maxpooling2d层在注释的行处给出了一个错误 错误显示: /usr/local/lib/python2.7/dist-packages/keras/engine/topology.pyc in create_node(cls,outbound_layer,inbound_layers,node_indexes,tensor_in
在模型中添加LSTM层之前,我不确定是否需要添加密集输入层。例如,使用以下模型: LSTM层是否为输入层,密集层是否为输出层(即无隐藏层)?或者Keras是否创建了一个输入层,这意味着LSTM层将是一个隐藏层?
本文向大家介绍keras K.function获取某层的输出操作,包括了keras K.function获取某层的输出操作的使用技巧和注意事项,需要的朋友参考一下 如下所示: 加载训练好并保存的网络模型 加载数据(图像),并将数据处理成array形式 指定输出层 将处理后的数据输入,然后获取输出 其中,K.function有两种不同的写法: 1. 获取名为layer_name的层的输出 layer
我正在开发一个程序,该程序用一个无方向的Conv2D层(跨距=1)替换跨距的Conv2D层(跨距=2),然后在激活层之后添加一个AveragePooling2D层(跨距=2)。换句话说,AveragePooling2D层将减少输出维度,而不是让Conv2D层减少输出维度。 我使用本文中描述的方法将Conv2D层替换为非结构化版本,并在激活后插入averagepoolig2d层。替换Conv2D层效