!26833 add chinese api of probability

Merge pull request !26833 from byweng/master
This commit is contained in:
i-robot 2021-12-01 12:28:25 +00:00 committed by Gitee
commit 37cb0b7561
23 changed files with 1836 additions and 0 deletions

View File

@ -0,0 +1,88 @@
Class mindspore.nn.probability.bijector.Bijector(is_constant_jacobian=False, is_injective=True, name=None, dtype=None, param=None)
Bijector类。
参数:
is_constant_jacobian (bool)Bijector是否具有常数导数。默认值False。
is_injective (bool)Bijector是否为一对一映射。默认值True。
name (str)Bijector名称。默认值None。
dtype (mindspore.dtype)Bijector可以操作的分布的数据类型。默认值None。
param (dict)用于初始化Bijector的参数。默认值None。
支持平台:
``Ascend`` ``GPU``
注:
Bijector的`dtype`为None时输入值必须是float类型除此之外没有其他强制要求。在初始化过程中当`dtype`为None时对参数的数据类型没有强制要求。但所有参数都应具有相同的float类型否则将引发TypeError。
具体来说,参数类型跟随输入值的数据类型,即当`dtype`为None时Bijector的参数将被强制转换为与输入值相同的类型。
当指定了`dtype`时,参数和输入值的`dtype`必须相同。
当参数类型或输入值类型与`dtype`不相同时将引发TypeError。只能使用mindspore的float数据类型来指定Bijector的`dtype`。
cast_param_by_value(value, para)
将Bijector的参数para的数据类型转换为与value相同的类型。
参数:
value (Tensor):输入数据。
para (Tensor)Bijector参数。
construct(name, *args, **kwargs)
重写Cell中的`construct`。
注:
支持的函数包括:
'forward'、'inverse'、'forward_log_jacobian'、'inverse_log_jacobian'。
参数:
name (str):函数名称。
*args (list):函数所需的位置参数列表。
**kwargs (dict):函数所需的关键字参数字典。
forward(value, *args, **kwargs)
正变换:将输入值转换为另一个分布。
参数:
value (Tensor):输入。
*args (list):函数所需的位置参数列表。
**kwargs (dict):函数所需的关键字参数字典。
forward_log_jacobian(value, *args, **kwargs)
对正变换导数取对数。
参数:
value (Tensor):输入。
*args (list):函数所需的位置参数列表。
**kwargs (dict):函数所需的关键字参数字典。
inverse(value, *args, **kwargs)
逆变换:将输入值转换回原始分布。
参数:
value (Tensor):输入。
*args (list):函数所需的位置参数列表。
**kwargs (dict):函数所需的关键字参数字典。
inverse_log_jacobian(value, *args, **kwargs)
对逆变换的导数取对数。
参数:
value (Tensor):输入。
*args (list):函数所需的位置参数列表。
**kwargs (dict):函数所需的关键字参数字典。
shape_mapping(shape)
映射shape。
参数:
shape (tuple)Tensor的形状。

View File

@ -0,0 +1,35 @@
Class mindspore.nn.probability.bijector.Exp(name='Exp')
指数BijectorExponential Bijector
此Bijector执行如下操作
.. math::
Y = \exp(x).
参数:
name (str)Bijector名称。默认值'Exp'。
支持平台:
``Ascend`` ``GPU``
示例:
>>> import mindspore
>>> import mindspore.nn as nn
>>> from mindspore import Tensor
>>>
>>> # 初始化指数Bijector。
>>> exp_bijector = nn.probability.bijector.Exp()
>>> value = Tensor([1, 2, 3], dtype=mindspore.float32)
>>> ans1 = exp_bijector.forward(value)
>>> print(ans1.shape)
(3,)
>>> ans2 = exp_bijector.inverse(value)
>>> print(ans2.shape)
(3,)
>>> ans3 = exp_bijector.forward_log_jacobian(value)
>>> print(ans3.shape)
(3,)
>>> ans4 = exp_bijector.inverse_log_jacobian(value)
>>> print(ans4.shape)
(3,)

View File

@ -0,0 +1,49 @@
Class mindspore.nn.probability.bijector.GumbelCDF(loc=0.0, scale=1.0, name='GumbelCDF')
GumbelCDF Bijector。
此Bijector执行如下操作
.. math::
Y = \exp(-\exp(\frac{-(X - loc)}{scale}))
参数:
loc (float, list, numpy.ndarray, Tensor)位移因子即上述公式中的loc。默认值0.0。
scale (float, list, numpy.ndarray, Tensor)比例因子即上述公式中的scale。默认值1.0。
name (str)Bijector名称。默认值'GumbelCDF'。
支持平台:
``Ascend`` ``GPU``
注:
`scale`必须大于零。
对于`inverse`和`inverse_log_jacobian`,输入应在(0, 1)范围内。
`loc`和`scale`的数据类型必须为float。
如果`loc`、`scale`作为numpy.ndarray或Tensor传入则它们必须具有相同的数据类型否则将引发错误。
异常:
TypeError`loc`或`scale`的数据类型不为float或`loc`和`scale`的数据类型不相同。
示例:
>>> import mindspore
>>> import mindspore.nn as nn
>>> import mindspore.nn.probability.bijector as msb
>>> from mindspore import Tensor
>>>
>>> # 初始化GumbelCDF Bijectorloc设置为1.0和scale设置为2.0。
>>> gumbel_cdf = msb.GumbelCDF(1.0, 2.0)
>>> # 在网络中使用ScalarAffinebijector。
>>> x = Tensor([1, 2, 3], dtype=mindspore.float32)
>>> y = Tensor([0.1, 0.2, 0.3], dtype=mindspore.float32)
>>> ans1 = gumbel_cdf.forward(x)
>>> print(ans1.shape)
(3,)
>>> ans2 = gumbel_cdf.inverse(y)
>>> print(ans2.shape)
(3,)
>>> ans3 = gumbel_cdf.forward_log_jacobian(x)
>>> print(ans3.shape)
(3,)
>>> ans4 = gumbel_cdf.inverse_log_jacobian(y)
>>> print(ans4.shape)
(3,)

View File

@ -0,0 +1,66 @@
Class mindspore.nn.probability.bijector.Invert(bijector, name='')
反转BijectorInvert Bijector计算输入Bijector的反函数。
参数:
Bijector (Bijector)基础BijectorBase Bijector
name (str)Bijector名称。默认值""。当name设置为""时,它实际上是'Invert' + Bijector.name。
支持平台:
``Ascend`` ``GPU``
示例:
>>> import numpy as np
>>> import mindspore
>>> import mindspore.nn as nn
>>> import mindspore.nn.probability.bijector as msb
>>> from mindspore import Tensor
>>> class Net(nn.Cell):
... def __init__(self):
... super(Net, self).__init__()
... self.origin = msb.ScalarAffine(scale=2.0, shift=1.0)
... self.invert = msb.Invert(self.origin)
...
... def construct(self, x_):
... return self.invert.forward(x_)
>>> forward = Net()
>>> x = np.array([2.0, 3.0, 4.0, 5.0]).astype(np.float32)
>>> ans = forward(Tensor(x, dtype=mindspore.float32))
>>> print(ans.shape)
(4,)
bijector
返回基础Bijector。
forward(x)
逆变换:将输入值转换回原始分布。
参数:
x (Tensor):输入。
forward_log_jacobian(x)
逆变换导数的对数。
参数:
x (Tensor):输入。
inverse(y)
正变换:将输入值转换为另一个分布。
参数:
y (Tensor):输入。
inverse_log_jacobian(y)
正变换导数的对数。
参数:
y (Tensor):输入。

View File

@ -0,0 +1,49 @@
Class mindspore.nn.probability.bijector.PowerTransform(power=0.0, name='PowerTransform')
乘方BijectorPower Bijector
此Bijector执行如下操作
.. math::
Y = g(X) = (1 + X * c)^{1 / c}, X >= -1 / c
其中幂c >= 0。
Power Bijector将输入从`[-1/c, inf]`映射到`[0, inf]`。
当`c=0`时此Bijector等于Exp Bijector。
参数:
power (float, list, numpy.ndarray, Tensor)比例因子。默认值0。
name (str)Bijector名称。默认值'PowerTransform'。
支持平台:
``Ascend`` ``GPU``
注:
`power`的数据类型必须为float。
异常:
ValueError`power`小于0或静态未知。
TypeError`power`的数据类型不是float。
示例:
>>> import mindspore
>>> import mindspore.nn as nn
>>> import mindspore.nn.probability.bijector as msb
>>> from mindspore import Tensor
>>> # 初始化PowerTransform Bijector。
>>> powertransform = msb.PowerTransform(0.5)
>>> value = Tensor([1, 2, 3], dtype=mindspore.float32)
>>> ans1 = powertransform.forward(value)
>>> print(ans1.shape)
(3,)
>>> ans2 = powertransform.inverse(value)
>>> print(ans2.shape)
(3,)
>>> ans3 = powertransform.forward_log_jacobian(value)
>>> print(ans3.shape)
(3,)
>>> ans4 = powertransform.inverse_log_jacobian(value)
>>> print(ans4.shape)
(3,)

