tf.keras.application
包含许多著名的神经网络链接VGG
,densenet
,mobilenet
等。以tf.keras.application.MobileNet
为例,我感兴趣的不仅是最终输出,还包括中间层的输出,在重新训练网络时如何获得所有这些输出。
可能对model.get_output_at(index)
有帮助。但是,每次调用此函数时,都会得到一个DeferredTensor
,因为我无法同时转发数据。是否存在方便的方法?
预先感谢〜
答案 0 :(得分:2)
我建议您阅读喀拉拉语documentation:
一种简单的方法是创建一个新的Model
,它将输出您感兴趣的图层:
from keras.models import Model
model = ... # create the 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函数,该函数将在给定特定输入的情况下返回特定图层的输出,例如:
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]
类似地,您可以直接构建Theano和TensorFlow函数。
请注意,如果模型在训练和测试阶段的行为不同(例如,如果使用Dropout,BatchNormalization等),则需要将学习阶段标志传递给函数:
get_3rd_layer_output = K.function([model.layers[0].input, K.learning_phase()],
[model.layers[3].output])
# output in test mode = 0
layer_output = get_3rd_layer_output([x, 0])[0]
# output in train mode = 1
layer_output = get_3rd_layer_output([x, 1])[0]
这是fchollet他自己写的另一个类似的答案: How can I get hidden layer representation of the given data?