topk¶
- paddle.fluid.layers.nn. topk ( input, k, name=None ) [source]
-
- Alias_main
-
paddle.topk :alias: paddle.topk,paddle.tensor.topk,paddle.tensor.search.topk :old_api: paddle.fluid.layers.topk
This OP is used to find values and indices of the k largest entries for the last dimension.
If the input is a 1-D Tensor, finds the k largest entries and outputs their values and indices.
If the input is a Tensor with higher rank, this operator computes the top k entries along the last dimension.
Case 1: Input: input.shape = [3, 4] input.data = [[5, 4, 2, 3], [9, 7, 10, 25], [6, 2, 10, 1]] k = 2 Output: The first output: values.shape = [3, 2] values.data = [[5, 4], [10, 25], [6, 10]] The second output: indices.shape = [3, 2] indices.data = [[0, 1], [2, 3], [0, 2]]
- Parameters
-
input (Variable) – The input tensor. Support data types: float32, float64.
k (int | Variable) – The number of top elements to look for along the last dimension of input tensor.
name (str, optional) – Please refer to Name, Default None.
- Returns
-
Input tensor’s k largest elements along each last dimensional slice. The dimension is: \(input.shape[:-1]+[k]\). Indices (Variable): Indices of k largest elements alone the last dimension of input. The dimension is same as values.
- Return type
-
Values (Variable)
- Raises
-
ValueError – If \(k < 1\) or \(k > last dimension of input\).
Examples
import paddle.fluid as fluid import paddle.fluid.layers as layers # set batch size=None input = fluid.data(name="input", shape=[None, 13, 11], dtype='float32') top5_values, top5_indices = layers.topk(input, k=5) # top5_values.shape[None, 13, 5], top5_indices.shape=[None, 13, 5] # 1D Tensor input1 = fluid.data(name="input1", shape=[None, 13], dtype='float32') top5_values, top5_indices = layers.topk(input1, k=5) #top5_values.shape=[None, 5], top5_indices.shape=[None, 5] # k=Variable input2 = fluid.data(name="input2", shape=[None, 13, 11], dtype='float32') vk = fluid.data(name="vk", shape=[None, 1], dtype='int32') # save k in vk.data[0] vk_values, vk_indices = layers.topk(input2, k=vk) #vk_values.shape=[None, 13, k], vk_indices.shape=[None, 13, k]