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 

答えて

0

あなたがnum_classes=num_breedsとあなたmodels.resnet50を作成する場合は、最後の層は、(あなたのケースでは120である)2048からnum_classesに完全に接続層である下回っています。 pretrained='imagenet'ネットワークにすべて対応する重みをロードするpytorchを要求しますが、それはその最後の層のための1000のクラスを持っている、いない120 2048x120テンソルがロードされた重み2048x1000と一致していないので、これはエラーの発生源であるを持つ

1000クラスのネットワークを作成し、ウェイトをロードしてから、保持したいクラスに "トリミング"する必要があります。または、120クラスで希望するネットワークを作成できますが、手動でウェイトをロードします。最後のケースでは、最後のレイヤに特別な注意を払う必要があります。