关于nan的大小判定规则

技术背景

在Numpy或PyTorch框架编程的过程中,如果有计算异常,可能会存在NAN这样的一个东西,也就是not a number。这不是一个常规的数字,但是也可以参与计算,例如加和、比较等等。本文通过一个简单的示例,展示一下PyTorch框架下,NAN的计算规则。

代码示例

如下是一个简单的示例:

In [1]: import torch as tc

In [2]: tc.nan
Out[2]: nan

In [3]: a = tc.tensor([0., 1.0, tc.nan])

In [4]: a
Out[4]: tensor([0., 1., nan])

In [5]: a.max()
Out[5]: tensor(nan)

In [6]: a.min()
Out[6]: tensor(nan)

In [7]: a.sum()
Out[7]: tensor(nan)

In [8]: b = a - tc.nan

In [9]: b
Out[9]: tensor([nan, nan, nan])

我们可以直接用torch.nan来定义一个NAN的数。然后这个NAN在计算过程中,不论是取最大值还是最小值,都会取到NAN。如果另外一个数跟NAN做四则运算,得到的结果也是NAN,这就是NAN的基本运算规则。

NAN的产生

如果我们直接使用1/0这样的形式去计算,得到的结果会是inf而不是NAN

In [1]: import torch as tc

In [2]: a = tc.zeros(1)

In [3]: b = tc.ones(1)

In [4]: c=b/a

In [5]: c
Out[5]: tensor([inf])

实际上出现NAN时,只有两种可能的情况:0/0inf/inf

In [1]: import torch as tc

In [2]: a = tc.zeros(1)

In [3]: b = tc.zeros(1)

In [4]: a/b
Out[4]: tensor([nan])

In [5]: b[0]=1

In [6]: a/b
Out[6]: tensor([0.])

In [7]: b/a
Out[7]: tensor([inf])

In [8]: (b/a)/(b/a)
Out[8]: tensor([nan])

那么就可以通过这样的规则,去排除一下是计算的哪个步骤出现了问题。

总结概要

本文通过几个简单的代码示例,展示了一下NAN在PyTorch框架下形成的原因。通过了解这个原因和规则,有助于解决在深度学习开发和训练过程中出现的NAN的问题。

版权声明

本文首发链接为:https://www.cnblogs.com/dechinphy/p/tc-nan.html

作者ID:DechinPhy

更多原著文章请参考:https://www.cnblogs.com/dechinphy/

打赏专用链接:https://www.cnblogs.com/dechinphy/gallery/image/379634.html

腾讯云专栏同步:https://cloud.tencent.com/developer/column/91958

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值