我想从经过微调的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
输出数组(大概是因为我认为这不会帮助我进行聚类)。
答案 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上)