微调维度误差

Fine Tuning dimensionality error

我正在尝试使用 Resnet50 解决图像分类问题。但是它显示错误,我无法修复它。

RuntimeError: inconsistent tensor size, expected tensor [120 x 2048] and src [1000 x 2048] to have the same number of elements, but got 245760 and 2048000 elements respectively at /Users/soumith/code/builder/wheel/pytorch-src/torch/lib/TH/generic/THTensorCopy.c:86  

错误发生在下面。

self.resnet = models.resnet50(num_classes=num_breeds, pretrained='imagenet')

型号如下

class Resnet(nn.Module):
    def __init__(self):
        super(Resnet,self).__init__()
        self.resnet = models.resnet50(num_classes=num_breeds, pretrained='imagenet')
        #self.resnet = nn.Sequential(*list(resnet.children())[:-2])
        #self.fc = nn.Linear(2048,num_breeds)

    def forward(self,x):
        x = self.resnet(x)
        return x

当您使用 num_classes=num_breeds 创建 models.resnet50 时,最后一层是从 2048num_classes 的全连接层(在您的例子中是 120)。

具有 pretrained='imagenet' 要求 pytorch 将所有相应的权重加载到您的网络中,但它的最后一层具有 1000 类,而不是 120。这是错误的来源,因为 2048x120 张量与加载的权重不匹配 2048x1000.

您应该使用 1000 类 创建您的网络并加载权重,然后 "trim" 到您想要保留的 类。或者您可以使用 120 类 创建您想要的网络,但手动加载权重。最后一种情况,只需要特别注意最后一层即可。