pytorch - 需要帮助理解使用 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
,而输出 2是0.09
。
我认为我在理解这里的一些主要方面方面有所欠缺。我可以知道我在这里做错了什么。
补充一点,最终我想从卷积层中提取特征,应用过采样并执行分类。
谢谢你。
解决方案
推荐阅读
- python - Python - 构建迭代均值的有效方法
- python - Python避免在生成器中重复函数调用
- python - 在 python 中用另一个较小的 JSON 更新一个 JSON
- javascript - 如何在活动时使自动滑动轮播缩略图更改背景图像
- c++ - VideoCapture opencv + rstp + Qt c++ 失败
- javascript - 页面在表单提交时重新加载。为什么?
- reactjs - 具有成帧器运动的动画路线
- php - 键入'_InternalLinkedHashMap
' 不是类型 'FutureOr 的子类型 - >'
- python - 引号分割线在子引号中分割 '\n'
- python - 字符串的后半部分大写