【问题标题】:How to extract fc7 features from AlexNet in pytorch as numpy array?如何从 pytorch 中的 AlexNet 中提取 fc7 特征作为 numpy 数组?
【发布时间】:2019-01-01 06:22:11
【问题描述】:

我想从我的微调 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 数组,以便我可以对其进行进一步的操作。 我在想的是调用它的方法'def forward(self, input)',但不确定提供哪个输入?我应该提供输入图像还是应该提供 fc6 层的输出?

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

【问题讨论】:

    标签: python numpy machine-learning conv-neural-network pytorch


    【解决方案1】:

    这可以通过创建一个具有与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 上)

    【讨论】:

    • 使用这个 fc7.weight.data.numpy() 会给你权重而不是神经元输出(特征)。他要求聚类的特征,而不是权重。
    猜你喜欢
    • 2018-09-16
    • 1970-01-01
    • 2018-01-24
    • 2017-11-01
    • 1970-01-01
    • 2020-12-12
    • 1970-01-01
    • 2016-05-15
    • 1970-01-01
    相关资源
    最近更新 更多