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爬虫之urllib2中的两个重要概念:Openers和Handlers
Nov 05 Python
解决Linux系统中python matplotlib画图的中文显示问题
Jun 15 Python
python 创建弹出式菜单的实现代码
Jul 11 Python
pandas对指定列进行填充的方法
Apr 11 Python
django加载本地html的方法
May 27 Python
如何在Django中添加没有微秒的 DateTimeField 属性详解
Jan 30 Python
Python 虚拟空间的使用代码详解
Jun 10 Python
Python实现某论坛自动签到功能
Aug 20 Python
django 框架实现的用户注册、登录、退出功能示例
Nov 28 Python
如何利用pygame实现简单的五子棋游戏
Dec 29 Python
详解python安装matplotlib库三种失败情况
Jul 28 Python
python的链表基础知识点
Sep 13 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
乐信RP2100的电路分析和打磨
2021/03/02 无线电
php获取后台Job管理的实现代码
2011/06/10 PHP
PHP的SQL注入过程分析
2012/01/06 PHP
php5.4以上版本GBK编码下htmlspecialchars输出为空问题解决方法汇总
2015/04/03 PHP
基于swoole实现多人聊天室
2018/06/14 PHP
laravel 修改记住我功能的cookie保存时间的方法
2019/10/14 PHP
Jquery练习之表单验证实现代码
2010/12/14 Javascript
offsetHeight在OnLoad中获取为0的现象
2013/07/22 Javascript
jquery.cookie() 方法的使用(读取、写入、删除)
2013/12/05 Javascript
jquery ajax 如何向jsp提交表单数据
2015/08/23 Javascript
jquery在ie7下选择器的问题导致append失效的解决方法
2016/01/10 Javascript
JavaScript实现字符串与日期的互相转换及日期的格式化
2016/03/07 Javascript
微信JS接口大全
2016/08/25 Javascript
angularJS 发起$http.post和$http.get请求的实现方法
2017/05/18 Javascript
详解Vue微信授权登录前后端分离较为优雅的解决方案
2018/06/29 Javascript
Vue项目引发的「过滤器」使用教程
2019/03/12 Javascript
详解小程序之简单登录注册表单验证
2019/05/13 Javascript
解决vue打包报错Unexpected token: punc的问题
2020/10/24 Javascript
[01:16]2014DOTA2 TI专访C9战队EE:中国五强中会占三席
2014/07/10 DOTA
[01:11]回顾历届DOTA2国际邀请赛中国区预选赛
2017/06/26 DOTA
跟老齐学Python之集成开发环境(IDE)
2014/09/12 Python
Python3中的bytes和str类型详解
2019/05/02 Python
pytorch中获取模型input/output shape实例
2019/12/30 Python
Pytorch使用MNIST数据集实现基础GAN和DCGAN详解
2020/01/10 Python
python多线程实现代码(模拟银行服务操作流程)
2020/01/13 Python
基于Python实现下载网易音乐代码实例
2020/08/10 Python
jupyter notebook 写代码自动补全的实现
2020/11/02 Python
PyQt5中QSpinBox计数器的实现
2021/01/18 Python
JD Sports马来西亚:英国领先的运动鞋和运动服饰零售商
2018/03/13 全球购物
Fossil德国官网:化石手表、手袋、珠宝及配件
2019/12/07 全球购物
数据库什么时候应该被重组
2012/11/02 面试题
房地产项目建议书
2014/03/12 职场文书
幼儿园安全责任书
2014/04/14 职场文书
生产助理岗位职责
2014/06/18 职场文书
工程承包协议书范本
2014/09/29 职场文书
电子表的操作介绍说明书
2019/10/28 职场文书