从 Tensorflow 2.0 中加载的 saving_model 访问中间层

dav*_*oat 6 object-detection tensorflow tensorflow2.0

在 Tensorflow 2.0 中使用 SavedModels 时,是否可以从中间层访问激活?例如,使用此处的模型之一: https: //github.com/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md,我可以运行,例如,

model = tf.saved_model.load('faster_rcnn_inception_v2_coco_2018_01_28/saved_model').signatures['serving_default']
outputs = model(input_tensor)
Run Code Online (Sandbox Code Playgroud)

获得输出预测和边界框。我希望能够访问输出以外的层,但似乎没有任何有关如何执行此操作的 Tensorflow 2.0 文档。下载的模型还包括检查点文件,但似乎也没有很好的文档来说明如何使用 Tensorflow 2.0 加载这些文件......

use*_*882 2

如果您使用 TensorFlow 2.0 生成保存的模型,则可以提取各个层。但您所指的模型已保存在 TensorFlow 1.x 中。使用 TF 1.x 保存的模型,您无法单独提取图层。

以下示例介绍了如何从 TensorFlow 2.0 中保存的模型中提取层

import tensorflow as tf
import numpy as np

model = tf.keras.Sequential([
    tf.keras.layers.Dense(64, activation='relu', input_shape=(100,)),
    tf.keras.layers.Dense(10, activation='relu'),
    tf.keras.layers.Dense(1, activation='sigmoid')
])

# Compile and fit the model

model.save('save_model', save_format='tf')
Run Code Online (Sandbox Code Playgroud)

然后加载模型,如图所示。

model = tf.keras.models.load_model('save_model')
layer1 = model.get_layer(index=1)
Run Code Online (Sandbox Code Playgroud)