2017-11-01 6 views
2

vielleicht kann mir jemand hier helfen. Ich versuche, die Kreuzentropie Verlust eines gegebenen Ausgangs meines NetzesKreuz Entropie Verlust in pytorch nn.CrossEntropyLoss()

print output 
Variable containing: 
1.00000e-02 * 
-2.2739 2.9964 -7.8353 7.4667 4.6921 0.1391 0.6118 5.2227 6.2540  
-7.3584 
[torch.FloatTensor of size 1x10] 

und dem gewünschten Label zu berechnen, die von der Form

print lab 
Variable containing: 
x 
[torch.FloatTensor of size 1] 

wobei x eine ganze Zahl zwischen 0 und 9 ist. nach der pytorch Dokumentation (http://pytorch.org/docs/master/nn.html)

criterion = nn.CrossEntropyLoss() 
loss = criterion(output, lab) 

dies funktionieren soll, aber leider bekomme ich einen seltsamen Fehler

TypeError: FloatClassNLLCriterion_updateOutput received an invalid combination of arguments - got (int, torch.FloatTensor, !torch.FloatTensor!, torch.FloatTensor, bool, NoneType, torch.FloatTensor, int), but expected (int state, torch.FloatTensor input, torch.LongTensor target, torch.FloatTensor output, bool sizeAverage, [torch.FloatTensor weights or None], torch.FloatTensor total_weight, int ignore_index) 

Kann mir jemand helfen? Ich bin wirklich verwirrt und habe fast alles versucht, was ich mir als hilfreich vorgestellt habe.

Beste

+1

Können Sie 'Labor' zu LongTensor konvertieren und versuchen? –

Antwort

3

Bitte überprüfen Sie diesen Code

import torch 
import torch.nn as nn 
from torch.autograd import Variable 

output = Variable(torch.rand(1,10)) 
target = Variable(torch.LongTensor([1])) 

criterion = nn.CrossEntropyLoss() 
loss = criterion(output, target) 
print(loss) 

Diese schön aus dem Verlust gedruckt wird:

Variable containing: 
2.4498 
[torch.FloatTensor of size 1] 
+0

Danke, ja das Problem war, dass die Zielvariable ein Long-Tensor sein muss und vom Typ Float in meinem Code war. Vielen Dank! – Elias

Verwandte Themen