mindspore.ops.LogUniformCandidateSampler

class mindspore.ops.LogUniformCandidateSampler(num_true=1, num_sampled=5, unique=True, range_max=5, seed=0)[源代码]

使用log-uniform(Zipfian)分布对一组类别进行采样。

该操作从整数范围[0, range_max )中随机采样一个采样类( sampled_candidates )的Tensor。

参数:

  • num_true (int) - 每个训练样本的目标类数。默认值:1。

  • num_sampled (int) - 随机采样的类数。默认值:5。

  • unique (bool) - 确认批处理中的所有采样类是否都是唯一的。如果 unique 为True,则批处理中的所有采样类都唯一。默认值:True。

  • range_max (int) - 可能的类数。当 unique 为True时, range_max 必须大于或等于 num_sampled 。默认值:5。

  • seed (int) - 随机种子,必须是非负。默认值:0。

输入:

  • true_classes (Tensor) - 目标类,其数据类型为int64,shape为 \((batch\_size, num\_true)\)

输出:

3个Tensor组成的元组。

  • sampled_candidates (Tensor) - shape为 \((num\_sampled,)\) 且数据类型与 true_classes 相同的Tensor。

  • true_expected_count (Tensor) - shape与 true_classes 相同且数据类型为float32的Tensor。

  • sampled_expected_count (Tensor) - shape与 sampled_candidates 相同且数据类型为float32的Tensor。

异常:

  • TypeError - num_truenum_sampled 都不是int。

  • TypeError - unique 不是bool。

  • TypeError - range_maxseed 都不是int。

  • TypeError - true_classes 不是Tensor。

支持平台:

Ascend

样例:

>>> sampler = ops.LogUniformCandidateSampler(2, 5, True, 5)
>>> output1, output2, output3 = sampler(Tensor(np.array([[1, 7], [0, 4], [3, 3]])))
>>> print(output1, output2, output3)
[3 2 0 4 1]
[[0.92312991 0.49336370]
 [0.99248987 0.65806371]
 [0.73553443 0.73553443]]
[0.73553443 0.82625800 0.99248987 0.65806371 0.92312991]