pytorch 交叉熵计算中的数组操作

这段代码计算交差熵的代码分析:
def cross_entropy(y_hat, y):
    return -torch.log(y_hat[list(range(len(y_hat))), y]).mean()
cross_entropy(y_hat, y)

分类操作利用one-hot编码,如一个正确的分类P用[0,0,1]等方式表示,预测该利率用Q表示[0.2,0.4,0.4],那么,

PlogQ = 0*log0.2+0*log0.4+1*log0.4 表示。

-torch.log(y_hat[list(range(len(y_hat))), y]).mean()中的参数部分可认为是利用上面方式查找非零对应的项,如:

y = torch.tensor([0, 2])
y_hat = torch.tensor([[0.1, 0.3, 0.6], [0.3, 0.2, 0.5]])
y_hat[[0, 1], y] 

-> y_hat[[0, 1], [0,2]] 
输出:tensor([0.1000, 0.5000])

y_hat[[0, 1], y],前面[0,1]可理解为在y_hat[0]和y_hat[1]中的数据,[0,2]分别对应前面两个张量中对应的编号。

#0.1是y_hat[0]在[0.1,0.3,0.6]里第y[0] 0.5是y_hat[1]在[0.3,0.,0.5]里第y[2]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值