cross_entropy、binary_cross_entropy、binary_cross_entropy_with_logits

cross_entropy

原理

函数具体介绍参考torch.nn.functional.cross_entropy使用
交叉熵的计算参考交叉熵损失(Cross Entropy Loss)计算过程

实例

code

z = torch.tensor([[1,2],[1,4]],dtype=float)  # input tensor
y = torch.tensor([0,1])
print(z)
print(y)

loss1 = torch.nn.functional.cross_entropy(z,y)
print(loss1)

output
tensor([[1., 2.],
[1., 4.]], dtype=torch.float64)
tensor([0, 1])
tensor(0.6809, dtype=torch.float64)

计算过程

− [ l n ( e e + e 2 ) + l n ( e 4 e + e 4 ) ] / 2 = 0.6809 -[ln(\frac{e}{e+e^2})+ln(\frac{e^4}{e+e^4})]/2 = 0.6809 [ln(e+e2e)+ln(e+e4e4)]/2=0.6809

binary_cross_entropy

原理

默认做二分类,将模型输出z和理想输出x的每个元素当作是一个二分类的结果,然后计算交叉熵(在该函数中,z的每个元素的范围是[0,1],y没有限制,但理论上y应该在[0,1]之间。z和y可以是任意维数的,但必须形状相同。)

实例

code

z = torch.ones(3,2)*0.8  # input tensor
y = torch.ones(3,2)*0.4
print(z)
print(y)

loss2 = torch.nn.functional.binary_cross_entropy(z, y)
print(loss2)

output

tensor([[0.8000, 0.8000],
[0.8000, 0.8000],
[0.8000, 0.8000]])
tensor([[0.4000, 0.4000],
[0.4000, 0.4000],
[0.4000, 0.4000]])
tensor(1.0549)

计算过程

− ( 0.4 ∗ l n ( 0.8 ) + 0.6 ∗ l n ( 1 − 0.8 ) ) ∗ 2 ∗ 3 / ( 2 ∗ 3 ) = 1.0549 -(0.4*ln(0.8)+0.6*ln(1-0.8))*2*3/(2*3)=1.0549 (0.4ln(0.8)+0.6ln(10.8))23/(23)=1.0549

binary_cross_entropy_with_logits

原理

默认做二分类,将模型输出z做sigmoid后和理想输出x的每个元素当作是一个二分类的结果,然后计算交叉熵(在该函数中,由于z的每个元素是做完sigmoid后再做交叉熵,因此没有值的范围限制,y也没有,但理论上y应该在[0,1]之间。z和y可以是任意维数的,但必须形状相同。)

实例

code

z = torch.ones(3,2)*0.8  # input tensor
y = torch.ones(3,2)*0.4
print(z)
print(y)

loss3 = torch.nn.functional.binary_cross_entropy_with_logits(z, y,reduction='sum')
print(loss3)

output

tensor([[0.8000, 0.8000],
[0.8000, 0.8000],
[0.8000, 0.8000]])
tensor([[0.4000, 0.4000],
[0.4000, 0.4000],
[0.4000, 0.4000]])
tensor(5.1066)

计算过程

− ( 0.4 ∗ l n ( s i g m o i d ( 0.8 ) ) + 0.6 ∗ l n ( 1 − s i g m o i d ( 0.8 ) ) ) ∗ 2 ∗ 3 = 5.1066 -(0.4*ln(sigmoid(0.8))+0.6*ln(1-sigmoid(0.8)))*2*3 = 5.1066 (0.4ln(sigmoid(0.8))+0.6ln(1sigmoid(0.8)))23=5.1066

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值