损失函数CrossEntropy:理解

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文档里的公式不够细致。

loss= (\sum_{i}^{m}(-x[class[i]]+ln(\sum_{j}^{n}exp(x[j])))))/m

其中,m, n分别是input的行列数。

需要对pytorch中公式补充的是,(1)loss默认是input的每一行计算loss求均值,其实还有'sum'选项,这个是可以在参数里设置的;(2)log其实是ln而不是log10。

就这些啦!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值