一维张量的Pytorch CrossEntropyLoss

时间:2020-10-22 03:51:10

标签: python pytorch

我在这里遗漏了一些东西:为什么@echo off for /F "tokens=1-2" %%a in (input_file.txt) do ( echo %%a echo %%b ) 不能用于一维张量?

CrossEntropyLoss
from  torch  import Tensor                                                                                                                                     
X =Tensor([1.0,2.0,3.0])                                                                                                                                       
labs = Tensor([2,2,3])                                                                                                                                         
loss = nn.CrossEntropyLoss().forward(X,labs)

为什么会失败,应该进行哪些更改以获得理想的结果?

2 个答案:

答案 0 :(得分:1)

该问题在pytorch论坛here中进行了讨论。正如Prajot正确指出的那样,单个输入样本具有三个不同的标签通常是没有意义的,因此每个输入仅接受一个标签。论坛上的帖子讨论了可能有用的高级用例的变通方法。

答案 1 :(得分:0)

如果您看到文档here

Input: (N,C) where C = number of classes
Target: (N) where each value is 0 <= targets[i] <= C-1
Output: scalar. If reduce is False, then (N) instead.

因此它期望输入为2D张量 并定位为一维

import torch
from  torch  import Tensor                                                                                                                                 
X =Tensor([[1.0,2.0,3.0]])   #2D                                                                                                                                   
labs = torch.LongTensor([2]) # 0 <= targets[i] <= C-1                                                                                                                          
loss = nn.CrossEntropyLoss().forward(X,labs)