View File

@ -0,0 +1,46 @@
Class mindspore.nn.probability.bijector.ScalarAffine(scale=1.0, shift=0.0, name='ScalarAffine')
标量仿射BijectorScalar Affine Bijector
此Bijector执行如下操作
.. math::
Y = a * X + b
其中a是比例因子b是移位因子。
参数:
scale (float, list, numpy.ndarray, Tensor)比例因子。默认值1.0。
shift (float, list, numpy.ndarray, Tensor)移位因子。默认值0.0。
name (str)Bijector名称。默认值'ScalarAffine'。
支持平台:
``Ascend`` ``GPU``
注:
`shift`和`scale`的数据类型必须为float。
如果`shift`、`scale`作为numpy.ndarray或Tensor传入则它们必须具有相同的数据类型否则将引发错误。
异常:
TypeError`shift`或`scale`的数据类型不为float或`shift`和`scale`的数据类型不相同。
示例:
>>> import mindspore
>>> import mindspore.nn as nn
>>> from mindspore import Tensor
>>>
>>> # 初始化ScalarAffine Bijectorscale设置为1.0shift设置为2.0。
>>> scalaraffine = nn.probability.bijector.ScalarAffine(1.0, 2.0)
>>> value = Tensor([1, 2, 3], dtype=mindspore.float32)
>>> ans1 = scalaraffine.forward(value)
>>> print(ans1.shape)
(3,)
>>> ans2 = scalaraffine.inverse(value)
>>> print(ans2.shape)
(3,)
>>> ans3 = scalaraffine.forward_log_jacobian(value)
>>> print(ans3.shape)
()
>>> ans4 = scalaraffine.inverse_log_jacobian(value)
>>> print(ans4.shape)
()

View File

@ -0,0 +1,46 @@
Class mindspore.nn.probability.bijector.Softplus(sharpness=1.0, name='Softplus')
Softplus Bijector。
此Bijector执行如下操作
.. math::
Y = \frac{\log(1 + e ^ {kX})}{k}
其中k是锐度因子。
参数:
sharpness (float, list, numpy.ndarray, Tensor)锐度因子上述公式中的k。默认值1.0。
name (str)Bijector名称。默认值'Softplus'。
支持平台:
``Ascend`` ``GPU``
注:
`sharpness`的数据类型必须为float。
异常:
TypeErrorsharpness的数据类型不为float。
示例:
>>> import mindspore
>>> import mindspore.nn as nn
>>> import mindspore.nn.probability.bijector as msb
>>> from mindspore import Tensor
>>>
>>> # 初始化Softplus Bijectorsharpness设置为2.0。
>>> softplus = msb.Softplus(2.0)
>>> # 在网络中使用ScalarAffine Bijector。
>>> value = Tensor([1, 2, 3], dtype=mindspore.float32)
>>> ans1 = softplus.forward(value)
>>> print(ans1.shape)
(3,)
>>> ans2 = softplus.inverse(value)
>>> print(ans2.shape)
(3,)
>>> ans3 = softplus.forward_log_jacobian(value)
>>> print(ans3.shape)
(3,)
>>> ans4 = softplus.inverse_log_jacobian(value)
>>> print(ans4.shape)
(3,)

View File

@ -0,0 +1,102 @@
Class mindspore.nn.probability.distribution.Bernoulli(probs=None, seed=None, dtype=mindspore.int32, name='Bernoulli')
伯努利分布Bernoulli Distribution
参数:
probs (float, list, numpy.ndarray, Tensor)结果是1的概率。默认值None。
seed (int)采样时使用的种子。如果为None则使用全局种子。默认值None。
dtype (mindspore.dtype)采样结果的数据类型。默认值mindspore.int32.
name (str):分布的名称。默认值:'Bernoulli'。
支持平台:
``Ascend`` ``GPU``
注:
`probs`必须是合适的概率0<p<1
示例:
>>> import mindspore
>>> import mindspore.nn as nn
>>> import mindspore.nn.probability.distribution as msd
>>> from mindspore import Tensor
>>> # 初始化伯努利分布probs设置为1。
>>> b1 = msd.Bernoulli(0.5, dtype=mindspore.int32)
>>> # 伯努利分布可以在没有参数的情况下初始化。
>>> # 在这种情况下,`probs`必须在函数调用过程中通过参数传入。
>>> b2 = msd.Bernoulli(dtype=mindspore.int32)
>>> # 下面是用于测试的Tensor
>>> value = Tensor([1, 0, 1], dtype=mindspore.int32)
>>> probs_a = Tensor([0.6], dtype=mindspore.float32)
>>> probs_b = Tensor([0.2, 0.3, 0.4], dtype=mindspore.float32)
>>>
>>> # 公共接口对应的概率函数的私有接口,包括`prob`、`log_prob`、`cdf`、`log_cdf`、`survival_function`、`log_survival`,它们具有相同的参数,如下所示。
>>> # 参数:
>>> # value (Tensor):要评估的值。
>>> # probs1 (Tensor)成功的概率。默认值self.probs.
>>> # 下面是调用`prob`的示例(通过将`prob`替换为函数的名称,可以对其他概率函数进行类似的调用):
>>> ans = b1.prob(value)
>>> print(ans.shape)
(3,)
>>> # 评估关于分布b的`prob`。
>>> ans = b1.prob(value, probs_b)
>>> print(ans.shape)
(3,)
>>> # `probs`必须在函数调用期间传入。
>>> ans = b2.prob(value, probs_a)
>>> print(ans.shape)
(3,)
>>>
>>> # 函数`mean`、`sd`、`var`和`entropy`具有相同的参数。
>>> # 参数:
>>> # probs1 (Tensor)成功的概率。默认值self.probs.
>>> # 下面是调用`mean的`示例。`sd`、`var`和`entropy`与`mean`类似。
>>> ans = b1.mean() # return 0.5
>>> print(ans.shape)
()
>>> ans = b1.mean(probs_b) # return probs_b
>>> print(ans.shape)
(3,)
>>> # `probs`必须在函数调用期间传入。
>>> ans = b2.mean(probs_a)
>>> print(ans.shape)
(1,)
>>>
>>> # `kl_loss`和`cross_entropy`的接口如下:
>>> # 参数:
>>> # dist (str):分布的名称。仅支持'Bernoulli'。
>>> # probs1_b (Tensor)分布b成功的概率。
>>> # probs1_a (Tensor)分布a成功的概率。默认值self.probs.
>>> # 下面是调用kl_loss的示例。`cross_entropy`也类似。
>>> ans = b1.kl_loss('Bernoulli', probs_b)
>>> print(ans.shape)
(3,)
>>> ans = b1.kl_loss('Bernoulli', probs_b, probs_a)
>>> print(ans.shape)
(3,)
>>> # 必须传入额外的`probs_a`。
>>> ans = b2.kl_loss('Bernoulli', probs_b, probs_a)
>>> print(ans.shape)
(3,)
>>>
>>> # `sample`示例。
>>> # 参数:
>>> # shape (tuple)样本的shape。默认值()。
>>> # probs1 (Tensor)成功的概率。默认值self.probs.
>>> ans = b1.sample()
>>> print(ans.shape)
()
>>> ans = b1.sample((2,3))
>>> print(ans.shape)
(2, 3)
>>> ans = b1.sample((2,3), probs_b)
>>> print(ans.shape)
(2, 3, 3)
>>> ans = b2.sample((2,3), probs_a)
>>> print(ans.shape)
(2, 3, 1)
probs
返回结果为1的概率。

View File

