首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Keras,如何得到每一层的输出?

Keras,如何得到每一层的输出?
EN

Stack Overflow用户
提问于 2017-01-18 12:07:17
回答 9查看 242.9K关注 0票数 193

我用CNN训练了一个二进制分类模型,下面是我的代码

代码语言:javascript
复制
model = Sequential()
model.add(Convolution2D(nb_filters, kernel_size[0], kernel_size[1],
                        border_mode='valid',
                        input_shape=input_shape))
model.add(Activation('relu'))
model.add(Convolution2D(nb_filters, kernel_size[0], kernel_size[1]))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=pool_size))
# (16, 16, 32)
model.add(Convolution2D(nb_filters*2, kernel_size[0], kernel_size[1]))
model.add(Activation('relu'))
model.add(Convolution2D(nb_filters*2, kernel_size[0], kernel_size[1]))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=pool_size))
# (8, 8, 64) = (2048)
model.add(Flatten())
model.add(Dense(1024))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(2))  # define a binary classification problem
model.add(Activation('softmax'))

model.compile(loss='categorical_crossentropy',
              optimizer='adadelta',
              metrics=['accuracy'])
model.fit(x_train, y_train,
          batch_size=batch_size,
          nb_epoch=nb_epoch,
          verbose=1,
          validation_data=(x_test, y_test))

在这里,我想要像TensorFlow一样得到每一层的输出,我该怎么做呢?

EN

回答 9

Stack Overflow用户

发布于 2017-09-22 15:35:03

来自https://keras.io/getting-started/faq/#how-can-i-obtain-the-output-of-an-intermediate-layer

一种简单的方法是创建一个新的模型,该模型将输出您感兴趣的层:

代码语言:javascript
复制
from keras.models import Model

model = ...  # include here your original model

layer_name = 'my_layer'
intermediate_layer_model = Model(inputs=model.input,
                                 outputs=model.get_layer(layer_name).output)
intermediate_output = intermediate_layer_model.predict(data)

或者,您可以构建一个Keras函数,该函数将在给定特定输入的情况下返回特定图层的输出,例如:

代码语言:javascript
复制
from keras import backend as K

# with a Sequential model
get_3rd_layer_output = K.function([model.layers[0].input],
                                  [model.layers[3].output])
layer_output = get_3rd_layer_output([x])[0]
票数 177
EN

Stack Overflow用户

发布于 2019-05-31 10:28:20

基于这个线程的所有好答案,我编写了一个库来获取每一层的输出。它抽象了所有的复杂性,并且被设计成尽可能用户友好的:

https://github.com/philipperemy/keract

它可以处理几乎所有的边缘情况。

希望它能帮上忙!

票数 23
EN

Stack Overflow用户

发布于 2017-08-01 14:24:10

以下内容在我看来非常简单:

代码语言:javascript
复制
model.layers[idx].output

上面是一个张量对象,因此您可以使用可以应用于张量对象的操作来修改它。

例如,要获取形状model.layers[idx].output.get_shape()

idx是图层的索引,您可以通过model.summary()找到它

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41711190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档