PyTorch中topk函数的用法详解


Posted in Python onJanuary 02, 2020

听名字就知道这个函数是用来求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中的位置。

以上这篇PyTorch中topk函数的用法详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python使用scrapy采集时伪装成HTTP/1.1的方法
Apr 08 Python
深入讲解Python中的迭代器和生成器
Oct 26 Python
python读取文本绘制动态速度曲线
Jun 21 Python
Python比较配置文件的方法实例详解
Jun 06 Python
python网络编程 使用UDP、TCP协议收发信息详解
Aug 29 Python
Pytorch中index_select() 函数的实现理解
Nov 19 Python
基于python实现FTP文件上传与下载操作(ftp&sftp协议)
Apr 01 Python
Django高并发负载均衡实现原理详解
Apr 04 Python
python爬虫使用正则爬取网站的实现
Aug 03 Python
python 多线程中join()的作用
Oct 29 Python
最新版 Windows10上安装Python 3.8.5的步骤详解
Nov 28 Python
python3 kubernetes api的使用示例
Jan 12 Python
Pytorch训练过程出现nan的解决方式
Jan 02 #Python
pytorch绘制并显示loss曲线和acc曲线,LeNet5识别图像准确率
Jan 02 #Python
基于MSELoss()与CrossEntropyLoss()的区别详解
Jan 02 #Python
python使用SQLAlchemy操作MySQL
Jan 02 #Python
pytorch 实现cross entropy损失函数计算方式
Jan 02 #Python
Matplotlib scatter绘制散点图的方法实现
Jan 02 #Python
Python基础之函数基本用法与进阶详解
Jan 02 #Python
You might like
php部分常见问题总结
2008/03/27 PHP
PHP循环遍历数组的3种方法list()、each()和while总结
2014/11/19 PHP
php自定文件保存session的方法
2014/12/10 PHP
php封装的验证码类分享
2017/02/26 PHP
Yii框架学习笔记之session与cookie简单操作示例
2019/04/30 PHP
JScript中使用ADODB.Stream判断文件编码的代码
2008/06/09 Javascript
JavaScript 脚本将当地时间转换成其它时区
2009/03/19 Javascript
Kibo 用于处理键盘事件的Javascript工具库
2011/10/28 Javascript
jQuery动画效果-slideUp slideDown上下滑动示例代码
2013/08/28 Javascript
JavaScript中String.prototype用法实例
2015/05/20 Javascript
浅谈EasyUI常用控件的禁用方法
2016/11/09 Javascript
javascript解析ajax返回的xml和json格式数据实例详解
2017/01/05 Javascript
nodejs入门教程五:连接数据库的方法分析
2017/04/24 NodeJs
bootstrap手风琴折叠示例代码分享
2017/05/22 Javascript
使用html+js+css 实现页面轮播图效果(实例讲解)
2017/09/21 Javascript
JavaScript Date对象应用实例分享
2017/10/30 Javascript
Vue.js 图标选择组件实践详解
2018/12/03 Javascript
vue 基于element-ui 分页组件封装的实例代码
2018/12/10 Javascript
详解用JS添加和删除class类名
2019/03/25 Javascript
vue 获取元素额外生成的data-v-xxx操作
2020/09/09 Javascript
Python中几个比较常见的名词解释
2015/07/04 Python
一道python走迷宫算法题
2018/01/22 Python
教你用一行Python代码实现并行任务(附代码)
2018/02/02 Python
python向字符串中添加元素的实例方法
2019/06/28 Python
python GUI库图形界面开发之PyQt5切换按钮控件QPushButton详细使用方法与实例
2020/02/28 Python
关于Python字符编码与二进制不得不说的一些事
2020/10/04 Python
OpenCV读取与写入图片的实现
2020/10/13 Python
利用CSS3的定位页面元素
2009/08/29 HTML / CSS
CSS3实现10种Loading效果
2016/07/11 HTML / CSS
泰国演唱会订票网站:StubHub泰国
2018/02/26 全球购物
DBA数据库管理员JAVA程序员架构师必看
2016/02/07 面试题
学校政风行风评议工作总结
2014/10/21 职场文书
怎么写工作检讨书
2014/11/16 职场文书
2014年残联工作总结
2014/11/21 职场文书
创业计划书之电动车企业
2019/10/11 职场文书
Redis超详细讲解高可用主从复制基础与哨兵模式方案
2022/04/07 Redis