@ -0,0 +1,116 @@
Class mindspore.nn.probability.distribution.Beta(concentration1=None, concentration0=None, seed=None, dtype=mindspore.float32, name='Beta')
贝塔分布Beta Distribution
参数:
concentration1 (list, numpy.ndarray, Tensor)贝塔分布的alpha。
concentration0 (list, numpy.ndarray, Tensor)贝塔分布的beta。
seed (int)采样时使用的种子。如果为None则使用全局种子。默认值None。
dtype (mindspore.dtype)采样结果的数据类型。默认值mindspore.float32。
name (str):分布的名称。默认值:'Beta'。
支持平台:
``Ascend``
注:
`concentration1`和`concentration0`必须大于零。
`dtype`必须是float因为贝塔分布是连续的。
示例:
>>> import mindspore
>>> import mindspore.nn as nn
>>> import mindspore.nn.probability.distribution as msd
>>> from mindspore import Tensor
>>>
>>> # 初始化concentration1为3.0和concentration0为4.0的贝塔分布。
>>> b1 = msd.Beta([3.0], [4.0], dtype=mindspore.float32)
>>>
>>> # Beta分布可以在没有参数的情况下初始化。
>>> # 在这种情况下,`concentration1`和`concentration0`必须通过参数传入。
>>> b2 = msd.Beta(dtype=mindspore.float32)
>>> # 下面是用于测试的Tensor
>>> value = Tensor([0.1, 0.5, 0.8], dtype=mindspore.float32)
>>> c1_a = Tensor([2.0], dtype=mindspore.float32)
>>> c0_a = Tensor([2.0, 2.0, 2.0], dtype=mindspore.float32)
>>> c1_b = Tensor([1.0], dtype=mindspore.float32)
>>> c0_b = Tensor([1.0, 1.5, 2.0], dtype=mindspore.float32)
>>>
>>> # 公共接口对应的概率函数的私有接口(包括`prob`和`log_prob`)的参数相同,如下所示。
>>> # 参数:
>>> # value (Tensor):要评估的值。
>>> # concentration1 (Tensor)分布的concentration1。默认值self._concentration1。
>>> # concentration0 (Tensor)分布的concentration0。默认值self._concentration0。
>>> # 下面是`prob`的示例(通过将'prob'替换为函数的名称,可以对其他概率函数进行类似的调用):
>>> ans = b1.prob(value)
>>> print(ans.shape)
(3,)
>>> # 根据分布b进行评估。
>>> ans = b1.prob(value, concentration1_b, concentration0_b)
>>> print(ans.shape)
(3,)
>>> # 在函数调用期间必须传入`concentration1`和`concentration0`
>>> ans = b2.prob(value, concentration1=c1_a, concentration0=c0_a)
>>> print(ans.shape)
(3,)
>>>
>>> # 函数`mean`、`sd`、`mode`、`var`和`entropy`具有相同的参数。
>>> # 参数:
>>> # concentration1 (Tensor)分布的concentration1。默认值self._concentration1。
>>> # concentration0 (Tensor)分布的concentration0。默认值self._concentration0。
>>> # 下面是调研`mean`的示例(`sd`、`mode`、`var`和`entropy`的示例与`mean`相似):
>>> ans = b1.mean()
>>> print(ans.shape)
(1,)
>>> ans = b1.mean(concentration1=c1_b, concentration0=c0_b)
>>> print(ans.shape)
(3,)
>>> # `concentration1`和`concentration0`必须在函数调用期间传入。
>>> ans = b2.mean(concentration1=c1_a, concentration0=c0_a)
>>> print(ans.shape)
(3,)
>>>
>>> # 'kl_loss'和'cross_entropy'的接口相同:
>>> # 参数:
>>> # dist (str):分布的类型。仅支持"Beta"。
>>> # concentration1_b (Tensor)分布b的concentration1。
>>> # concentration0_b (Tensor)分布b的concentration0。
>>> # concentration1_a (Tensor)分布a的concentration1。
>>> # 默认值self._concentration1。
>>> # concentration0_a (Tensor)分布a的concentration0。
>>> # 默认值self._concentration0。
>>> # 下面是`kl_loss`示例(`cross_entropy`也类似):
>>> ans = b1.kl_loss('Beta', concentration1_b=c1_b, concentration0_b=c0_b)
>>> print(ans.shape)
(3,)
>>> ans = b1.kl_loss('Beta', concentration1_b=c1_b, concentration0_b=c0_b, concentration1_a=c1_a, concentration0_a=c0_a)
>>> print(ans.shape)
(3,)
>>>
>>> # `sample`示例。
>>> # 参数:
>>> # shape (tuple)样本的shape。默认值()
>>> # concentration1 (Tensor)分布的concentration1。默认值self._concentration1。
>>> # concentration0 (Tensor)分布的concentration0。默认值self._concentration0。
>>> ans = b1.sample()
>>> print(ans.shape)
(1,)
>>> ans = b1.sample((2,3))
>>> print(ans.shape)
(2, 3, 1)
>>> ans = b1.sample((2,3), concentration1=c1_b, concentration0=c0_b)
>>> print(ans.shape)
(2, 3, 3)
>>> ans = b2.sample((2,3), concentration1=c1_a, concentration0=c0_a)
>>> print(ans.shape)
(2, 3, 3)
concentration0
返回concentration0也称为贝塔分布的beta
concentration1
返回concentration1也称为贝塔分布的alpha

View File

@ -0,0 +1,83 @@
Class mindspore.nn.probability.distribution.Categorical(probs=None, seed=None, dtype=mindspore.int32, name='Categorical')
分类分布。
参数:
probs (Tensor, list, numpy.ndarray):事件概率。
seed (int)采样时使用的种子。如果为None则使用全局种子。默认值None。
dtype (mindspore.dtype)事件样例的类型。默认值mindspore.int32.
name (str)分布的名称。默认值Categorical。
支持平台:
``Ascend`` ``GPU``
注:
`probs`的秩必须至少为1值是合适的概率并且总和为1。
示例:
>>> import mindspore
>>> import mindspore.nn as nn
>>> import mindspore.nn.probability.distribution as msd
>>> from mindspore import Tensor
>>> # 初始化probs为[0.2, 0.8]的类别分布。
>>> ca1 = msd.Categorical(probs=[0.2, 0.8], dtype=mindspore.int32)
>>> # 类别分布可以在没有参数的情况下初始化。
>>> # 在这种情况下,`probs`必须在函数调用过程中通过参数传入。
>>> ca2 = msd.Categorical(dtype=mindspore.int32)
>>> # 下面是用于测试的Tensor
>>> value = Tensor([1, 0], dtype=mindspore.int32)
>>> probs_a = Tensor([0.5, 0.5], dtype=mindspore.float32)
>>> probs_b = Tensor([0.35, 0.65], dtype=mindspore.float32)
>>> # 公共接口所对应的概率函数的私有接口,包括`prob`、`log_prob`、`cdf`、`log_cdf`、`survival_function`、`log_survival`,如下所示。
>>> # 参数:
>>> # value (Tensor):要评估的值。
>>> # probs (Tensor)事件概率。默认值self.probs.
>>> # `prob`示例。
>>> # 通过将`prob`替换为函数的名称,可以对其他概率函数进行类似的调用。
>>> ans = ca1.prob(value)
>>> print(ans.shape)
(2,)
>>> # 评估关于分布b的`prob`。
>>> ans = ca1.prob(value, probs_b)
>>> print(ans.shape)
(2,)
>>> # `probs`必须在函数调用期间传入。
>>> ans = ca2.prob(value, probs_a)
>>> print(ans.shape)
(2,)
>>> # 函数`mean`、`sd`、`var`和`entropy`具有相同的参数。
>>> # 参数:
>>> # probs (Tensor)事件概率。默认值self.probs.
>>> # `mean`示例。`sd`、`var`和`entropy`是相似的。
>>> ans = ca1.mean() # return 0.8
>>> print(ans.shape)
(1,)
>>> ans = ca1.mean(probs_b)
>>> print(ans.shape)
(1,)
>>> # `probs`必须在函数调用期间传入。
>>> ans = ca2.mean(probs_a)
>>> print(ans.shape)
(1,)
>>> # `kl_loss`和`cross_entropy`的接口如下:
>>> # 参数:
>>> # dist (str):分布的名称。仅支持'Categorical'。
>>> # probs_b (Tensor)分布b的事件概率。
>>> # probs (Tensor)分布a的事件概率。默认值self.probs.
>>> # kl_loss示例。`cross_entropy`也类似。
>>> ans = ca1.kl_loss('Categorical', probs_b)
>>> print(ans.shape)
()
>>> ans = ca1.kl_loss('Categorical', probs_b, probs_a)
>>> print(ans.shape)
()
>>> # 必须传入额外的`probs`。
>>> ans = ca2.kl_loss('Categorical', probs_b, probs_a)
>>> print(ans.shape)
()
probs
返回事件概率。

View File

