web-dev-qa-db-ja.com

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]

そして、希望するラベルは次の形式です

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

ここで、xは0〜9の整数です。pytorchのドキュメントによると( http://pytorch.org/docs/master/nn.html

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

これはうまくいくはずですが、残念ながら奇妙なエラーが発生します

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)

誰か助けてもらえますか?私は本当に混乱していて、私が役立つと想像できるほとんどすべてのものを試しました。

ベスト

6
Elias

このコードを確認してください

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)

これは損失をうまく出力します:

Variable containing:
 2.4498
[torch.FloatTensor of size 1]
5
Sung Kim