pytorch常用损失函数--CrossEntropyLoss(交叉损失熵函数)

一.函数原理简介:
cross_entroy_loss(x, target):
x为torch.Size([m, classes_sum]),target为一维的tensor,维度为torch.Size([classes_sum])
target必须为long类型,x为float类型

softmax–>logsoftmax–>NLLLoss
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

二.代码直观演示:

'''
步骤:
one-hot编码
softmax求解
logsoftmax求解
NLLLoss求解
'''
def cross_entroy_loss(x, target):
    rows = x.size(0)
    cols = x.size(1)
    one_hot =torch.zeros((rows, cols))
    for i in range(len(target)):
        cols = target[i]
        one_hot[i][cols] = 1

    #下面一句
    '''
    torch.sum(torch.exp(x), dim = 1).reshape(-1,1)
    torch.sum(torch.exp(x), dim = 1)本身得到的是(1, 5)维度的数据
    将torch.exp(x)的每一列求和之后并将其变为(5,1)维度的数据
    '''
    #先进行softmax运算:
    '''
    softmax = e(xi) / sum(e(xi))#对每行进行操作,即每行的值加起来为1
    '''
    #再进行logsoftmax
    '''
    logsoftmax = log(softmax)
    '''
    #最后进行NLLLoss
    '''
    Nllloss = -1/N * (onehot * logsoftmax) #N代表target.shape[0]
    '''
    softmax = torch.exp(x) / torch.sum(torch.exp(x), dim = 1).reshape(-1,1)
    logsoftmax = torch.log(softmax)
    nllloss = - torch.sum(one_hot * logsoftmax) / target.shape[0]
    CrossEntroyLoss_value = nllloss

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值