@ -0,0 +1,114 @@
Class mindspore.nn.probability.distribution.Cauchy(loc=None, scale=None, seed=None, dtype=mindspore.float32, name='Cauchy')
柯西分布Cauchy distribution
参数:
loc (int, float, list, numpy.ndarray, Tensor):柯西分布的位置。
scale (int, float, list, numpy.ndarray, Tensor):柯西分布的比例。
seed (int)采样时使用的种子。如果为None则使用全局种子。默认值None。
dtype (mindspore.dtype)事件样例的类型。默认值mindspore.float32。
name (str):分布的名称。默认值:'Cauchy'。
支持平台:
``Ascend``
注:
`scale`必须大于零。
`dtype`必须是float因为柯西分布是连续的。
GPU后端不支持柯西分布。
示例:
>>> import mindspore
>>> import mindspore.nn as nn
>>> import mindspore.nn.probability.distribution as msd
>>> from mindspore import Tensor
>>> # 初始化loc为3.0和scale为4.0的柯西分布。
>>> cauchy1 = msd.Cauchy(3.0, 4.0, dtype=mindspore.float32)
>>> # 柯西分布可以在没有参数的情况下初始化。
>>> # 在这种情况下,'loc'和'scale'必须通过参数传入。
>>> cauchy2 = msd.Cauchy(dtype=mindspore.float32)
>>> # 下面是用于测试的Tensor
>>> value = Tensor([1.0, 2.0, 3.0], dtype=mindspore.float32)
>>> loc_a = Tensor([2.0], dtype=mindspore.float32)
>>> scale_a = Tensor([2.0, 2.0, 2.0], dtype=mindspore.float32)
>>> loc_b = Tensor([1.0], dtype=mindspore.float32)
>>> scale_b = Tensor([1.0, 1.5, 2.0], dtype=mindspore.float32)
>>> # 公共接口对应的概率函数的私有接口,包括`prob`、`log_prob`、`cdf`、`log_cdf`、`survival_function`、`log_survival`,具有以下相同的参数。
>>> # 参数:
>>> # value (Tensor):要评估的值。
>>> # loc (Tensor)分布的位置。默认值self.loc.
>>> # scale (Tensor)分布的比例。默认值self.scale.
>>> # `prob`示例。
>>> # 通过将'prob'替换为函数的名称,可以对其他概率函数进行类似的调用
>>> ans = cauchy1.prob(value)
>>> print(ans.shape)
(3,)
>>> # 根据分布b进行评估。
>>> ans = cauchy1.prob(value, loc_b, scale_b)
>>> print(ans.shape)
(3,)
>>> # 在函数调用期间必须传入`loc`和`scale`
>>> ans = cauchy2.prob(value, loc_a, scale_a)
>>> print(ans.shape)
(3,)
>>> # 函数`mode`和`entropy`具有相同的参数。
>>> # 参数:
>>> # loc (Tensor)分布的位置。默认值self.loc.
>>> # scale (Tensor)分布的比例。默认值self.scale.
>>> # `mode`示例。
>>> ans = cauchy1.mode() # return 3.0
>>> print(ans.shape)
()
>>> ans = cauchy1.mode(loc_b, scale_b) # return loc_b
>>> print(ans.shape)
(3,)
>>> # 在函数调用期间必须传入`loc`和`scale`。
>>> ans = cauchy2.mode(loc_a, scale_a)
>>> print(ans.shape)
(3,)
>>> # 'kl_loss'和'cross_entropy'的接口相同:
>>> # 参数:
>>> # dist (str):分布的类型。仅支持"Cauchy"。
>>> # loc_b (Tensor)分布b的位置。
>>> # scale_b (Tensor)分布b的比例。
>>> # loc (Tensor)分布a的位置。默认值self.loc.
>>> # scale (Tensor)分布a的比例。默认值self.scale.
>>> # `kl_loss`示例。`cross_entropy`也类似。
>>> ans = cauchy1.kl_loss('Cauchy', loc_b, scale_b)
>>> print(ans.shape)
(3,)
>>> ans = cauchy1.kl_loss('Cauchy', loc_b, scale_b, loc_a, scale_a)
>>> print(ans.shape)
(3,)
>>> # 必须传入额外的`loc`和`scale`。
>>> ans = cauchy2.kl_loss('Cauchy', loc_b, scale_b, loc_a, scale_a)
>>> print(ans.shape)
(3,)
>>> # `sample`示例。
>>> # 参数:
>>> # shape (tuple)样本的shape。默认值()
>>> # loc (Tensor)分布的位置。默认值self.loc.
>>> # scale (Tensor)分布的比例。默认值self.scale.
>>> ans = cauchy1.sample()
>>> print(ans.shape)
()
>>> ans = cauchy1.sample((2,3))
>>> print(ans.shape)
(2, 3)
>>> ans = cauchy1.sample((2,3), loc_b, scale_b)
>>> print(ans.shape)
(2, 3, 3)
>>> ans = cauchy2.sample((2,3), loc_a, scale_a)
>>> print(ans.shape)
(2, 3, 3)
loc
返回分布位置。
scale
返回分布比例。

View File

@ -0,0 +1,184 @@
Class mindspore.nn.probability.distribution.Distribution(seed, dtype, name, param)
所有分布的基类。
参数:
seed (int)采样时使用的种子。如果为None则使用0。
dtype (mindspore.dtype):事件样例的类型。
name (str):分布的名称。
param (dict):用于初始化分布的参数。
支持平台:
``Ascend`` ``GPU``
注:
派生类必须重写`_mean`、`_prob`和`_log_prob`等操作。必填参数必须通过`args`或`kwargs`传入,如`_prob`的`value`。
cdf(value, *args, **kwargs)
在给定值下评估累积分布函数Cumulatuve Distribution Function, CDF
参数:
value (Tensor):要评估的值。
*args (list):传递给子类的位置参数列表。
**kwargs (dict):传递给子类的关键字参数字典。
construct(name, *args, **kwargs)
重写Cell中的`construct`。
注:
支持的函数包括:
'prob'、'log_prob'、'cdf', 'log_cdf'、'survival_function'、'log_survival'、
'var'、'sd'、'mode'、'mean'、'entropy'、'kl_loss'、'cross_entropy'、'sample'、
'get_dist_args'、'get_dist_type'。
参数:
name (str):函数名称。
*args (list):函数所需的位置参数列表。
**kwargs (dict):函数所需的关键字参数字典。
cross_entropy(dist, *args, **kwargs)
评估分布a和b之间的交叉熵。
参数:
dist (str):分布的类型。
*args (list):传递给子类的位置参数列表。
**kwargs (dict):传递给子类的关键字参数字典。
entropy(*args, **kwargs)
计算熵。
参数:
*args (list):传递给子类的位置参数列表。
**kwargs (dict):传递给子类的关键字参数字典。
get_dist_args(*args, **kwargs)
检查默认参数的可用性和有效性。
参数:
*args (list):传递给子类的位置参数列表。
**kwargs (dict):传递给子类的关键字参数字典。
注:
传递给字类的参数的顺序应该与通过`_add_parameter`初始化默认参数的顺序相同。
get_dist_type()
返回分布类型。
kl_loss(dist, *args, **kwargs)
评估KL散度即KL(a||b)。
参数:
dist (str):分布的类型。
*args (list):传递给子类的位置参数列表。
**kwargs (dict):传递给子类的关键字参数字典。
log_cdf(value, *args, **kwargs)
计算给定值对于的cdf的对数。
参数:
value (Tensor):要评估的值。
*args (list):传递给子类的位置参数列表。
**kwargs (dict):传递给子类的关键字参数字典。
log_prob(value, *args, **kwargs)
计算给定值对应的概率的对数pdf或pmf
参数:
value (Tensor):要评估的值。
*args (list):传递给子类的位置参数列表。
**kwargs (dict):传递给子类的关键字参数字典。
log_survival(value, *args, **kwargs)
计算给定值对应的剩余函数的对数。
参数:
value (Tensor):要评估的值。
*args (list):传递给子类的位置参数列表。
**kwargs (dict):传递给子类的关键字参数字典。
mean(*args, **kwargs)
评估平均值。
参数:
*args (list):传递给子类的位置参数列表。
**kwargs (dict):传递给子类的关键字参数字典。
mode(*args, **kwargs)
评估模式。
参数:
*args (list):传递给子类的位置参数列表。
**kwargs (dict):传递给子类的关键字参数字典。
prob(value, *args, **kwargs)
评估给定值下的概率Probability Density Function或Probability Mass Function
参数:
value (Tensor):要评估的值。
*args (list):传递给子类的位置参数列表。
**kwargs (dict):传递给子类的关键字参数字典。
sample(*args, **kwargs)
采样函数。
参数:
shapetuple样本的shape。
*args (list):传递给子类的位置参数列表。
**kwargs (dict):传递给子类的关键字参数字典。
sd(*args, **kwargs)
标准差评估。
参数:
*args (list):传递给子类的位置参数列表。
**kwargs (dict):传递给子类的关键字参数字典。
survival_function(value, *args, **kwargs)
计算给定值对应的剩余函数。
参数:
value (Tensor):要评估的值。
*args (list):传递给子类的位置参数列表。
**kwargs (dict):传递给子类的关键字参数字典。
var(*args, **kwargs)
评估方差。
参数:
*args (list):传递给子类的位置参数列表。
**kwargs (dict):传递给子类的关键字参数字典。

View File

