ValueError: Hedef boyutu kullanma (meşale.Giriş boyutundan farklı olan boyut([2, 1])) (meşale.Boyut ([16, 1])) kullanımdan kaldırıldı

0

Soru

Çıktının 1 veya 0 olduğu Quora soruları çifti veri kümesi için bir model oluşturmaya çalışıyorum, ancak bu hatayı alıyorum. Modelimin çıktı şeklinin girdi şeklinden farklı olduğunu biliyorum, ancak nasıl düzelteceğimi bilmiyorum. Parti boyutu 16 olarak ayarlandı

    class Bert_model (nn.Module):
      def __init__(self) :
        super(Bert_model,self).__init__()
        self.bert =  BertModel.from_pretrained('bert-base-uncased', return_dict=False)
        self.drop_layer = nn.Dropout(.25)
        self.output = nn.Linear(self.bert.config.hidden_size,1)
    
      def forward(self,input_ids,attention_mask):
        _,o2 = self.bert (input_ids =input_ids , attention_mask = attention_mask )
        o2 = self.drop_layer(o2)
        return self.output(o2)

    model = Bert_model()
    
    loss_fn = nn.BCELoss().to(device)

    def train_epoch(
      model, 
      data_loader, 
      loss_fn, 
      optimizer, 
      device, 
      n_examples
    ):
      model = model.train()
    
      losses = []
      correct_predictions = 0
      
      for d in data_loader:
        input_ids = d["input_ids"].to(device)
        attention_mask = d["attention_mask"].to(device)
        targets = d["target"].to(device)
    
        input_ids = input_ids.view(BATCH_SIZE,-1)
        attention_mask = attention_mask.view(BATCH_SIZE,-1)
    
        outputs = model(
          input_ids=input_ids,
          attention_mask=attention_mask
        )
    
        _, preds = torch.max(outputs, dim=1)
    
        targets = targets.unsqueeze(-1)
        loss = loss_fn(F.softmax(outputs,dim=1), targets)
    
        correct_predictions += torch.sum(preds == targets)
        losses.append(loss.item())
    
        loss.backward()
        nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0)
        optimizer.step()
        optimizer.zero_grad()
    
      return correct_predictions.double() / n_examples, np.mean(losses)

Hatasız:

/usr/local/lib/python3.7/dist-packages/torch/nn/functional.py in
binary_cross_entropy(input, target, weight, size_average, reduce,
reduction)    2913         weight = weight.expand(new_size)    2914 
-> 2915     return torch._C._nn.binary_cross_entropy(input, target, weight, reduction_enum)    2916     2917  ValueError: Using a target
size (torch.Size([2, 1])) that is different to the input size
(torch.Size([16, 1])) is deprecated
deep-learning pytorch
2021-11-21 11:25:25
1

En iyi cevabı

0

Yığın izlemesinden, hata BCELoss hesaplamalarında gerçekleşir, bunun nedeni outputs.shape oluyor (16, 1), ise targets.shape oluyor (2, 1).

Kodunuzda önemli bir sorun görüyorum.: BCELoss olasılık dağılımlarını karşılaştırmak için kullanılır (dokümanları kontrol edin), ancak model çıktısının şekli vardır (n, 1) nerede n parti boyutudur (sizin durumunuzda 16). Aslında iade beyanında forward sen geç o2 çıkış şekli olan doğrusal bir katmana 1.

Soru Çiftleri Veri Kümesi ikili sınıflandırma görevleri içindir, bu nedenle çıktılarınızı örneğin bir olasılık dağılımına dönüştürmeniz gerekir. Sigmoid veya doğrusal katman çıktı boyutunu 2'ye ayarlayın ve ardından softmax'ı kullanın.

2021-11-21 15:50:29

Buna ek olarak geçiş yapabilirsiniz BCELoss ile CrossEntropyLoss, ikili sınıflandırma problemleri içindir.
aretor

kayıp fonksiyonunu çıkışa sigmoid uygulayan (BCEWithLogitsLoss) olarak değiştirdim , sonra softmax'ı çıkardım . sorun hala var, ancak şimdi hedef boyut (10,1) ve girdiden (16,1)farklı olduğu için
BuzzedHub

Hatayı kodunuzdan ayırt etmek zordur. 16'nın doğru parti boyutu olduğu göz önüne alındığında, hedef boyutunuzun 16'dan 10'a ne zaman değiştiğini dikkatlice kontrol edin. Lütfen sorunuzun gövdesini değiştirmekten kaçının, aksi takdirde cevaplar artık mantıklı olmayacaktır.
aretor

Diğer dillerde

Bu sayfa diğer dillerde

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................