微调维度误差
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
时,最后一层是从 2048
到 num_classes
的全连接层(在您的例子中是 120)。
具有 pretrained='imagenet'
要求 pytorch 将所有相应的权重加载到您的网络中,但它的最后一层具有 1000 类,而不是 120。这是错误的来源,因为 2048x120
张量与加载的权重不匹配 2048x1000
.
您应该使用 1000 类 创建您的网络并加载权重,然后 "trim" 到您想要保留的 类。或者您可以使用 120 类 创建您想要的网络,但手动加载权重。最后一种情况,只需要特别注意最后一层即可。
我正在尝试使用 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
时,最后一层是从 2048
到 num_classes
的全连接层(在您的例子中是 120)。
具有 pretrained='imagenet'
要求 pytorch 将所有相应的权重加载到您的网络中,但它的最后一层具有 1000 类,而不是 120。这是错误的来源,因为 2048x120
张量与加载的权重不匹配 2048x1000
.
您应该使用 1000 类 创建您的网络并加载权重,然后 "trim" 到您想要保留的 类。或者您可以使用 120 类 创建您想要的网络,但手动加载权重。最后一种情况,只需要特别注意最后一层即可。