You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Keras中获取微调后VGG16网络中间层的输出?

获取Keras微调VGG16中间层输出的方法

嘿,这事儿好办!你已经完成了VGG16的微调,想要拿到中间层的输出对吧?在Keras里有几种简单直接的方法,我给你一步步讲清楚:

方法一:基于现有模型构建特征提取子模型

这是最常用的方式,适合你已经有了训练好的微调模型的情况。假设你的微调后模型变量名为fine_tuned_model,步骤如下:

  1. 先确认目标层名称——可以通过fine_tuned_model.summary()打印完整网络结构,找到你需要的层名(比如你给出的vgg16、flatten_1、dense_1这些)。
  2. 用Keras的Model类,以原模型输入为输入,目标层输出为输出,构建新的特征提取模型:
from tensorflow.keras.models import Model

# 指定输入和要提取的目标层输出(可同时提取多个层)
input_tensor = fine_tuned_model.input
target_outputs = [
    fine_tuned_model.get_layer('vgg16').output,
    fine_tuned_model.get_layer('flatten_1').output,
    fine_tuned_model.get_layer('dense_1').output
]

# 构建特征提取模型
feature_extractor = Model(inputs=input_tensor, outputs=target_outputs)

# 准备符合模型输入要求的样本数据
sample_input = ...  # 比如你的测试图片,shape要和模型输入一致

# 预测得到中间层输出
vgg_out, flatten_out, dense1_out = feature_extractor.predict(sample_input)

如果想提取VGG16子模型内部的层(比如block5_conv3),可以这样指定:

target_output = fine_tuned_model.get_layer('vgg16').get_layer('block5_conv3').output

方法二:构建模型时直接保存中间层引用

如果你是从零开始搭建的微调模型,那在构建网络时就可以直接保存中间层的输出引用,后续提取会更方便:

from tensorflow.keras.applications import VGG16
from tensorflow.keras.layers import Flatten, Dense
from tensorflow.keras.models import Model

# 加载预训练VGG16,去掉顶层分类器
base_vgg = VGG16(weights='imagenet', include_top=False, input_shape=(224, 224, 3))
# 这里是你微调时的冻结操作,按需调整冻结层数
for layer in base_vgg.layers[:-4]:
    layer.trainable = False

# 逐层构建网络,同时保存中间层输出引用
vgg_output = base_vgg.output
flatten_output = Flatten(name='flatten_1')(vgg_output)
dense1_output = Dense(1024, name='dense_1')(flatten_output)
# 假设你的最终分类层
final_output = Dense(your_class_num, activation='softmax')(dense1_output)

# 构建完整的微调模型
fine_tuned_model = Model(inputs=base_vgg.input, outputs=final_output)

# 直接用保存的引用构建提取模型
vgg_extractor = Model(inputs=base_vgg.input, outputs=vgg_output)
flatten_extractor = Model(inputs=base_vgg.input, outputs=flatten_output)

# 调用predict获取对应输出
flatten_result = flatten_extractor.predict(sample_input)

方法三:用Keras后端函数(底层方式)

如果你需要更灵活的控制,也可以用Keras的后端函数来获取输出,不过这种方式相对底层:

import tensorflow as tf

# 定义获取中间层输出的函数
get_dense1_output = tf.keras.backend.function(
    inputs=[fine_tuned_model.input],
    outputs=[fine_tuned_model.get_layer('dense_1').output]
)

# 传入输入数据得到输出
dense1_result = get_dense1_output([sample_input])[0]

小提示

  • 一定要确认层名称的正确性,model.summary()是最好的工具,能清晰看到每一层的名字和输出形状。
  • 如果输入是批量数据,输出结果也会对应批量样本的中间层特征。

内容的提问来源于stack exchange,提问作者ahmadi morteza ali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:24:10