pytorch中torch.topk()函数怎么用
发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,这篇文章主要介绍"pytorch中torch.topk()函数怎么用",在日常操作中,相信很多人在pytorch中torch.topk()函数怎么用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的
千家信息网最后更新 2025年11月08日pytorch中torch.topk()函数怎么用
这篇文章主要介绍"pytorch中torch.topk()函数怎么用",在日常操作中,相信很多人在pytorch中torch.topk()函数怎么用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"pytorch中torch.topk()函数怎么用"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
函数作用:


该函数的作用即按字面意思理解,topk:取数组的前k个元素进行排序。
通常该函数返回2个值,第一个值为排序的数组,第二个值为该数组中获取到的元素在原数组中的位置标号。
举个栗子:
import numpy as npimport torchimport torch.utils.data.dataset as Datasetfrom torch.utils.data import Dataset,DataLoader####################准备一个数组#########################tensor1=torch.tensor([[10,1,2,1,1,1,1,1,1,1,10], [3,4,5,1,1,1,1,1,1,1,1], [7,8,9,1,1,1,1,1,1,1,1], [1,4,7,1,1,1,1,1,1,1,1]],dtype=torch.float32)####################打印这个原数组#########################print('tensor1:')print(tensor1)#################使用torch.topk()这个函数##################print('使用torch.topk()这个函数得到:')'''k=3代表从原数组中取得3个元素,dim=1表示从原数组中的第一维获取元素(在本例中是分别从[10,1,2,1,1,1,1,1,1,1,10]、[3,4,5,1,1,1,1,1,1,1,1]、 [7,8,9,1,1,1,1,1,1,1,1]、[1,4,7,1,1,1,1,1,1,1,1]这四个数组中获取3个元素)其中largest=True表示从大到小取元素'''print(torch.topk(tensor1, k=3, dim=1, largest=True))#################打印这个函数第一个返回值####################print('函数第一个返回值topk[0]如下')print(torch.topk(tensor1, k=3, dim=1, largest=True)[0])#################打印这个函数第二个返回值####################print('函数第二个返回值topk[1]如下')print(torch.topk(tensor1, k=3, dim=1, largest=True)[1])'''#######################运行结果##########################tensor1:tensor([[10., 1., 2., 1., 1., 1., 1., 1., 1., 1., 10.], [ 3., 4., 5., 1., 1., 1., 1., 1., 1., 1., 1.], [ 7., 8., 9., 1., 1., 1., 1., 1., 1., 1., 1.], [ 1., 4., 7., 1., 1., 1., 1., 1., 1., 1., 1.]])使用torch.topk()这个函数得到:'得到的values是原数组dim=1的四组从大到小的三个元素值;得到的indices是获取到的元素值在原数组dim=1中的位置。'torch.return_types.topk(values=tensor([[10., 10., 2.], [ 5., 4., 3.], [ 9., 8., 7.], [ 7., 4., 1.]]),indices=tensor([[ 0, 10, 2], [ 2, 1, 0], [ 2, 1, 0], [ 2, 1, 0]]))函数第一个返回值topk[0]如下tensor([[10., 10., 2.], [ 5., 4., 3.], [ 9., 8., 7.], [ 7., 4., 1.]]) 函数第二个返回值topk[1]如下tensor([[ 0, 10, 2], [ 2, 1, 0], [ 2, 1, 0], [ 2, 1, 0]])'''该函数功能经常用来获取张量或者数组中最大或者最小的元素以及索引位置,是一个经常用到的基本函数。
实例演示
任务一:
取top1(最大值):
pred = torch.tensor([[-0.5816, -0.3873, -1.0215, -1.0145, 0.4053], [ 0.7265, 1.4164, 1.3443, 1.2035, 1.8823], [-0.4451, 0.1673, 1.2590, -2.0757, 1.7255], [ 0.2021, 0.3041, 0.1383, 0.3849, -1.6311]])print(pred)values, indices = pred.topk(1, dim=0, largest=True, sorted=True)print(indices)print(values)# 用max得到的结果,设置keepdim为True,避免降维。因为topk函数返回的index不降维,shape和输入一致。_, indices_max = pred.max(dim=0, keepdim=True)print(indices_max)print(indices_max == indices)输出:tensor([[-0.5816, -0.3873, -1.0215, -1.0145, 0.4053], [ 0.7265, 1.4164, 1.3443, 1.2035, 1.8823], [-0.4451, 0.1673, 1.2590, -2.0757, 1.7255], [ 0.2021, 0.3041, 0.1383, 0.3849, -1.6311]])tensor([[1, 1, 1, 1, 1]])tensor([[0.7265, 1.4164, 1.3443, 1.2035, 1.8823]])tensor([[1, 1, 1, 1, 1]])tensor([[True, True, True, True, True]])
任务二:
按行取出topk,将小于topk的置为inf:
pred = torch.tensor([[-0.5816, -0.3873, -1.0215, -1.0145, 0.4053], [ 0.7265, 1.4164, 1.3443, 1.2035, 1.8823], [-0.4451, 0.1673, 1.2590, -2.0757, 1.7255], [ 0.2021, 0.3041, 0.1383, 0.3849, -1.6311]])print(pred)top_k = 2 # 按行求出每一行的最大的前两个值filter_value=-float('Inf')indices_to_remove = pred < torch.topk(pred, top_k)[0][..., -1, None]print(indices_to_remove)pred[indices_to_remove] = filter_value # 对于topk之外的其他元素的logits值设为负无穷print(pred) 输出:tensor([[-0.5816, -0.3873, -1.0215, -1.0145, 0.4053], [ 0.7265, 1.4164, 1.3443, 1.2035, 1.8823], [-0.4451, 0.1673, 1.2590, -2.0757, 1.7255], [ 0.2021, 0.3041, 0.1383, 0.3849, -1.6311]])tensor([[4], [4], [4], [3]])tensor([[0.4053], [1.8823], [1.7255], [0.3849]])tensor([[ True, False, True, True, False], [ True, False, True, True, False], [ True, True, False, True, False], [ True, False, True, False, True]])tensor([[ -inf, -0.3873, -inf, -inf, 0.4053], [ -inf, 1.4164, -inf, -inf, 1.8823], [ -inf, -inf, 1.2590, -inf, 1.7255], [ -inf, 0.3041, -inf, 0.3849, -inf]])任务三:
import numpy as npimport torchimport torch.utils.data.dataset as Datasetfrom torch.utils.data import Dataset,DataLoadertensor1=torch.tensor([[10,1,2,1,1,1,1,1,1,1,10], [3,4,5,1,1,1,1,1,1,1,1], [7,8,9,1,1,1,1,1,1,1,1], [1,4,7,1,1,1,1,1,1,1,1]],dtype=torch.float32)# tensor2=torch.tensor([[3,2,1],# [6,5,4],# [1,4,7],# [9,8,7]],dtype=torch.float32)#print('tensor1:')print(tensor1)print('直接输出topk,会得到两个东西,我们需要的是第二个indices')print(torch.topk(tensor1, k=3, dim=1, largest=True))print('topk[0]如下')print(torch.topk(tensor1, k=3, dim=1, largest=True)[0])print('topk[1]如下')print(torch.topk(tensor1, k=3, dim=1, largest=True)[1])'''tensor1:tensor([[10., 1., 2., 1., 1., 1., 1., 1., 1., 1., 10.], [ 3., 4., 5., 1., 1., 1., 1., 1., 1., 1., 1.], [ 7., 8., 9., 1., 1., 1., 1., 1., 1., 1., 1.], [ 1., 4., 7., 1., 1., 1., 1., 1., 1., 1., 1.]])直接输出topk,会得到两个东西,我们需要的是第二个indicestorch.return_types.topk(values=tensor([[10., 10., 2.], [ 5., 4., 3.], [ 9., 8., 7.], [ 7., 4., 1.]]),indices=tensor([[ 0, 10, 2], [ 2, 1, 0], [ 2, 1, 0], [ 2, 1, 0]]))topk[0]如下tensor([[10., 10., 2.], [ 5., 4., 3.], [ 9., 8., 7.], [ 7., 4., 1.]])topk[1]如下tensor([[ 0, 10, 2], [ 2, 1, 0], [ 2, 1, 0], [ 2, 1, 0]])'''到此,关于"pytorch中torch.topk()函数怎么用"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
函数
数组
元素
学习
输出
最大
两个
任务
位置
东西
作用
更多
结果
帮助
排序
实用
最小
一致
接下来
一行
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
服务器机械硬盘寿命一般多久
东城区软件开发技术指导
hp服务器售前电话
芯片数据库怎么样
如何用身份证在数据库中获取地址
网络安全宣传标语28字
如何查看ftp服务器是否满了
服务器怎么设置系统白名单
如何读取电子健康卡软件开发
软件开发项目技术水平怎么写
hp服务器显示器不亮
河南税务网络安全宣传周知识题
系统软件开发h
1号数据库怎么样
高精地图软件开发
dnf服务器深渊测试
服务器未使用的端口
app开发用哪个服务器
外卖软件开发步骤
软件开发 保密合同范本
台湾网络安全事件
软件开发泄密需要负刑事责任吗
万方数据是什么数据库
四年级网络安全图画怎么画
马鞍山软件开发制作
茂名软件开发公司行业
小程序如何选择服务器营运商
数据库锁使用场景
中国服务器排名
软件开发都用哪些系统