@ -0,0 +1,100 @@
Class mindspore.nn.probability.distribution.Exponential(rate=None, seed=None, dtype=mindspore.float32, name='Exponential')
示例类指数分布Exponential Distribution
参数:
rate (float, list, numpy.ndarray, Tensor) 逆指数。默认值None。
seed (int) 采样时使用的种子。如果为None则使用全局种子。默认值None。
dtype (mindspore.dtype) 事件样例的类型。默认值mindspore.float32。
name (str) 分布的名称。默认值:'Exponential'。
支持平台:
``Ascend`` ``GPU``
注:
`rate`必须大于0。
`dtype`必须是float因为指数分布是连续的。
示例:
>>> import mindspore
>>> import mindspore.nn as nn
>>> import mindspore.nn.probability.distribution as msd
>>> from mindspore import Tensor
>>> # 初始化rate为0.5的指数分布。
>>> e1 = msd.Exponential(0.5, dtype=mindspore.float32)
>>> # 指数分布可以在没有参数的情况下初始化。
>>> # 在这种情况下,`rate`必须在函数调用期间通过`args`传入。
>>> e2 = msd.Exponential(dtype=mindspore.float32)
>>> # 下面是用于测试的Tensor
>>> value = Tensor([1, 2, 3], dtype=mindspore.float32)
>>> rate_a = Tensor([0.6], dtype=mindspore.float32)
>>> rate_b = Tensor([0.2, 0.5, 0.4], dtype=mindspore.float32)
>>> # 公共接口对应的概率函数的私有接口,包括`prob`、`log_prob`、`cdf`、`log_cdf`、`survival_function`、`log_survival`,如下所示。
>>> # 参数:
>>> # value (Tensor):要评估的值。
>>> # rate (Tensor)分布的率参数。默认值self.rate.
>>> # `prob`示例。
>>> # 通过将`prob`替换为函数的名称,可以对其他概率函数进行类似的调用。
>>> ans = e1.prob(value)
>>> print(ans.shape)
(3,)
>>> # 根据分布b进行评估。
>>> ans = e1.prob(value, rate_b)
>>> print(ans.shape)
(3,)
>>> # `rate`必须在函数调用期间传入。
>>> ans = e2.prob(value, rate_a)
>>> print(ans.shape)
(3,)
>>> # 函数`mean`、`sd`、`var`和`entropy`具有相同的参数,如下所示。
>>> # 参数:
>>> # rate (Tensor)分布的率参数。默认值self.rate.
>>> # `mean`示例。`sd`、`var`和`entropy`是相似的。
>>> ans = e1.mean() # return 2
>>> print(ans.shape)
()
>>> ans = e1.mean(rate_b) # return 1 / rate_b
>>> print(ans.shape)
(3,)
>>> # `rate`必须在函数调用期间传入。
>>> ans = e2.mean(rate_a)
>>> print(ans.shape)
(1,)
>>> # `kl_loss`和`cross_entropy`的接口相同。
>>> # 参数:
>>> # dist (str):分布的名称。仅支持'Exponential'。
>>> # rate_b (Tensor)分布b的率参数。
>>> # rate_a (Tensor)分布a的率参数。默认值self.rate.
>>> # `kl_loss`示例。`cross_entropy`也类似。
>>> ans = e1.kl_loss('Exponential', rate_b)
>>> print(ans.shape)
(3,)
>>> ans = e1.kl_loss('Exponential', rate_b, rate_a)
>>> print(ans.shape)
(3,)
>>> # 必须传入额外的`rate`。
>>> ans = e2.kl_loss('Exponential', rate_b, rate_a)
>>> print(ans.shape)
(3,)
>>> # `sample`示例。
>>> # 参数:
>>> # shape (tuple)样本的shape。默认值()
>>> # probs1 (Tensor)分布的率参数。默认值self.rate.
>>> ans = e1.sample()
>>> print(ans.shape)
()
>>> ans = e1.sample((2,3))
>>> print(ans.shape)
(2, 3)
>>> ans = e1.sample((2,3), rate_b)
>>> print(ans.shape)
(2, 3, 3)
>>> ans = e2.sample((2,3), rate_a)
>>> print(ans.shape)
(2, 3, 1)
rate
返回`rate`。

View File

@ -0,0 +1,114 @@
Class mindspore.nn.probability.distribution.Gamma(concentration=None, rate=None, seed=None, dtype=mindspore.float32, name='Gamma')
伽马分布Gamma distribution
参数:
concentration (list, numpy.ndarray, Tensor)浓度也被称为伽马分布的alpha。默认值None。
rate (list, numpy.ndarray, Tensor)逆尺度参数也被称为伽马分布的beta。默认值None。
seed (int)采样时使用的种子。如果为None则使用全局种子。默认值None。
dtype (mindspore.dtype)事件样例的类型。默认值mindspore.float32。
name (str):分布的名称。默认值:'Gamma'。
支持平台:
``Ascend``
注:
`concentration`和`rate`必须大于零。
`dtype`必须是float因为伽马分布是连续的。
示例:
>>> import mindspore
>>> import mindspore.nn as nn
>>> import mindspore.nn.probability.distribution as msd
>>> from mindspore import Tensor
>>> # 初始化concentration为3.0和rate为4.0的伽马分布。
>>> g1 = msd.Gamma([3.0], [4.0], dtype=mindspore.float32)
>>> # 伽马分布可以在没有参数的情况下初始化。
>>> # 在这种情况下,`concentration`和`rate`必须通过参数传入。
>>> g2 = msd.Gamma(dtype=mindspore.float32)
>>> # 下面是用于测试的Tensor
>>> value = Tensor([1.0, 2.0, 3.0], dtype=mindspore.float32)
>>> concentration_a = Tensor([2.0], dtype=mindspore.float32)
>>> rate_a = Tensor([2.0, 2.0, 2.0], dtype=mindspore.float32)
>>> concentration_b = Tensor([1.0], dtype=mindspore.float32)
>>> rate_b = Tensor([1.0, 1.5, 2.0], dtype=mindspore.float32)
>>>
>>> # 公共接口对应的概率函数的私有接口,包括`prob`、`log_prob`、`cdf`、`log_cdf`、`survival_function`、`log_survival`,具有以下相同的参数。
>>> # 参数:
>>> # value (Tensor):要评估的值。
>>> # concentration (Tensor)分布的浓度。默认值self._concentration。
>>> # rate (Tensor)分布的逆尺度。默认值self._rate。
>>> # `prob`示例。
>>> # 通过将'prob'替换为函数的名称,可以对其他概率函数进行类似的调用
>>> ans = g1.prob(value)
>>> print(ans.shape)
(3,)
>>> # 根据分布b进行评估。
>>> ans = g1.prob(value, concentration_b, rate_b)
>>> print(ans.shape)
(3,)
>>> # 在g2的函数调用期间必须传入`concentration`和`rate`。
>>> ans = g2.prob(value, concentration_a, rate_a)
>>> print(ans.shape)
(3,)
>>> # 函数`mean`、`sd`、`mode`、`var`和`entropy`具有相同的参数。
>>> # 参数:
>>> # concentration (Tensor)分布的浓度。默认值self._concentration。
>>> # rate (Tensor)分布的逆尺度。默认值self._rate。
>>># `mean`、`sd`、`mode`、`var`和`entropy`的示例相似。
>>> ans = g1.mean()
>>> print(ans.shape)
(1,)
>>> ans = g1.mean(concentration_b, rate_b)
>>> print(ans.shape)
(3,)
>>> # 在函数调用期间必须传入`concentration`和`rate`。
>>> ans = g2.mean(concentration_a, rate_a)
>>> print(ans.shape)
(3,)
>>> # 'kl_loss'和'cross_entropy'的接口相同:
>>> # 参数:
>>> # dist (str):分布的类型。仅支持"Gamma"。
>>> # concentration_b (Tensor)分布b的浓度。
>>> # rate_b (Tensor)分布b的逆尺度。
>>> # concentration_a (Tensor)分布a的浓度。默认值self._concentration。
>>> # rate_a (Tensor)分布a的逆尺度。默认值self._rate。
>>> # `kl_loss`示例。`cross_entropy`也类似。
>>> ans = g1.kl_loss('Gamma', concentration_b, rate_b)
>>> print(ans.shape)
(3,)
>>> ans = g1.kl_loss('Gamma', concentration_b, rate_b, concentration_a, rate_a)
>>> print(ans.shape)
(3,)
>>> # 必须传入额外的`concentration`和`rate`。
>>> ans = g2.kl_loss('Gamma', concentration_b, rate_b, concentration_a, rate_a)
>>> print(ans.shape)
(3,)
>>> # `sample`示例。
>>> # 参数:
>>> # shape (tuple)样本的shape。默认值()
>>> # concentration (Tensor)分布的浓度。默认值self._concentration。
>>> # rate (Tensor)分布的逆尺度。默认值self._rate。
>>> ans = g1.sample()
>>> print(ans.shape)
(1,)
>>> ans = g1.sample((2,3))
>>> print(ans.shape)
(2, 3, 1)
>>> ans = g1.sample((2,3), concentration_b, rate_b)
>>> print(ans.shape)
(2, 3, 3)
>>> ans = g2.sample((2,3), concentration_a, rate_a)
>>> print(ans.shape)
(2, 3, 3)
concentration
返回分布的浓度也称为伽马分布的alpha
rate
返回分布的逆尺度也称为伽马分布的beta

View File

