softmax与交叉熵损失

softmax:

在这里插入图片描述

import torch
import numpy as np

#softmax
def softmax(input):

    sum = np.sum([torch.exp(i) for i in input])
    softmax_out = [torch.exp(i)/sum for i in input]
    return softmax_out

input = torch.tensor([1,2,3],dtype=torch.float32)
L = softmax(input)
print(L)

[tensor(0.0900), tensor(0.2447), tensor(0.6652)]

交叉熵损失函数:

在这里插入图片描述

import torch
from torch import nn

model_out = torch.tensor([[1,2,3],
                          [4,5,6]],requires_grad=True,dtype=torch.float32)

#类别
y = torch.tensor(
    [0,2]
)

ce_mean = nn.CrossEntropyLoss(reduction='mean')
loss = ce_mean(model_out,y)
print(loss)
loss.backward()

#softmax
softmax = torch.softmax(model_out,dim=1)
print("q(x):",softmax)
log_model_out = torch.log(softmax)
#-log(q(x))
log_model_out_softmax = -log_model_out
print("-log(q(x))",log_model_out_softmax)
#CrossEntropyLoss
#-∑(p(x)log(q(x))) 
#2.4076 + 0.4076
CEL_Sum = log_model_out_softmax[0][0] + log_model_out_softmax[1][2]
CEL_Mean = CEL_Sum / 2
print("crossentropy_mean:",CEL_Mean)
CEL_Mean.backward()
tensor(1.4076, grad_fn=<NllLossBackward0>)
q(x): tensor([[0.0900, 0.2447, 0.6652],
        [0.0900, 0.2447, 0.6652]], grad_fn=<SoftmaxBackward0>)
-log(q(x)) tensor([[2.4076, 1.4076, 0.4076],
        [2.4076, 1.4076, 0.4076]], grad_fn=<NegBackward0>)
crossentropy_mean: tensor(1.4076, grad_fn=<DivBackward0>)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值