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

如何使用训练后的权重从AlexNet CNN模型中提取指定层特征

从训练完成的CIFAR-10 AlexNet模型提取最后一个dropout层特征的操作步骤

你当前写的特征提取器代码逻辑是正确的,按照以下步骤操作即可完成特征提取:

  • 第一步:确保已加载训练完成的模型权重
    如果你是在训练模型的同一个脚本中直接提取特征,训练完成后权重已经保留在Alexnet对象中,无需额外操作;如果是调用之前训练好保存的权重,先加载模型:

    # 训练时保存权重的代码示例(如果你之前没保存可以先执行这行)
    # Alexnet.save("cifar10_alexnet_80acc.h5")
    
    # 加载训练完成的模型
    Alexnet = keras.models.load_model("cifar10_alexnet_80acc.h5")
    

    为了避免取错层,你可以先打印所有层的名称确认最后一个dropout层的命名:

    for layer in Alexnet.layers:
        print(layer.name)
    

    按照你给出的模型结构,三个dropout层自动命名分别为dropout、dropout_1、dropout_2,你要取的最后一个对应dropout_2,和你当前写的代码一致。如果担心自动命名变动,也可以在定义模型时给目标层手动指定名称,比如keras.layers.Dropout(0.2, name="final_dropout"),后续取层时直接用自定义名称即可。

  • 第二步:构造特征提取器并设置推理模式
    你写的特征提取器代码是正确的,在此基础上需要关闭模型的训练状态,避免dropout层在特征提取时执行随机失活操作:

    feature_extractor = keras.Model(
      inputs=Alexnet.inputs,
      outputs=Alexnet.get_layer(name="dropout_2").output,
    )
    # 关闭特征提取器的训练状态
    feature_extractor.trainable = False
    
  • 第三步:执行特征提取
    注意输入数据的预处理方式必须和模型训练时完全一致(比如归一化范围、数据维度等),以下是提取测试集特征的示例:

    # 假设x_test是预处理后的输入数据,和训练时的预处理逻辑完全一致
    extracted_features = feature_extractor.predict(x_test, batch_size=32)
    

    输出的extracted_features形状为(样本数量, 1024),即每个样本对应1024维的dropout层输出特征,可直接用于下游任务。

内容的提问来源于stack exchange,提问作者Isaac Sady

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 18:54:02