Pytorch Pytork无交叉熵小批量

Pytorch Pytork无交叉熵小批量,pytorch,cross-entropy,Pytorch,Cross Entropy,我试图构建一个简单的示例,其中包含零交叉熵,有三个类,minibatch size=1: ce_loss = nn.CrossEntropyLoss() outputs = torch.tensor([[1,0,3]], dtype=float) targets = torch.tensor([1,0,3], dtype=torch.int64) loss = ce_loss(outputs, targets) 这会导致错误: ValueError: Expected input batch_

我试图构建一个简单的示例,其中包含零交叉熵,有三个类,minibatch size=1:

ce_loss = nn.CrossEntropyLoss()
outputs = torch.tensor([[1,0,3]], dtype=float)
targets = torch.tensor([1,0,3], dtype=torch.int64)
loss = ce_loss(outputs, targets)
这会导致错误:

ValueError: Expected input batch_size (1) to match target batch_size (3).
什么是错误的?目标批次大小(3)来自哪里

更新1

根据我对PyTorch docs的理解,我尝试了以下案例。请指出我错在哪里

例1:

outputs = torch.tensor([[1,1]], dtype=float)
targets = torch.tensor([1], dtype=torch.int64)
loss = ce_loss(outputs, targets)
输出:

loss: 0.6931471805599453
问题:

1) 我有一个等于1的类和两个关于这个类的预测,每个都等于1,对吗

2) 为什么非零损失

例2:

outputs = torch.tensor([[1]], dtype=float)
targets = torch.tensor([1], dtype=torch.int64)
loss = ce_loss(outputs, targets)
错误:

IndexError: Target 1 is out of bounds.
问题:

1) 我有一个类等于1,这个类的一个预测等于1,对吗

2) 为什么索引错误

例3:

outputs = torch.tensor([[1,1],[2,2]], dtype=float)
targets = torch.tensor([1, 2], dtype=torch.int64)
loss = ce_loss(outputs, targets)
错误:

IndexError: Target 2 is out of bounds.
问题:

1) 我有两个等于1和2的类,这两个类的预测分别等于1和2(批量大小=2),对吗

2) 为什么索引错误

---更多问题:----

对于以下情况,输出和目标应具有什么形状:

1) 二元分类,一个时间步长,一个输出神经元预测一个值,批量大小=1

2) 二元分类,五个不同的时间步,一个输出神经元预测的5个值,批量大小=5

3) 七类,一个时间步长,7个输出神经元预测的7个值,批量大小=1


4) 7个输出神经元预测7个类、5个不同的时间步、5组7个值,批量大小=5

您的
输出包含1个批次(1个样本):

另一方面,您的
目标包含3个类,对应于3个批次(3个样本)

您应该只在
输出中传递与样本对应的一个目标标签,例如

targets = torch.tensor([1], dtype=torch.int64)
阅读有关传递给CrossEntropy的输入的更多信息。

谢谢,请参阅我问题的更新1。
targets = torch.tensor([1], dtype=torch.int64)