pytorch CrossEntropyLoss 学习

class torch.nn.CrossEntropyLoss(weight=None,size_average=None,ignore_index=-100,reduce=None,reduction='elementwise_mean')

功能:
       将输入经过softmax激活函数之后,再计算其与target的交叉熵损失。即该方法将nn.LogSoftmax()nn.NLLLoss()进行了结合。严格意义上的交叉损失函数应该是nn.NLLLoss()

        交叉熵损失(cross-entropy Loss)又称为对数似然损失(Log-likelihood loss),对数损失;二分类时还可以称之为逻辑斯碲回归损失。交叉熵损失函数表达式为L=-sigama(y_ilog(x_i))。PyTorch先将input经过softmax激活函数,将向量"归一化"成概率形式,然后再与target计算严格意义上交叉熵损失。


      在多分类任务中,经常采用softmax激活函数+交叉熵损失函数,因为交叉熵描述了两个概率分布的差异,然而神经网络输出的是向量,并不是概率分布的形式。所以需要softmax激活函数将一个向量进行"归一化"成概率分布的形式。所以需要softmax激活函数将一个向量进行"归一化"成概率分布的形式,再采用交叉熵损失函数计算Loss。PyTorch的CrossEntropyLoss(),则是将nn.LogSoftmax()nn.NLLLoss()进行了结合,nn.LogSoftmax()相当于激活函数,nn.NLLLoss()是损失函数,将其结合,所以我认为该函数应该叫做softmax+交叉熵损失函数。

实例:

import torch
import torch.nn as nn
import numpy as np
entroy = nn.CrossEntropyLoss()
input = torch.Tensor([[-0.7715,-0.6205,-0.2562]])
target = torch.tensor([0])
output = entroy(input,target)
print(output) #采用CrossEntropyLoss计算的结果。
myselfout = -(input[:,0])+np.log(np.exp(input[:,0])+np.exp(input[:,1])+np.exp(input[:,2])) #自己带公式计算的结果
print(myselfout)
lsf = nn.LogSoftmax()
loss = nn.NLLLoss()
lsfout = lsf(input)
lsfnout = loss(lsfout,target)
print(lsfnout)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值