交叉熵损失计算示例
交叉熵损失公式
其中y为label,p^为预测的正类别概率,即在二分类中通过sigmoid函数得出的正类别概率大小。
举例:
criterion = nn.CrossEntropyLoss()
input = torch.randn(3, 5, requires_grad=True)
target = torch.empty(3, dtype=torch.long).random_(5)
loss = criterion(input, target)
上述代码即为求交叉熵损失的示例,输入为随机生成的三个具有5个标签的样本,目标标签为同样随机生成的3个具有唯一正确标签的样本,loss即为函数torch.nn.CrossEntropyLoss()求得的交叉熵损失。
torch.nn.CrossEntropyLoss()内的核心代码如下:
```
batch_loss = 0.
for i in range(input.shape[0]): # 遍历样本数
numerator = np.exp(input[i, target[i]]) # 对每个目标标签求指数
denominator = np.sum(np.exp(input[i, :])) # 每个目标标签所在样本总体指数之和
loss = -np.log(numerator / denominator) # 损失函数对数公式
batch_loss += loss # 所有样本损失之和
```
其中,公式中损失函数只有对数log(numerator / denominator)原因是,其他标签默认系数为0,因此代码中省略,因此代码也可写成如下:
```
for i in range(input.shape[0]):
Loss[i]=-input[i, target[i]+sum(math.exp(input[i][:]))
loss = sum(Loss)
```