据我所知,经过预先训练的模型在许多任务中发挥良好的特征提取器,这要归功于他们丰富的训练数据集。
但是,我想知道这个模型,比如说vgg-16,
具有一定的从输入图像中提取“语义”信息的能力。
如果答案是肯定的,给定一个unlabeled dataset,
可以通过测量提取的特征的语义相似性来“聚类”图像吗?
事实上,我花了一些精力:
224).
X (5000,3,224, vgg.classifier,将其输出维定义为4096.)。
features = vgg.features(X).view(X.shape[0], -1) # X: (5000, 3, 224, 224)
features = vgg.classifier(features) # features: (5000, 25088)
return features # features: (5000, 4096)然而,
cosine similarity,inner product,torch.cdist,却发现了几个不好的集群。有什么建议吗?提前谢谢。
发布于 2021-09-09 09:37:33
您可能不想一直走到最后一层,因为这些层包含特定于当前分类任务的特性。使用分类器中较高层次的特性可能会有所帮助。另外,由于VGG-16的分类器中有一个退出层,所以您希望切换到eval模式。
>>> vgg16 = torchvision.models.vgg(pretrained=True).eval()截断分类器:
>>> vgg16.classifier = vgg16.classifier[:4]现在,vgg16的分类器看起来如下:
(classifier): Sequential(
(0): Linear(in_features=25088, out_features=4096, bias=True)
(1): ReLU(inplace=True)
(2): Dropout(p=0.5, inplace=False)
(3): Linear(in_features=4096, out_features=4096, bias=True)
)然后提取特征:
>>> vgg16(torch.rand(1, 3, 124, 124)).shape
torch.Size([1, 4096])https://stackoverflow.com/questions/69115300
复制相似问题