gpt4 book ai didi

python - 如何从pytorch中的AlexNet中提取fc7特征作为numpy数组?

转载 作者:行者123 更新时间:2023-11-30 08:58:06 24 4
gpt4 key购买 nike

我想从微调过的 AlexNet 的 fc7 层中提取 4096 维特征向量。我的目标是稍后使用该层进行聚类。这就是我提取它的方法:

alexnet = models.alexnet(pretrained=True);
fc7 = alexnet.classifier[6];

但是,当我打印它时,fc7 是一个 Linear 对象:

Linear(in_features=4096, out_features=1000, bias=True)

我正在寻找的是如何将这个Linear对象转换为numpy数组,以便我可以对其进行进一步的操作。我想到的是调用它的方法'defforward(self, input)',但不确定要提供哪个输入?我应该提供输入图像还是应该提供 fc6 层的输出?

我想要 4096-dim 输入数组并删除 1000 输出数组(大概是因为我认为它不会帮助我进行聚类) .

最佳答案

这可以通过创建一个新模型来完成,该模型的所有层(以及相关参数)与 alexnet 相同,除了最后一层之外。

new_model = models.alexnet(pretrained=True)
new_classifier = nn.Sequential(*list(new_model.classifier.children())[:-1])
new_model.classifier = new_classifier

您现在应该能够向 new_model 提供输入图像并提取 4096 维特征向量。

如果由于某种原因您确实需要特定层作为 numpy 数组,您可以执行以下操作:fc7.weight.data.numpy()

(在 PyTorch 0.4.0 上)

关于python - 如何从pytorch中的AlexNet中提取fc7特征作为numpy数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51501828/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com