PyTorch中topk函數(shù)的用法詳解
聽名字就知道這個函數(shù)是用來求tensor中某個dim的前k大或者前k小的值以及對應的index。
用法
torch.topk(input, k, dim=None, largest=True, sorted=True, out=None) -> (Tensor, LongTensor)
input:一個tensor數(shù)據(jù)
k:指明是得到前k個數(shù)據(jù)以及其index
dim: 指定在哪個維度上排序, 默認是最后一個維度
largest:如果為True,按照大到小排序; 如果為False,按照小到大排序
sorted:返回的結(jié)果按照順序返回
out:可缺省,不要
topk最常用的場合就是求一個樣本被網(wǎng)絡認為前k個最可能屬于的類別。我們就用這個場景為例,說明函數(shù)的使用方法。
假設一個,N是樣本數(shù)目,一般等于batch size, D是類別數(shù)目。我們想知道每個樣本的最可能屬于的那個類別,其實可以用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得到的結(jié)果,設置keepdim為True,避免降維。因為topk函數(shù)返回的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]])
現(xiàn)在在嘗試一下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]])
可以發(fā)現(xiàn)indices的shape變成了【4, k】,k=2。
其中indices[0] = [2,3]。其意義是說明第一個樣本的前兩個最大概率對應的類別分別是第3類和第4類。
大家可以自行print一下values??梢园l(fā)現(xiàn)values的shape和indices的shape是一樣的。indices描述了在values中對應的值在pred中的位置。
以上這篇PyTorch中topk函數(shù)的用法詳解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Python的Flask框架應用程序?qū)崿F(xiàn)使用QQ賬號登錄的方法
利用QQ開放平臺的API使用QQ賬號登錄是現(xiàn)在很多網(wǎng)站都具備的功能,而對于Flask框架來說則有Flask-OAuthlib這個現(xiàn)成的輪子,這里我們就來看一下Python的Flask框架應用程序?qū)崿F(xiàn)使用QQ賬號登錄的方法2016-06-06Python內(nèi)置函數(shù)map()的具體使用
Python中的map()函數(shù)是一個高效的內(nèi)置函數(shù),用于將指定函數(shù)應用于序列的每個元素,通過接收一個函數(shù)和一個或多個序列,本文就來詳細的介紹一下如何使用,感興趣的可以了解一下2024-09-09Python3.5內(nèi)置模塊之os模塊、sys模塊、shutil模塊用法實例分析
這篇文章主要介紹了Python3.5內(nèi)置模塊之os模塊、sys模塊、shutil模塊用法,結(jié)合實例形式分析了Python os模塊、sys模塊及shutil模塊針對文件、路徑等相關操作技巧,需要的朋友可以參考下2019-04-04python opencv角點檢測連線功能的實現(xiàn)代碼
這篇文章主要介紹了python opencv角點檢測連線功能的實現(xiàn)代碼,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-11-11Python+Mysql實現(xiàn)登錄注冊完整代碼示例
在開發(fā)中用戶注冊和登錄是常見的功能需求,這篇文章主要給大家介紹了關于Python+Mysql實現(xiàn)登錄注冊的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2024-03-03