@ -0,0 +1,103 @@
Class mindspore.nn.probability.distribution.Geometric(probs=None, seed=None, dtype=mindspore.int32, name='Geometric')
几何分布Geometric Distribution
它代表在第一次成功之前有k次失败即在第一次成功实现时总共有k+1个伯努利试验。
参数:
probs (float, list, numpy.ndarray, Tensor)成功的概率。默认值None。
seed (int)采样时使用的种子。如果为None则使用全局种子。默认值None。
dtype (mindspore.dtype)事件样例的类型。默认值mindspore.int32.
name (str):分布的名称。默认值:'Geometric'。
支持平台:
``Ascend`` ``GPU``
注:
`probs`必须是合适的概率0<p<1
示例:
>>> import mindspore
>>> import mindspore.nn as nn
>>> import mindspore.nn.probability.distribution as msd
>>> from mindspore import Tensor
>>> # 初始化probability为0.5的几何分布。
>>> g1 = msd.Geometric(0.5, dtype=mindspore.int32)
>>> # 几何分布可以在没有参数的情况下初始化。
>>> # 在这种情况下,`probs`必须在函数调用过程中通过参数传入。
>>> g2 = msd.Geometric(dtype=mindspore.int32)
>>>
>>> # 下面是用于测试的Tensor
>>> value = Tensor([1, 0, 1], dtype=mindspore.int32)
>>> probs_a = Tensor([0.6], dtype=mindspore.float32)
>>> probs_b = Tensor([0.2, 0.5, 0.4], dtype=mindspore.float32)
>>>
>>> # 公共接口对应的概率函数的私有接口,包括`prob`、`log_prob`、`cdf`、`log_cdf`、`survival_function`、`log_survival`,具有以下相同的参数。
>>> # 参数:
>>> # value (Tensor):要评估的值。
>>> # probs1 (Tensor)伯努利试验成功的概率。默认值self.probs.
>>> # `prob`示例。
>>> # 通过将`prob`替换为函数的名称,可以对其他概率函数进行类似的调用。
>>> ans = g1.prob(value)
>>> print(ans.shape)
(3,)
>>> # 根据分布b进行评估。
>>> ans = g1.prob(value, probs_b)
>>> print(ans.shape)
(3,)
>>> # `probs`必须在函数调用期间传入。
>>> ans = g2.prob(value, probs_a)
>>> print(ans.shape)
(3,)
>>> # 函数`mean`、`sd`、`var`和`entropy`具有相同的参数。
>>> # 参数:
>>> # probs1 (Tensor)伯努利试验成功的概率。默认值self.probs.
>>> # `mean`示例。`sd`、`var`和`entropy`是相似的。
>>> ans = g1.mean() # return 1.0
>>> print(ans.shape)
()
>>> ans = g1.mean(probs_b)
>>> print(ans.shape)
(3,)
>>> # 函数调用时必须传入probs。
>>> ans = g2.mean(probs_a)
>>> print(ans.shape)
(1,)
>>> # 'kl_loss'和'cross_entropy'的接口相同。
>>> # 参数:
>>> # dist (str):分布的名称。仅支持'Geometric'。
>>> # probs1_b (Tensor)伯努利分布b试验成功的概率。
>>> # probs1_a (Tensor)伯努利分布a试验成功的概率。
>>> # `kl_loss`示例。`cross_entropy`也类似。
>>> ans = g1.kl_loss('Geometric', probs_b)
>>> print(ans.shape)
(3,)
>>> ans = g1.kl_loss('Geometric', probs_b, probs_a)
>>> print(ans.shape)
(3,)
>>> # 必须传入额外的`probs`。
>>> ans = g2.kl_loss('Geometric', probs_b, probs_a)
>>> print(ans.shape)
(3,)
>>> # `sample`示例。
>>> # 参数:
>>> # shape (tupler)样本的shape。默认值()
>>> # probs1 (Tensor)伯努利试验成功的概率。默认值self.probs.
>>> ans = g1.sample()
>>> print(ans.shape)
()
>>> ans = g1.sample((2,3))
>>> print(ans.shape)
(2, 3)
>>> ans = g1.sample((2,3), probs_b)
>>> print(ans.shape)
(2, 3, 3)
>>> ans = g2.sample((2,3), probs_a)
>>> print(ans.shape)
(2, 3, 1)
probs
返回伯努利试验成功的概率。

View File

@ -0,0 +1,45 @@
Class mindspore.nn.probability.distribution.Gumbel(loc, scale, seed=0, dtype=mindspore.float32, name='Gumbel')
耿贝尔分布Gumbel distribution
参数:
loc (float, list, numpy.ndarray, Tensor):耿贝尔分布的位置。
scale (float, list, numpy.ndarray, Tensor):耿贝尔分布的尺度。
seed (int)采样时使用的种子。如果为None则使用全局种子。默认值None。
dtype (mindspore.dtype)分布类型。默认值mindspore.float32。
name (str):分布的名称。默认值:'Gumbel'。
支持平台:
``Ascend`` ``GPU``
注:
`scale`必须大于零。
`dtype`必须是浮点类型,因为耿贝尔分布是连续的。
GPU后端不支持`kl_loss`和`cross_entropy`。
示例:
>>> import mindspore
>>> import mindspore.nn as nn
>>> import mindspore.nn.probability.distribution as msd
>>> from mindspore import Tensor
>>> class Prob(nn.Cell):
... def __init__(self):
... super(Prob, self).__init__()
... self.gum = msd.Gumbel(np.array([0.0]), np.array([[1.0], [2.0]]), dtype=mindspore.float32)
...
... def construct(self, x_):
... return self.gum.prob(x_)
>>> value = np.array([1.0, 2.0]).astype(np.float32)
>>> pdf = Prob()
>>> output = pdf(Tensor(value, dtype=mindspore.float32))
loc
返回分布位置。
scale
返回分布尺度。

View File

@ -0,0 +1,46 @@
Class mindspore.nn.probability.distribution.LogNormal(loc=None, scale=None, seed=0, dtype=mindspore.float32, name='LogNormal')
对数正态分布LogNormal distribution
对数正态分布是随机变量的连续概率分布,变量的对数为正态分布。它被构造为正态分布的指数变换。
参数:
loc (int, float, list, numpy.ndarray, Tensor)基础正态分布的平均值。默认值None。
scale (int, float, list, numpy.ndarray, Tensor)基础正态分布的标准差。默认值None。
seed (int)采样时使用的种子。如果为None则使用全局种子。默认值None。
dtype (mindspore.dtype)分布类型。默认值mindspore.float32。
name (str):分布的名称。默认值:'LogNormal'。
支持平台:
``Ascend`` ``GPU``
注:
`scale`必须大于零。
`dtype`必须是float因为对数正态分布是连续的。
示例:
>>> import numpy as np
>>> import mindspore
>>> import mindspore.nn as nn
>>> import mindspore.nn.probability.distribution as msd
>>> from mindspore import Tensor
>>> class Prob(nn.Cell):
... def __init__(self):
... super(Prob, self).__init__()
... self.ln = msd.LogNormal(np.array([0.3]), np.array([[0.2], [0.4]]), dtype=mindspore.float32)
... def construct(self, x_):
... return self.ln.prob(x_)
>>> pdf = Prob()
>>> output = pdf(Tensor([1.0, 2.0], dtype=mindspore.float32))
>>> print(output.shape)
(2, 2)
loc
返回分布的均值。
scale
返回分布的标准差。

View File

