如何从pytorch中的AlexNet中提取fc7功能作为numpy数组?

时间:2018-07-24 14:59:10

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

我想从经过微调的AlexNet的Update Student Set Description = ( SELECT Description FROM Class as CL where CL.StudentId = Student.Id ) 层中提取4096维特征向量。我的目标是稍后使用此层进行群集。 这是我提取它的方式:

fc7

但是,当我打印它时,alexnet = models.alexnet(pretrained=True); fc7 = alexnet.classifier[6]; 是一个fc7对象:

Linear

我正在寻找的是如何将此Linear(in_features=4096, out_features=1000, bias=True) 对象转换为numpy数组,以便可以对其进行进一步的操作。 我在想的是调用其方法Linear,但不确定要提供哪个输入?应该提供输入图像还是提供输出fc6层?

我想要'def forward(self, input)'-dim输入数组并摆脱4096输出数组(大概是因为我认为这不会帮助我进行聚类)。

1 个答案:

答案 0 :(得分:2)

这可以通过创建一个新模型来完成,除了最后一层之外,该模型具有与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上)