Pytorch Pytork无交叉熵小批量
我试图构建一个简单的示例,其中包含零交叉熵,有三个类,minibatch size=1: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_
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)