@ -0,0 +1,97 @@
Class mindspore.nn.probability.distribution.Logistic(loc=None, scale=None, seed=None, dtype=mindspore.float32, name='Logistic')
逻辑斯谛分布Logistic distribution
参数:
loc (int, float, list, numpy.ndarray, Tensor)逻辑斯谛分布的位置。默认值None。
scale (int, float, list, numpy.ndarray, Tensor)逻辑斯谛分布的尺度。默认值None。
seed (int)采样时使用的种子。如果为None则使用全局种子。默认值None。
dtype (mindspore.dtype)事件样例的类型。默认值mindspore.float32。
name (str):分布的名称。默认值:'Logistic'。
支持平台:
``Ascend`` ``GPU``
注:
`scale`必须大于零。
`dtype`必须是float因为逻辑斯谛分布是连续的。
示例:
>>> import mindspore
>>> import mindspore.nn as nn
>>> import mindspore.nn.probability.distribution as msd
>>> from mindspore import Tensor
>>> # 初始化loc为3.0和scale为4.0的逻辑斯谛分布。
>>> l1 = msd.Logistic(3.0, 4.0, dtype=mindspore.float32)
>>> # 可以在没有参数的情况下初始化逻辑斯谛分布。
>>> # 在这种情况下,`loc`和`scale`必须通过参数传入。
>>> l2 = msd.Logistic(dtype=mindspore.float32)
>>>
>>> # 下面是用于测试的Tensor
>>> value = Tensor([1.0, 2.0, 3.0], dtype=mindspore.float32)
>>> loc_a = Tensor([2.0], dtype=mindspore.float32)
>>> scale_a = Tensor([2.0, 2.0, 2.0], dtype=mindspore.float32)
>>> loc_b = Tensor([1.0], dtype=mindspore.float32)
>>> scale_b = Tensor([1.0, 1.5, 2.0], dtype=mindspore.float32)
>>>
>>> # 公共接口对应的概率函数的私有接口,包括`prob`、`log_prob`、`cdf`、`log_cdf`、`survival_function`、`log_survival`,具有以下相同的参数。
>>> # 参数:
>>> # value (Tensor):要评估的值。
>>> # loc (Tensor)分布的位置。默认值self.loc.
>>> # scale (Tensor)分布的尺度。默认值self.scale.
>>> # `prob`示例。
>>> # 通过将'prob'替换为函数的名称,可以对其他概率函数进行类似的调用
>>> ans = l1.prob(value)
>>> print(ans.shape)
(3,)
>>> # 根据分布b进行评估。
>>> ans = l1.prob(value, loc_b, scale_b)
>>> print(ans.shape)
(3,)
>>> # 在函数调用期间必须传入`loc`和`scale`
>>> ans = l1.prob(value, loc_a, scale_a)
>>> print(ans.shape)
(3,)
>>> # 函数`mean`、`mode`、`sd`、`var`和`entropy`具有相同的参数。
>>> # 参数:
>>> # loc (Tensor)分布的位置。默认值self.loc.
>>> # scale (Tensor)分布的尺度。默认值self.scale.
>>> # 'mean'示例。`mode`、`sd`、`var`和`entropy`也类似。
>>> ans = l1.mean()
>>> print(ans.shape)
()
>>> ans = l1.mean(loc_b, scale_b)
>>> print(ans.shape)
(3,)
>>> # 在函数调用期间必须传入`loc`和`scale`。
>>> ans = l1.mean(loc_a, scale_a)
>>> print(ans.shape)
(3,)
>>> # `sample`示例。
>>> # 参数:
>>> # shape (tuple)样本的shape。默认值()
>>> # loc (Tensor)分布的位置。默认值self.loc.
>>> # scale (Tensor)分布的尺度。默认值self.scale.
>>> ans = l1.sample()
>>> print(ans.shape)
()
>>> ans = l1.sample((2,3))
>>> print(ans.shape)
(2, 3)
>>> ans = l1.sample((2,3), loc_b, scale_b)
>>> print(ans.shape)
(2, 3, 3)
>>> ans = l1.sample((2,3), loc_a, scale_a)
>>> print(ans.shape)
(2, 3, 3)
loc
返回分布的位置。
scale
返回分布的尺度。

View File

@ -0,0 +1,103 @@
Class mindspore.nn.probability.distribution.Normal(mean=None, sd=None, seed=None, dtype=mindspore.float32, name='Normal')
正态分布Normal distribution
参数:
mean (int, float, list, numpy.ndarray, Tensor)正态分布的平均值。默认值None。
sd (int, float, list, numpy.ndarray, Tensor)正态分布的标准差。默认值None。
seed (int)采样时使用的种子。如果为None则使用全局种子。默认值None。
dtype (mindspore.dtype)事件样例的类型。默认值mindspore.float32。
name (str):分布的名称。默认值:'Normal'。
支持平台:
``Ascend`` ``GPU``
注:
`sd`必须大于零。
`dtype`必须是float因为正态分布是连续的。
示例:
>>> import mindspore
>>> import mindspore.nn as nn
>>> import mindspore.nn.probability.distribution as msd
>>> from mindspore import Tensor
>>> # 初始化mean为3.0和standard deviation为4.0的正态分布。
>>> n1 = msd.Normal(3.0, 4.0, dtype=mindspore.float32)
>>> # 正态分布可以在没有参数的情况下初始化。
>>> # 在这种情况下,`mean`和`sd`必须通过参数传入。
>>> n2 = msd.Normal(dtype=mindspore.float32)
>>> # 下面是用于测试的Tensor
>>> value = Tensor([1.0, 2.0, 3.0], dtype=mindspore.float32)
>>> mean_a = Tensor([2.0], dtype=mindspore.float32)
>>> sd_a = Tensor([2.0, 2.0, 2.0], dtype=mindspore.float32)
>>> mean_b = Tensor([1.0], dtype=mindspore.float32)
>>> sd_b = Tensor([1.0, 1.5, 2.0], dtype=mindspore.float32)
>>> # 公共接口对应的概率函数的私有接口,包括`prob`、`log_prob`、`cdf`、`log_cdf`、`survival_function`、`log_survival`,具有以下相同的参数。
>>> # 参数:
>>> # value (Tensor):要评估的值。
>>> # mean (Tensor)分布的均值。默认值self._mean_value。
>>> # sd (Tensor)分布的标准差。默认值self._sd_value。
>>> # `prob`示例。
>>> # 通过将'prob'替换为其他概率函数的名称,可以对其他概率函数进行类似的调用
>>> ans = n1.prob(value)
>>> print(ans.shape)
(3,)
>>> # 根据分布b进行评估。
>>> ans = n1.prob(value, mean_b, sd_b)
>>> print(ans.shape)
(3,)
>>> # 在函数调用期间必须传入`mean`和`sd`
>>> ans = n2.prob(value, mean_a, sd_a)
>>> print(ans.shape)
(3,)
>>> # 函数`mean`、`sd`、`var`和`entropy`具有相同的参数。
>>> # 参数:
>>> # mean (Tensor)分布的均值。默认值self._mean_value。
>>> # sd (Tensor)分布的标准差。默认值self._sd_value。
>>> # 'mean'示例。`sd`、`var`和`entropy`是相似的。
>>> ans = n1.mean() # return 0.0
>>> print(ans.shape)
()
>>> ans = n1.mean(mean_b, sd_b) # return mean_b
>>> print(ans.shape)
(3,)
>>> # `mean`和`sd`必须在函数调用期间传入。
>>> ans = n2.mean(mean_a, sd_a)
>>> print(ans.shape)
(3,)
>>> # 'kl_loss'和'cross_entropy'的接口相同:
>>> # 参数:
>>> # dist (str):分布的类型。仅支持"Normal"。
>>> # mean_b (Tensor)分布b的均值。
>>> # sd_bTensor)分布b的标准差。
>>> # mean_a (Tensor)分布a的均值。默认值self._mean_value。
>>> # sd_aTensor)分布a的标准差。默认值self._sd_value。
>>> # `kl_loss`示例。`cross_entropy`也类似。
>>> ans = n1.kl_loss('Normal', mean_b, sd_b)
>>> print(ans.shape)
(3,)
>>> ans = n1.kl_loss('Normal', mean_b, sd_b, mean_a, sd_a)
>>> print(ans.shape)
(3,)
>>> # 必须传入额外的`mean`和`sd`。
>>> ans = n2.kl_loss('Normal', mean_b, sd_b, mean_a, sd_a)
>>> print(ans.shape)
(3,)
>>> # `sample`示例。
>>> # 参数:
>>> # shape (tuple)样本的shape。默认值()
>>> # mean (Tensor)分布的均值。默认值self._mean_value。
>>> # sd (Tensor)分布的标准差。默认值self._sd_value。
>>> ans = n1.sample()
>>> print(ans.shape)
()
>>> ans = n1.sample((2,3))
>>> print(ans.shape)
(2, 3)
>>> ans = n1.sample((2,3), mean_b, sd_b)
>>> print(ans.shape)
(2, 3, 3)
>>> ans = n2.sample((2,3), mean_a, sd_a)
>>> print(ans.shape)
(2, 3, 3)

View File

