(快速搞懂)Pytorch中的nan和inf有什么区别?

文章目录


我们发现,有的时候,我们使用torch计算一通之后,有的时候得到的是nan,有的时候得到的inf,这是什么鬼?

nan

开门见山,nan不是一个数字,因此没有正负概念,和其他数字比较也没有意义。产生原因:定义域出错。如下:

例子1:

a=torch.tensor([-0.1])
torch.log(a)#log不能对负数操作,定义域越界。

tensor([nan])

例子2:

a=torch.tensor([1.1])
torch.arctanh(a)#反双曲正切定义域为[-1,1]

tensor([nan])

注意:nan由于不是数字,因此任何后续数学运算都会是nan。

inf

inf是一个数字,表示正无穷大,相应的,有-inf。由于是数字,所以可以和其他数字比较大小。产生原因:数字太大,计算机无法表示。

例子1:

a=torch.tensor([100])
torch.exp(a)

tensor([inf])

例子2:

a=torch.tensor([1e-100])
torch.log(a)

tensor([-inf])

注意,其是一个数字,因此,可以作为一个数字继续参与后续运算。

a=torch.tensor([1e100])
b=torch.exp(a)#inf
torch.sigmoid(b)

成功,大家可以试一试,如果b为nan是无法参加后续运算的。

tensor([1.])

补充

偶然发现,除了定义域,nan还有可能有其他产生方式,例如:

a=torch.log((torch.tensor([1e-100])))
a

tensor([-inf])

然后再继续乘以0,就会是nan:

a*0

tensor([nan])

我想,这应该才是为什么我们训练模型的时候,有的时候会nan的原因:其实是先有了inf。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

音程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值