使用时如何获得中间输出tf.keras.应用

2024-09-25 00:21:31 发布

您现在位置:Python中文网/ 问答频道 /正文

tf.keras.application包含许多著名的神经网络链接VGGdensenetmobilenet等。以tf.keras.application.MobileNet为例,我感兴趣的不仅是最终的输出,还有中间层的输出,在对网络进行再训练时,怎样才能得到这些输出呢。在

可能对model.get_output_at(index)有帮助。但是,每次调用这个函数时,我都会得到一个DeferredTensor,因为我不能同时转发数据。有方便的方法吗?在

提前谢谢~


Tags: 网络outputgetmodelapplication链接tf神经网络
1条回答
网友
1楼 · 发布于 2024-09-25 00:21:31

我建议您阅读kerasdocumentation

一种简单的方法是创建一个新的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函数,该函数将返回给定输入的特定层的输出,例如:

^{pr2}$

类似地,您可以直接构建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]

另一个答案是相似的 How can I get hidden layer representation of the given data?

相关问题 更多 >