最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

pytorch中torch.topk()函數的快速理解

 更新時間:2022年02月25日 10:08:11   作者:Neo很努力  
我們在做分類算法時,時常見到@acc1和@acc5的情況,@acc1比較容易實現,但是一直苦于@acc5算法的實現,在此為大家提供一種@topk的實現方法,這篇文章主要給大家介紹了關于pytorch中torch.topk()函數的快速理解,需要的朋友可以參考下

函數作用:

該函數的作用即按字面意思理解,topk:取數組的前k個元素進行排序。

通常該函數返回2個值,第一個值為排序的數組,第二個值為該數組中獲取到的元素在原數組中的位置標號。

舉個栗子:

import numpy as np
import torch
import torch.utils.data.dataset as Dataset
from 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個元素)
其中l(wèi)argest=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 np
import torch
import torch.utils.data.dataset as Dataset
from 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)
# 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,會得到兩個東西,我們需要的是第二個indices
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]])
'''

總結

到此這篇關于pytorch中torch.topk()函數快速理解的文章就介紹到這了,更多相關pytorch torch.topk()函數理解內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Pycharm設置自動代碼提示的超詳細圖文教程

    Pycharm設置自動代碼提示的超詳細圖文教程

    有時候我們在使用pycharm編寫python代碼的時候,發(fā)現沒有代碼提示,怎么解決呢?下面這篇文章主要給大家介紹了關于Pycharm設置自動代碼提示的超詳細圖文教程,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2023-05-05
  • Python PIL庫圖片灰化處理

    Python PIL庫圖片灰化處理

    這篇文章主要介紹了Python圖片灰化處理PIL庫的相關知識,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • Python實現快速查找并替換Excel中的數據

    Python實現快速查找并替換Excel中的數據

    Excel中的查找替換是一個非常實用的功能,能夠幫助用戶快速完成大量數據的整理和處理工作,避免手動逐一修改數據的麻煩,提高工作效率,所以本文給大家介紹了Python實現快速查找并替換Excel中的數據,需要的朋友可以參考下
    2024-06-06
  • Python中的特殊語法:filter、map、reduce、lambda介紹

    Python中的特殊語法:filter、map、reduce、lambda介紹

    這篇文章主要介紹了Python中的特殊語法:filter、map、reduce、lambda介紹,本文分別對這個特殊語法給出了代碼實例,需要的朋友可以參考下
    2015-04-04
  • Python數據合并的concat函數與merge函數詳解

    Python數據合并的concat函數與merge函數詳解

    大家都知道concat()函數可以沿著一條軸將多個對象進行堆疊,其使用方式類似數據庫中的數據表合并,在使用merge()函數進行合并時,默認會使用重疊的列索引做為合并鍵,即取行索引重疊的部分,本文給大家介紹python?數據合并concat函數與merge函數,感興趣的朋友一起看看吧
    2022-05-05
  • 基于Django ORM、一對一、一對多、多對多的全面講解

    基于Django ORM、一對一、一對多、多對多的全面講解

    今天小編就為大家分享一篇基于Django ORM、一對一、一對多、多對多的全面講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • PyTorch+LSTM實現單變量時間序列預測

    PyTorch+LSTM實現單變量時間序列預測

    時間序列是指在一段時間內發(fā)生的任何可量化的度量或事件。這篇文章主要為大家介紹了PyTorch+LSTM實現單變量時間序列預測的相關資料,需要的可以參考一下
    2023-02-02
  • Python報錯too?many?values?to?unpack問題及解決

    Python報錯too?many?values?to?unpack問題及解決

    這篇文章主要介紹了Python報錯too?many?values?to?unpack問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • Python實現哲學家就餐問題實例代碼

    Python實現哲學家就餐問題實例代碼

    這篇文章主要給大家介紹了關于Python實現哲學家就餐問題的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • numpy 計算兩個數組重復程度的方法

    numpy 計算兩個數組重復程度的方法

    今天小編就為大家分享一篇numpy 計算兩個數組重復程度的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11

最新評論

扶余县| 临清市| 马山县| 新营市| 新闻| 桑日县| 什邡市| 铜山县| 禄劝| 太仆寺旗| 阜新市| 江门市| 大名县| 嘉兴市| 夏河县| 博野县| 瑞昌市| 福州市| 定结县| 安岳县| 南丰县| 泌阳县| 万载县| 兰西县| 木兰县| 汾西县| 黔东| 左云县| 蒲城县| 马尔康县| 长宁县| 芦溪县| 航空| 余庆县| 靖江市| 井研县| 沅陵县| 木兰县| 桐柏县| 若羌县| 八宿县|