2

Ich versuche meine neuronalen Netze auf Hunderassen Datensatz zu trainieren. Nach dem Feedforward, während der Verlust Berechnung wirft es diesen Fehler:`THIndexTensor_ (Größe) (Ziel, 0) == Batch_Size 'fehlgeschlagen. bei d: projekte pytorch torch lib thnn generisch/ClassNLLCriterion.c: 54

RuntimeError: Assertion `THIndexTensor_(size)(target, 0) == batch_size' failed. at d:\projects\pytorch\torch\lib\thnn\generic/ClassNLLCriterion.c:54 

Code:

criterion =nn.CrossEntropyLoss() 
optimizer=optim.Adam(net.parameters(),lr=0.001) 


for epoch in range(10): # loop over the dataset multiple times 
     running_loss = 0.0 
     print(len(trainloader)) 
     for i, data in enumerate(trainloader, 0): 
      # get the inputs 
      inputs, labels = data 

      # wrap them in Variable 
      inputs, labels = Variable(inputs).float(), Variable(labels).float().type(torch.LongTensor) 


      # zero the parameter gradients 
      optimizer.zero_grad() 

      # forward + backward + optimize 
      outputs = net(inputs) 

      loss = criterion(outputs, labels) 
      loss.backward() 
      optimizer.step() 
      # print statistics 
      running_loss += loss.data[0] 
      if i % 2000 == 1999: # print every 2000 mini-batches 
       print('[%d, %5d] loss: %.3f' % 
         (epoch + 1, i + 1, running_loss/2000)) 
       running_loss = 0.0 

print('Finished Training') 

Fehler in dieser Zeile generiert wird:

loss = criterion(outputs, labels) 

Was das Problem ist ??

+0

können Sie die Form von 'outputs' und' labels' drucken? Verwenden Sie 'print (outputs.size(), labels.size())' vor 'loss = criteria (outputs, labels)'. dann können wir helfen. –

+0

hier ist das Ergebnis von "print (outputs.size(), labels.size())" torch.Size ([2500, 120]) torch.Size ([4]) – fateh

Antwort

2

Ich denke, Problem ist, dass Sie die Batch-Dimension auf dem Tensor labels fehlt. Der Fehler besagt, dass die Größe der 0th Dimension nicht der Batchgröße entspricht.

Versuchen Sie, diese zu ändern:

loss = criterion(outputs, labels.unsqueeze(0)) 

Bitte beachten Sie, dass die outputs Tensor sollte als die für jedes Etikett eine weitere Dimension zu einem Score labels Tensor haben entspricht, und die labels sollte nur den Index der richtige Etikett enthalten.

Verwandte Themen