微调维度错误

时间:2017-11-15 15:42:29

标签: machine-learning deep-learning pytorch pre-trained-model

我正在尝试使用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

1 个答案:

答案 0 :(得分:0)

当您使用models.resnet50创建num_classes=num_breeds时,最后一层是从2048num_classes的完全连接的图层(在您的情况下为120)。

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

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