由于要处理的层计算图是静态数据结构,可以对其进行访问和检查。而这就是将函数式模型绘制为图像的方式。
这也意味着您可以访问中间层的激活函数(计算图中的“节点”)并在其他地方重用它们,这对于特征提取之类的操作十分有用。
让我们来看一个例子。下面是一个 VGG19 模型,其权重已在 ImageNet 上进行了预训练:
下面的代码就是首先调用VGG19模型,我们需要VGG19中间层提取到的特征,所以我们指定输出为VGG19的输入,然后输出是VGG19中间内部的每个层,这样当我们传入一个图片数据给这个模型时,我们就会获得利用VGG19提取到的特征。
完整代码:
"""
* Created with PyCharm
* 作者: 阿光
* 日期: 2022/1/2
* 时间: 11:25
* 描述:
"""
import numpy as np
import tensorflow as tf
from keras import Model
vgg19 = tf.keras.applications.VGG19()
features_list = [layer.input for layer in vgg19.layers]
feature_extraction_model = Model(
inputs=vgg19.input,
outputs=features_list
)
img = np.random.random((1, 224, 224, 3)).astype('float32')
extracted_features = feature_extraction_model(img)
print(extracted_features)