0

我正在尝试将 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
4

1 回答 1

0

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

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

您应该创建包含 1000 个类的网络并加载权重,然后“修剪”到您想要保留的类。或者您可以使用 120 个类创建您想要的网络,但手动加载权重。在最后一种情况下,您只需要特别注意最后一层。

于 2017-11-15T17:30:01.613 回答