比较与torch.topk的功能差异
torch.topk
torch.topk(
input,
k,
dim=None,
largest=True,
sorted=True,
out=None
)
更多内容详见torch.topk。
mindspore.ops.TopK
class mindspore.ops.TopK(
sorted=False
)(input_x, k)
更多内容详见mindspore.ops.TopK。
使用方式
PyTorch:支持获取指定维度的前k项最大或最小值。
MindSpore:目前仅支持获取最后维度的前k项最大值。
代码示例
import mindspore as ms
import mindspore.ops as ops
import torch
# In MindSpore, obtain the first k largest entries of the last dimension.
topk = ops.TopK()
k = 3
input_x = ms.Tensor([[1, 2, 3, 4], [2, 4, 6, 8]], ms.float16)
values, indices = topk(input_x, k)
print(values)
print(indices)
# Out:
# [[4. 3. 2.]]
# [[8. 6. 4.]]
# [[3 2 1]]
# [[3 2 1]]
# In torch, obtain the first k largest or smallest entries of a specific dimension.
# largest=True
input_x = torch.tensor([[1, 2, 3, 4], [2, 4, 6, 8]], dtype=torch.float)
dim = 1
output = torch.topk(input_x, k, dim=dim, largest=True)
print(output)
# Out:
# torch.return_types.topk(
# values=tensor([[4., 3., 2.],
# [8., 6., 4.]]),
# indices=tensor([[3, 2, 1],
# [3, 2, 1]]))
# largest=False
output = torch.topk(input_x, k, dim=dim, largest=False)
print(output)
# Out:
# torch.return_types.topk(
# values=tensor([[1., 2., 3.],
# [2., 4., 6.]]),
# indices=tensor([[0, 1, 2],
# [0, 1, 2]]))