基于TensorFlow Functional API构建特征提取模型后,为何features.layers输出包含VGG19全部层?
为什么新模型包含VGG19的全部层?
这是个很容易搞混的点,我来帮你拆解清楚:
当用TensorFlow的Functional API创建
Model时,模型会自动包含从输入到你指定的所有输出层之间的全部依赖层。毕竟要计算你选中的那些层的输出,必须依赖前面所有层的计算结果——总不能跳过前面的卷积、池化层,直接得到后面层的输出吧?你的代码里
layer_outputs = layer_outputs[22:-1]指定了VGG19中间到倒数第二层的输出,但这些层的输出完全建立在前面所有层(包括输入层、前22层)的基础上。所以新模型features必须把这些前置层都包含进来,才能正确算出你要的特征输出。你看到的
features.layers显示全部VGG层,这是模型的完整层集合(用于构建完整计算图),但模型的实际输出确实是你指定的那些层的结果。可以用下面的代码验证:print(f"输出层数量: {len(features.outputs)}") print("各输出层形状:") for idx, output in enumerate(features.outputs): print(f"第{idx}个输出: {output.shape}")运行后你会发现,输出的数量和形状正好对应你选的
layer_outputs[22:-1]的那些层。如果想确认哪些是你实际输出的目标层,直接打印
layer_outputs,或者用features.output_names查看输出的层名称就可以了。
总结一下:features.layers展示的是模型计算所需的全部依赖层,而features.outputs才是你真正要提取的特征输出。这是TensorFlow构建计算图的正常行为,完全不影响你做特征提取的功能~
内容的提问来源于stack exchange,提问作者Davinder Pal Singh
相关产品推荐
相关产品推荐

