pytroch中的交叉熵

今天上午心情起伏很大,本以为找到了代码中的错误,结果发现并不是这么回事。
第一,看了几篇博客发现,分类问题的标签应该用one hot(独热码),而我一直用的是普通数字(我的项目一共是四分类,所以用的是0,1,2,3)。本来想着赶紧回去改,幸好又看到一偏博客说pytorch在计算交叉熵时回自动将结果转换成one hot编码再计算。将信将疑的我去用代码验证了一下,发现的确如此,所以并不需要修改这个啦。(而且如果你想用独热码的向量作为标签pytorch好像还不支持,好像只支持一维的)

第二,我的cnn输出并没有加softmax层。本来想加上,又看到一篇博客说加和不加算出来的结果是一样的。于是我又去验证了一下。发现直接用全连接层输出计算和加F.softmax()计算出的值是不一样的,但和F.log_softmax()计算结果相等,所以可以理解为是默认加了log_softmax()层。

log_softmax验证:

a=torch.tensor([[ 0.0189,  0.1621, -0.1308, -0.1770]])
label=torch.tensor([2])
b=F.log_softmax(a,dim=1)
print(b)
l=loss(a,label)
l2=loss(b,label)
print(l)
print(l2)
tensor([[-1.3447, -1.2015, -1.4944, -1.5406]])
tensor(1.4944)
tensor(1.4944)

one hot验证:1到0的距离等于1到3的距离

a=torch.tensor([[0.1, 0.7, 0.1,0.1]])
label=torch.tensor([1])
label2=torch.tensor([3])
label3=torch.tensor([0])

l1=loss(a,label)
l2=loss(a,label2)
l3=loss(a,label3)
print(l1)
print(l2)
print(l3)

```python
tensor(0.9732)
tensor(1.5732)
tensor(1.5732)

如果labe=4会报错 out of bound,说明四分类的标签只能是0,1,2,3而不能是1,2,3,4。

最后,小白表示,如有错误请各位包涵!也请各位前辈不吝赐教!谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值