CrossEntropy(交叉熵)损失函数,我看了pytorch的文档里的公式也还是不能充分理解究竟是怎么计算的,所以呢,我就用简单的数值例自己根据公式编个几句程序,终于搞懂了。
首先,贴个图,看下pytorch的文档里是怎么说的。
就是上面这个公式。
下面是我的数值例
import torch
import torch.nn as nn
import numpy as np
input = torch.tensor([[1,2,3],[1,4,5]]) #输入数据
target = torch.tensor([[0,1]]) #数据标签
target=target.reshape(2) #reshape成大小为2而不是1*2的tensor
#不然会报错“ValueError: Expected input batch_size (2) to match target batch_size (1).”
input = input.double() #input需要时double型,
# 不然会报错“RuntimeError: log_softmax_forward is not implemented for type torch.LongTensor”
loss = nn.CrossEntropyLoss() #用torch中的CrossEntropyLoss函数计算
y= loss(input,target)
print(y)
print(-1+np.log(np.exp(1)+np.exp(2)+np.exp(3))) #这是我的公式
print(-4+np.log(np.exp(1)+np.exp(4)+np.exp(5)))
得到的结果是下面这个
所以咧,pytorch文档里的公式不够细致。
其中,m, n分别是input的行列数。
需要对pytorch中公式补充的是,(1)loss默认是input的每一行计算loss求均值,其实还有'sum'选项,这个是可以在参数里设置的;(2)log其实是ln而不是log10。
就这些啦!