Categorical

class paddle.distribution.Categorical ( logits, name\=None ) [源代码]

类别分布是一种离散概率分布,其随机变量可以取K个相互独立类别的其中一个。

概率质量函数(pmf)为:

Categorical - 图1

上面公式中:

  • Categorical - 图2

    表示:如果 x\=\=ix\==i ,则表达式取值为1,否则取值为0。

参数:

  • logits (list|numpy.ndarray|Tensor) - 类别分布对应的logits。数据类型为float32或float64。

  • name (str,可选) - 操作的名称(可选,默认值为None)。更多信息请参见 Name

代码示例

  1. import paddle
  2. from paddle.distribution import Categorical
  3. paddle.seed(100) # on CPU device
  4. x = paddle.rand([6])
  5. print(x)
  6. # [0.5535528 0.20714243 0.01162981
  7. # 0.51577556 0.36369765 0.2609165 ]
  8. paddle.seed(200) # on CPU device
  9. y = paddle.rand([6])
  10. print(y)
  11. # [0.77663314 0.90824795 0.15685187
  12. # 0.04279523 0.34468332 0.7955718 ]
  13. cat = Categorical(x)
  14. cat2 = Categorical(y)
  15. paddle.seed(1000) # on CPU device
  16. cat.sample([2,3])
  17. # [[0, 0, 5],
  18. # [3, 4, 5]]
  19. cat.entropy()
  20. # [1.77528]
  21. cat.kl_divergence(cat2)
  22. # [0.071952]
  23. value = paddle.to_tensor([2,1,3])
  24. cat.probs(value)
  25. # [0.00608027 0.108298 0.269656]
  26. cat.log_prob(value)
  27. # [-5.10271 -2.22287 -1.31061]

sample ( shape )

生成指定维度的样本

参数:

  • shape (list) - 指定生成样本的维度。

返回:预先设计好维度的张量

返回类型:Tensor

代码示例:

  1. import paddle
  2. from paddle.distribution import Categorical
  3. paddle.seed(100) # on CPU device
  4. x = paddle.rand([6])
  5. print(x)
  6. # [0.5535528 0.20714243 0.01162981
  7. # 0.51577556 0.36369765 0.2609165 ]
  8. cat = Categorical(x)
  9. paddle.seed(1000) # on CPU device
  10. cat.sample([2,3])
  11. # [[0, 0, 5],
  12. # [3, 4, 5]]

kl_divergence ( other )

相对于另一个类别分布的KL散度

参数:

  • other (Categorical) - 输入的另一个类别分布。数据类型为float32。

返回:相对于另一个类别分布的KL散度, 数据类型为float32

返回类型:Tensor

代码示例:

  1. import paddle
  2. from paddle.distribution import Categorical
  3. paddle.seed(100) # on CPU device
  4. x = paddle.rand([6])
  5. print(x)
  6. # [0.5535528 0.20714243 0.01162981
  7. # 0.51577556 0.36369765 0.2609165 ]
  8. paddle.seed(200) # on CPU device
  9. y = paddle.rand([6])
  10. print(y)
  11. # [0.77663314 0.90824795 0.15685187
  12. # 0.04279523 0.34468332 0.7955718 ]
  13. cat = Categorical(x)
  14. cat2 = Categorical(y)
  15. cat.kl_divergence(cat2)
  16. # [0.071952]

entropy ( )

信息熵

返回:类别分布的信息熵, 数据类型为float32

返回类型:Tensor

代码示例:

  1. import paddle
  2. from paddle.distribution import Categorical
  3. paddle.seed(100) # on CPU device
  4. x = paddle.rand([6])
  5. print(x)
  6. # [0.5535528 0.20714243 0.01162981
  7. # 0.51577556 0.36369765 0.2609165 ]
  8. cat = Categorical(x)
  9. cat.entropy()
  10. # [1.77528]

probs ( value )

所选择类别的概率。 如果 logtis 是2-D或更高阶的Tensor,那么其最后一个维度表示不同类别的概率,其它维度被看做不同的概率分布。 同时,如果 value 是1-D Tensor,那么 value 会broadcast成与 logits 具有相同的概率分布数量。 如果 value 为更高阶Tensor,那么 value 应该与 logits 具有相同的概率分布数量。也就是说, value[:-1] = logits[:-1]

参数:

  • value (Tensor) - 输入张量, 表示选择的类别下标。数据类型为int32或int64。

返回:给定类别下标的概率

返回类型:Tensor

  1. import paddle
  2. from paddle.distribution import Categorical
  3. paddle.seed(100) # on CPU device
  4. x = paddle.rand([6])
  5. print(x)
  6. # [0.5535528 0.20714243 0.01162981
  7. # 0.51577556 0.36369765 0.2609165 ]
  8. cat = Categorical(x)
  9. value = paddle.to_tensor([2,1,3])
  10. cat.probs(value)
  11. # [0.00608027 0.108298 0.269656]

log_prob ( value )

所选择类别的对数概率

参数:

  • value (Tensor) - 输入张量, 表示选择的类别下标。数据类型为int32或int64。

返回:对数概率

返回类型:Tensor

  1. import paddle
  2. from paddle.distribution import Categorical
  3. paddle.seed(100) # on CPU device
  4. x = paddle.rand([6])
  5. print(x)
  6. # [0.5535528 0.20714243 0.01162981
  7. # 0.51577556 0.36369765 0.2609165 ]
  8. cat = Categorical(x)
  9. value = paddle.to_tensor([2,1,3])
  10. cat.log_prob(value)
  11. # [-5.10271 -2.22287 -1.31061]