前提・実現したいこと
pytrochを使って機械学習をしています。
CrossEntropyLossについての質問です。
データのアンバランス問題のためとしてweightが設定できますが、
設定しても値が全くかわりません。
これは仕様なのでしょうか。
また、公式のドキュメントを見たところ、log_ssoftmaxとNLL_Lossの組み合わせとあったので
その順番で値を計算し、重みを設定しましたが、重みが反映されておらず困っています。
該当のソースコード
python
1device = 'cuda:0' 2weight = torch.tensor([100.,1.]).to(device) 3x = torch.tensor([[0.3335,0.886]]).to(device) 4target = torch.tensor([0]).to(device) 5 6loss_fn = nn.CrossEntropyLoss().to(device) 7loss_fn_w = nn.CrossEntropyLoss(weight=weight).to(device) 8loss1 = loss_fn(x, target) #pytrochでの計算 9loss2 = loss_fn_w(x, target) #pytorchでの重み付きの計算 10print(loss1, loss2) 11 12sm = F.log_softmax(x, dim=1) 13print(F.nll_loss(sm, target, weight=weights)) 14 15---出力--- 16tensor(1.0071, device='cuda:0') tensor(1.0071, device='cuda:0')
回答1件
あなたの回答
tips
プレビュー