交叉熵损失函数是什么?

Python016

交叉熵损失函数是什么?,第1张

平滑函数

交叉熵损失函数,也称为对数损失或者logistic损失。当模型产生了预测值之后,将对类别的预测概率与真实值(由0或1组成)进行不比较,计算所产生的损失,然后基于此损失设置对数形式的惩罚项。

在神经网络中,所使用的Softmax函数是连续可导函数,这使得可以计算出损失函数相对于神经网络中每个权重的导数(在《机器学习数学基础》中有对此的完整推导过程和案例,这样就可以相应地调整模型的权重以最小化损失函数。

扩展资料:

注意事项:

当预测类别为二分类时,交叉熵损失函数的计算公式如下图,其中y是真实类别(值为0或1),p是预测类别的概率(值为0~1之间的小数)。

计算二分类的交叉熵损失函数的python代码如下图,其中esp是一个极小值,第五行代码clip的目的是保证预测概率的值在0~1之间,输出的损失值数组求和后,就是损失函数最后的返回值。

参考资料来源:百度百科-交叉熵

参考资料来源:百度百科-损失函数

1、torch.cat(inputs, dim=0) ->Tensor 

参考链接:

[Pytorch] 详解 torch.cat()

Pytorch学习笔记(一):torch.cat()模块的详解

函数作用:cat 是 concatnate 的意思:拼接,联系在一起。在给定维度上对输入的 Tensor 序列进行拼接操作。torch.cat 可以看作是 torch.split 和 torch.chunk 的反操作

参数:

inputs(sequence of Tensors):可以是任意相同类型的 Tensor 的 python 序列

dim(int, optional):defaults=0

dim=0: 按列进行拼接 

dim=1: 按行进行拼接

dim=-1: 如果行和列数都相同则按行进行拼接,否则按照行数或列数相等的维度进行拼接

假设 a 和 b 都是 Tensor,且 a 的维度为 [2, 3],b 的维度为 [2, 4],则

torch.cat((a, b), dim=1) 的维度为 [2, 7]

2、torch.nn.CrossEntropyLoss()

函数作用:CrossEntropy 是交叉熵的意思,故而 CrossEntropyLoss 的作用是计算交叉熵。CrossEntropyLoss 函数是将 torch.nn.Softmax 和 torch.nn.NLLLoss 两个函数组合在一起使用,故而传入的预测值不需要先进行 torch.nnSoftmax 操作。

参数:

input(N, C):N 是 batch_size,C 则是类别数,即在定义模型输出时,输出节点个数要定义为 [N, C]。其中特别注意的是 target 的数据类型需要是浮点数,即 float32

target(N):N 是 batch_size,故 target 需要是 1D 张量。其中特别注意的是 target 的数据类型需要是 long,即 int64

例子:

loss = nn.CrossEntropyLoss()

input = torch.randn(3, 5, requires_grad=True, dtype=torch.float32)

target = torch.empty(3, dtype=torch.long).random_(5)

output = loss(input, target)

output

输出为:

tensor(1.6916, grad_fn=<NllLossBackward>)