@ -0,0 +1,85 @@
Class mindspore.nn.probability.distribution.Poisson(rate=None, seed=None, dtype=mindspore.float32, name='Poisson')
泊松分布Poisson Distribution
参数:
rate (list, numpy.ndarray, Tensor)泊松分布的率参数。默认值None。
seed (int)采样时使用的种子。如果为None则使用全局种子。默认值None。
dtype (mindspore.dtype)事件样例的类型。默认值mindspore.float32。
name (str):分布的名称。默认值:'Poisson'。
支持平台:
``Ascend``
注:
`rate`必须大于0。
示例:
>>> import mindspore
>>> import mindspore.nn as nn
>>> import mindspore.nn.probability.distribution as msd
>>> from mindspore import Tensor
>>> # 初始化rate为0.5的泊松分布。
>>> p1 = msd.Poisson([0.5], dtype=mindspore.float32)
>>> # 泊松分布可以在没有参数的情况下初始化。
>>> # 在这种情况下,`rate`必须在函数调用期间通过`args`传入。
>>> p2 = msd.Poisson(dtype=mindspore.float32)
>>>
>>> # 下面是用于测试的Tensor
>>> value = Tensor([1, 2, 3], dtype=mindspore.int32)
>>> rate_a = Tensor([0.6], dtype=mindspore.float32)
>>> rate_b = Tensor([0.2, 0.5, 0.4], dtype=mindspore.float32)
>>>
>>> # 公共接口对应的概率函数的私有接口,包括`prob`、`log_prob`、`cdf`、`log_cdf`、`survival_function`、`log_survival`,如下所示。
>>> # 参数:
>>> # value (Tensor):要评估的值。
>>> # rate (Tensor)分布的率参数。默认值self.rate.
>>> # `prob`示例。
>>> # 通过将`prob`替换为其他概率函数的名称,可以对其他概率函数进行类似的调用。
>>> ans = p1.prob(value)
>>> print(ans.shape)
(3,)
>>> # 根据分布b进行评估。
>>> ans = p1.prob(value, rate_b)
>>> print(ans.shape)
(3,)
>>> # `rate`必须在函数调用期间传入。
>>> ans = p2.prob(value, rate_a)
>>> print(ans.shape)
(3,)
>>> # 函数`mean`、`mode`、`sd`和'var'具有相同的参数,如下所示。
>>> # 参数:
>>> # rate (Tensor)分布的率参数。默认值self.rate.
>>> # `mean`、`sd`、`mode`和`var`的示例都类似。
>>> ans = p1.mean() # return 2
>>> print(ans.shape)
(1,)
>>> ans = p1.mean(rate_b) # return 1 / rate_b
>>> print(ans.shape)
(3,)
>>> # `rate`必须在函数调用期间传入。
>>> ans = p2.mean(rate_a)
>>> print(ans.shape)
(1,)
>>> # `sample`示例。
>>> # 参数:
>>> # shape (tuple)样本的shape。默认值()
>>> # probs1 (Tensor)分布的率参数。默认值self.rate.
>>> ans = p1.sample()
>>> print(ans.shape)
(1, )
>>> ans = p1.sample((2,3))
>>> print(ans.shape)
(2, 3, 1)
>>> ans = p1.sample((2,3), rate_b)
>>> print(ans.shape)
(2, 3, 3)
>>> ans = p2.sample((2,3), rate_a)
>>> print(ans.shape)
(2, 3, 1)
rate
返回分布的`rate`参数。

View File

@ -0,0 +1,47 @@
Class mindspore.nn.probability.distribution.TransformedDistribution(bijector, distribution, seed=None, name='transformed_distribution')
转换分布Transformed Distribution
该类包含一个Bijector和一个分布并通过Bijector定义的操作将原始分布转换为新分布。
参数:
bijector (Bijector):要执行的转换。
distribution (Distribution)原始分布。必须具有float数据类型。
seed (int)采样时使用的种子。如果为None则使用全局种子。默认值None。
如果在初始化TransformedDistribution对象时给出了此种子则对象的采样函数将使用此种子否则将使用基础分布的种子。
name (str):转换分布的名称。默认值:'transformed_distribution'。
支持平台:
``Ascend`` ``GPU``
注:
用于初始化原始分布的参数不能为None。
例如,由于未指定`mean`和`sd`因此无法使用mynormal = msd.Normal(dtype=mindspore.float32)初始化TransformedDistribution。
示例:
>>> import numpy as np
>>> import mindspore
>>> import mindspore.nn as nn
>>> import mindspore.nn.probability.distribution as msd
>>> import mindspore.nn.probability.bijector as msb
>>> from mindspore import Tensor
>>> class Net(nn.Cell):
... def __init__(self, shape, dtype=mindspore.float32, seed=0, name='transformed_distribution'):
... super(Net, self).__init__()
... # 创建转换分布
... self.exp = msb.Exp()
... self.normal = msd.Normal(0.0, 1.0, dtype=dtype)
... self.lognormal = msd.TransformedDistribution(self.exp, self.normal, seed=seed, name=name)
... self.shape = shape
...
... def construct(self, value):
... cdf = self.lognormal.cdf(value)
... sample = self.lognormal.sample(self.shape)
... return cdf, sample
>>> shape = (2, 3)
>>> net = Net(shape=shape, name="LogNormal")
>>> x = np.array([2.0, 3.0, 4.0, 5.0]).astype(np.float32)
>>> tx = Tensor(x, dtype=mindspore.float32)
>>> cdf, sample = net(tx)
>>> print(sample.shape)
(2, 3)

View File

@ -0,0 +1,115 @@
Class mindspore.nn.probability.distribution.Uniform(low=None, high=None, seed=None, dtype=mindspore.float32, name='Uniform')
示例类均匀分布Uniform Distribution
参数:
low (int, float, list, numpy.ndarray, Tensor)分布的下限。默认值None。
high (int, float, list, numpy.ndarray, Tensor)分布的上限。默认值None。
seed (int)采样时使用的种子。如果为None则使用全局种子。默认值None。
dtype (mindspore.dtype)事件样例的类型。默认值mindspore.float32。
name (str):分布的名称。默认值:'Uniform'。
支持平台:
``Ascend`` ``GPU``
注:
`low`必须小于`high`。
`dtype`必须是float类型因为均匀分布是连续的。
示例:
>>> import mindspore
>>> import mindspore.nn as nn
>>> import mindspore.nn.probability.distribution as msd
>>> from mindspore import Tensor
>>> # 初始化lower bound为0.0和higher bound为1.0的均匀分布。
>>> u1 = msd.Uniform(0.0, 1.0, dtype=mindspore.float32)
>>> # 平均分布可以在没有参数的情况下初始化。
>>> # 在这种情况下,`high`和`low`必须在函数调用过程中通过参数传入。
>>> u2 = msd.Uniform(dtype=mindspore.float32)
>>>
>>> # 下面是用于测试的Tensor
>>> value = Tensor([0.5, 0.8], dtype=mindspore.float32)
>>> low_a = Tensor([0., 0.], dtype=mindspore.float32)
>>> high_a = Tensor([2.0, 4.0], dtype=mindspore.float32)
>>> low_b = Tensor([-1.5], dtype=mindspore.float32)
>>> high_b = Tensor([2.5, 5.], dtype=mindspore.float32)
>>> # 公共接口对应的概率函数的私有接口,包括
>>> # `prob`、`log_prob`、`cdf`、`log_cdf`、`survival_function`、`log_survival`,具有相同的参数。
>>> # 参数:
>>> # value (Tensor):要评估的值。
>>> # low (Tensor)分布的下限。默认值self.low.
>>> # high (Tensor)分布的上限。默认值self.high。
>>> # `prob`示例。
>>> # 通过将'prob'替换为函数的名称,可以对其他概率函数进行类似的调用。
>>> ans = u1.prob(value)
>>> print(ans.shape)
(2,)
>>> # 根据分布b进行评估。
>>> ans = u1.prob(value, low_b, high_b)
>>> print(ans.shape)
(2,)
>>> # `high`和`low`必须在函数调用期间传入。
>>> ans = u2.prob(value, low_a, high_a)
>>> print(ans.shape)
(2,)
>>> # 函数`mean`、`sd`、`var`和`entropy`具有相同的参数。
>>> # 参数:
>>> # low (Tensor)分布的下限。默认值self.low.
>>> # high (Tensor)分布的上限。默认值self.high。
>>> # `mean`示例。`sd`、`var`和`entropy`是相似的。
>>> ans = u1.mean() # return 0.5
>>> print(ans.shape)
()
>>> ans = u1.mean(low_b, high_b) # return (low_b + high_b) / 2
>>> print(ans.shape)
(2,)
>>> # `high`和`low`必须在函数调用期间传入。
>>> ans = u2.mean(low_a, high_a)
>>> print(ans.shape)
(2,)
>>> # 'kl_loss'和'cross_entropy'的接口相同。
>>> # 参数:
>>> # dist (str):分布的类型。在这种情况下,应该是"Uniform"。
>>> # low_b (Tensor)分布b的下限。
>>> # high_b (Tensor)分布b的上限。
>>> # low_a (Tensor)分布a的下限。默认值self.low.
>>> # high_a (Tensor)分布a的上限。默认值self.high。
>>> # `kl_loss`示例。`cross_entropy`也类似。
>>> ans = u1.kl_loss('Uniform', low_b, high_b)
>>> print(ans.shape)
(2,)
>>> ans = u1.kl_loss('Uniform', low_b, high_b, low_a, high_a)
>>> print(ans.shape)
(2,)
>>> # 必须传入额外的`high`和`low`。
>>> ans = u2.kl_loss('Uniform', low_b, high_b, low_a, high_a)
>>> print(ans.shape)
(2,)
>>> # `sample`示例。
>>> # 参数:
>>> # shape (tuple)样本的shape。默认值()
>>> # low (Tensor)分布的下限。默认值self.low.
>>> # high (Tensor)分布的上限。默认值self.high。
>>> ans = u1.sample()
>>> print(ans.shape)
()
>>> ans = u1.sample((2,3))
>>> print(ans.shape)
(2, 3)
>>> ans = u1.sample((2,3), low_b, high_b)
>>> print(ans.shape)
(2, 3, 2)
>>> ans = u2.sample((2,3), low_a, high_a)
>>> print(ans.shape)
(2, 3, 2)
high
返回分布的上限。
low
返回分布的下限。

View File

@ -0,0 +1,3 @@
mindspore.nn.probability
用于构造概率网络的高级组件。