PyTorch中topk函数的用法详解

作者:咆哮的阿杰 时间:2022-11-08 13:55:52 

听名字就知道这个函数是用来求tensor中某个dim的前k大或者前k小的值以及对应的index。

用法


torch.topk(input, k, dim=None, largest=True, sorted=True, out=None) -> (Tensor, LongTensor)

input:一个tensor数据

k:指明是得到前k个数据以及其index

dim: 指定在哪个维度上排序, 默认是最后一个维度

largest:如果为True,按照大到小排序; 如果为False,按照小到大排序

sorted:返回的结果按照顺序返回

out:可缺省,不要

topk最常用的场合就是求一个样本被网络认为前k个最可能属于的类别。我们就用这个场景为例,说明函数的使用方法。

假设一个PyTorch中topk函数的用法详解,N是样本数目,一般等于batch size, D是类别数目。我们想知道每个样本的最可能属于的那个类别,其实可以用torch.max得到。如果要使用topk,则k应该设置为1。


import torch

pred = torch.randn((4, 5))
print(pred)
values, indices = pred.topk(1, dim=1, largest=True, sorted=True)
print(indices)
# 用max得到的结果,设置keepdim为True,避免降维。因为topk函数返回的index不降维,shape和输入一致。
_, indices_max = pred.max(dim=1, keepdim=True)

print(indices_max == indices)
# pred
tensor([[-0.1480, -0.9819, -0.3364, 0.7912, -0.3263],
   [-0.8013, -0.9083, 0.7973, 0.1458, -0.9156],
   [-0.2334, -0.0142, -0.5493, 0.0673, 0.8185],
   [-0.4075, -0.1097, 0.8193, -0.2352, -0.9273]])
# indices, shape为 【4,1】,
tensor([[3],  #【0,0】代表 第一个样本最可能属于第一类别
   [2],  # 【1, 0】代表第二个样本最可能属于第二类别
   [4],
   [2]])
# indices_max等于indices
tensor([[True],
   [True],
   [True],
   [True]])

现在在尝试一下k=2


import torch

pred = torch.randn((4, 5))
print(pred)
values, indices = pred.topk(2, dim=1, largest=True, sorted=True) # k=2
print(indices)
# pred
tensor([[-0.2203, -0.7538, 1.8789, 0.4451, -0.2526],
   [-0.0413, 0.6366, 1.1155, 0.3484, 0.0395],
   [ 0.0365, 0.5158, 1.1067, -0.9276, -0.2124],
   [ 0.6232, 0.9912, -0.8562, 0.0148, 1.6413]])
# indices
tensor([[2, 3],
   [2, 1],
   [2, 1],
   [4, 1]])

可以发现indices的shape变成了【4, k】,k=2。

其中indices[0] = [2,3]。其意义是说明第一个样本的前两个最大概率对应的类别分别是第3类和第4类。

大家可以自行print一下values。可以发现values的shape和indices的shape是一样的。indices描述了在values中对应的值在pred中的位置。

来源:https://blog.csdn.net/qq_34914551/article/details/103738160

标签:PyTorch,topk
0
投稿

猜你喜欢

  • Python参数解析器configparser简介

    2021-04-22 02:23:31
  • MySQL中union和order by同时使用的实现方法

    2024-01-26 22:48:45
  • 设计师如何更有效拿到结果?

    2008-09-22 20:30:00
  • python深度学习tensorflow1.0参数初始化initializer

    2022-11-01 05:00:12
  • python实现抖音视频批量下载

    2023-12-06 10:30:20
  • ASP实现控制虚拟主机功能的函数ADSI

    2008-10-12 13:12:00
  • ASP使用缓存方法及缓存类详解

    2008-02-15 08:36:00
  • Python OpenCV基于HSV的颜色分割实现示例

    2021-11-04 19:24:26
  • 纯CSS Tooltips提示

    2008-10-18 16:01:00
  • 详解python进行mp3格式判断

    2023-11-06 14:08:20
  • Python使用numpy实现BP神经网络

    2021-11-26 22:16:32
  • python 通过SSHTunnelForwarder隧道连接redis的方法

    2021-03-08 12:58:41
  • Python 面向对象编程详解

    2023-06-25 05:24:23
  • python 2.7.13 安装配置方法图文教程

    2023-11-13 11:54:37
  • python3 assert 断言的使用详解 (区别于python2)

    2023-03-10 03:05:26
  • python正则表达式中的括号匹配问题

    2023-07-26 01:36:24
  • 高效地获取XMLhttp对象

    2010-01-19 13:49:00
  • Python3.7+tkinter实现查询界面功能

    2023-05-16 18:24:54
  • Python中集合创建与使用详解

    2022-04-30 05:29:42
  • python实现括号匹配的思路详解

    2023-08-24 16:50:30
  • asp之家 网络编程 m.aspxhome.com