ValueError: का उपयोग कर एक लक्ष्य आकार (मशाल.आकार([2, 1])) अलग है कि इनपुट आकार के लिए (मशाल.आकार([16, 1])) पदावनत किया गया है

0

सवाल

मैं कोशिश कर रहा हूँ का निर्माण करने के लिए एक मॉडल के लिए Quora सवालों जोड़ी डेटासेट जहां उत्पादन बाइनरी है या तो 1 या 0, लेकिन मैं इस त्रुटि मिलती है. मुझे पता है कि उत्पादन आकार के मॉडल से अलग है, इनपुट के आकार, लेकिन मैं नहीं जानता कि कैसे इसे ठीक करने के लिए. बैच का आकार सेट करने के लिए 16

    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)

त्रुटि:

/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

सबसे अच्छा जवाब

0

से स्टैक ट्रेस त्रुटि में होता है BCELoss संगणना, इस तथ्य के कारण है कि outputs.shape है (16, 1)है , जबकि targets.shape है (2, 1).

मैं देख रहा हूँ एक प्रमुख मुद्दा में अपने कोड: BCELoss प्रयोग किया जाता है की तुलना करने के लिए प्रायिकता वितरण (जाँच डॉक्स), लेकिन अपने मॉडल का उत्पादन किया गया है आकार (n, 1) जहां n बैच का आकार (आपके मामले में 16). वास्तव में वापसी का बयान forward आप के पास o2 करने के लिए एक रेखीय परत जिसका आउटपुट आकार है 1.

इस सवाल जोड़े डाटासेट का मतलब है के लिए द्विआधारी वर्गीकरण कार्य है, तो आप को बदलने की जरूरत है अपने उत्पादन में एक प्रायिकता वितरण, उदाहरण के लिए, का उपयोग करके एक Sigmoid या सेटिंग रैखिक परत आउटपुट का आकार 2 करने के लिए, और उसके बाद का उपयोग कर softmax.

2021-11-21 15:50:29

इसके अलावा आप स्विच कर सकते हैं BCELoss के साथ CrossEntropyLossहै , जो मतलब के लिए द्विआधारी वर्गीकरण समस्या.
aretor

मैं बदलने को नुकसान करने के लिए समारोह (BCEWithLogitsLoss) लागू होता है जो अवग्रह उत्पादन के लिए है , तो मैं निकाल दिया softmax . समस्या अभी भी मौजूद है, लेकिन अब क्योंकि लक्ष्य आकार है (10,1) और अलग से इनपुट (16,1)
BuzzedHub

यह मुश्किल है बताने के लिए त्रुटि से अपने कोड है । यह देखते हुए कि 16 सही बैच आकार, ध्यान से जाँच करें जब अपने लक्ष्य आकार में परिवर्तन से 16 करने के लिए 10. से बचने के लिए कृपया बदलने के शरीर के अपने सवाल अन्यथा जवाब होगा मतलब नहीं अब और नहीं.
aretor

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में