首页 > 解决方案 > 需要帮助理解使用 Pytorch 进行迁移学习的特征提取

问题描述

我正在寻求帮助以了解从预训练模型中提取特征的以下行为。

输出1:

def get_net():
   model = bninception(pretrained="imagenet")
   model.gp = nn.AdaptiveAvgPool2d(1)
   model.conv = nn.Conv2d(config.channels, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3))
   model.last = nn.Sequential(nn.BatchNorm1d(1024),nn.Dropout(0.5),nn.Linear(1024, config.num_classes))      
   return model

model = get_net()
model.cuda()
output1 =model(images)

输出2:我追求的是在 获得的特征model.conv,因此我删除了后面的部分,如下所示。

def get_net():
    model = bninception(pretrained="imagenet")
    model.gp = nn.AdaptiveAvgPool2d(1)
    model.conv = nn.Conv2d(config.channels, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3))
    return model 



model = get_net()
model.cuda()
features = model(images)

并得到 N 图像的特征为:[N, 1000]。我将这些功能输入如下

class ManualLinearRegression(nn.Module):
    def __init__(self):
       super(ManualLinearRegression,self).__init__()
            #self.linear = nn.Linear(1000, 28)
            self.linear = nn.Sequential(
                    nn.BatchNorm1d(1000),#1024
                    nn.Dropout(0.5),
                    nn.Linear(1000, config.num_classes),
                ) 

     def forward(self, x):
            return self.linear(x)

model = ManualLinearRegression().cuda()
output2 = model(images)

我期待Output1几乎类似于Output2。但它有很多不同。在计算F1分数时,输出1是0.40,而输出 20.09

我认为我在理解这里的一些主要方面方面有所欠缺。我可以知道我在这里做错了什么。

补充一点,最终我想从卷积层中提取特征,应用过采样并执行分类。

谢谢你。

标签: pytorchfeature-extractiontransfer-learning

解决方案


推荐阅读