topk¶
沿着可选的 axis
查找 topk 最大或者最小的结果和结果所在的索引信息。 如果是一维 Tensor,则直接返回 topk 查询的结果。如果是多维 Tensor,则在指定的轴上查询 topk 的结果。
参数¶
x (Tensor) - 输入的多维
Tensor
,支持的数据类型:float32、float64、int32、int64。k (int,Tensor) - 在指定的轴上进行 top 寻找的数量。
axis (int,可选) - 指定对输入 Tensor 进行运算的轴,
axis
的有效范围是[-R, R),R 是输入x
的 Rank,axis
为负时与axis
+ R 等价。默认值为-1。largest (bool,可选) - 指定算法排序的方向。如果设置为 True,排序算法按照降序的算法排序,否则按照升序排序。默认值为 True。
sorted (bool,可选) - 控制返回的结果是否按照有序返回,默认为 True。在 GPU 上总是返回有序的结果。
name (str,可选) - 具体用法请参见 Name,一般无需设置,默认值为 None。
返回¶
tuple(Tensor), 返回 topk 的结果和结果的索引信息。结果的数据类型和输入 x
一致。索引的数据类型是 int64。
代码示例¶
>>> import paddle
>>> data_1 = paddle.to_tensor([1, 4, 5, 7])
>>> value_1, indices_1 = paddle.topk(data_1, k=1)
>>> print(value_1)
Tensor(shape=[1], dtype=int64, place=Place(cpu), stop_gradient=True,
[7])
>>> print(indices_1)
Tensor(shape=[1], dtype=int64, place=Place(cpu), stop_gradient=True,
[3])
>>> data_2 = paddle.to_tensor([[1, 4, 5, 7], [2, 6, 2, 5]])
>>> value_2, indices_2 = paddle.topk(data_2, k=1)
>>> print(value_2)
Tensor(shape=[2, 1], dtype=int64, place=Place(cpu), stop_gradient=True,
[[7],
[6]])
>>> print(indices_2)
Tensor(shape=[2, 1], dtype=int64, place=Place(cpu), stop_gradient=True,
[[3],
[1]])
>>> value_3, indices_3 = paddle.topk(data_2, k=1, axis=-1)
>>> print(value_3)
Tensor(shape=[2, 1], dtype=int64, place=Place(cpu), stop_gradient=True,
[[7],
[6]])
>>> print(indices_3)
Tensor(shape=[2, 1], dtype=int64, place=Place(cpu), stop_gradient=True,
[[3],
[1]])
>>> value_4, indices_4 = paddle.topk(data_2, k=1, axis=0)
>>> print(value_4)
Tensor(shape=[1, 4], dtype=int64, place=Place(cpu), stop_gradient=True,
[[2, 6, 5, 7]])
>>> print(indices_4)
Tensor(shape=[1, 4], dtype=int64, place=Place(cpu), stop_gradient=True,
[[1, 1, 0, 0]])