1. 程式人生 > >pytorch之expand,gather,squeeze,sum,contiguous,softmax,max,argmax

pytorch之expand,gather,squeeze,sum,contiguous,softmax,max,argmax

目錄

sum

max

gather

torch.gather(input,dim,index,out=None)。對指定維進行索引。比如4*3的張量,對dim=1進行索引,那麼index的取值範圍就是0~2.

input是一個張量,index是索引張量。input和index的size要麼全部維度都相同,要麼指定的dim那一維度值不同。輸出為和index大小相同的張量。

import torch
a=torch.tensor([[.1,.2,.3],
                [1.1,1.2,1.3],
                [2.1,2.2,2.3],
                [3.1,3.2,3.3]])
b=torch.LongTensor([[1,2,1],
                    [2,2,2],
                    [2,2,2],
                    [1,1,0]])
b=b.view(4,3)

print(a.gather(1,b))
print(a.gather(0,b))
c=torch.LongTensor([1,2,0,1])
c=c.view(4,1)
print(a.gather(1,c))

輸出:

tensor([[ 0.2000,  0.3000,  0.2000],
        [ 1.3000,  1.3000,  1.3000],
        [ 2.3000,  2.3000,  2.3000],
        [ 3.2000,  3.2000,  3.1000]])
tensor([[ 1.1000,  2.2000,  1.3000],
        [ 2.1000,  2.2000,  2.3000],
        [ 2.1000,  2.2000,  2.3000],
        [ 1.1000,  1.2000,  0.3000]])
tensor([[ 0.2000],
        [ 1.3000],
        [ 2.1000],
        [ 3.2000]])

squeeze 

將維度為1的壓縮掉。如size為(3,1,1,2),壓縮之後為(3,2)

import torch
a=torch.randn(2,1,1,3)
print(a)
print(a.squeeze())

輸出:

tensor([[[[-0.2320,  0.9513,  1.1613]]],


        [[[ 0.0901,  0.9613, -0.9344]]]])
tensor([[-0.2320,  0.9513,  1.1613],
        [ 0.0901,  0.9613, -0.9344]])

expand

擴充套件某個size為1的維度。如(2,2,1)擴充套件為(2,2,3)

import torch
x=torch.randn(2,2,1)
print(x)
y=x.expand(2,2,3)
print(y)

輸出:

tensor([[[ 0.0608],
         [ 2.2106]],

        [[-1.9287],
         [ 0.8748]]])
tensor([[[ 0.0608,  0.0608,  0.0608],
         [ 2.2106,  2.2106,  2.2106]],

        [[-1.9287, -1.9287, -1.9287],
         [ 0.8748,  0.8748,  0.8748]]])

sum

size為(m,n,d)的張量,dim=1時,輸出為size為(m,d)的張量

import torch
a=torch.tensor([[[1,2,3],[4,8,12]],[[1,2,3],[4,8,12]]])
print(a.sum())
print(a.sum(dim=1))

輸出:

tensor(60)
tensor([[  5,  10,  15],
        [  5,  10,  15]])

contiguous

返回一個記憶體為連續的張量,如本身就是連續的,返回它自己。一般用在view()函式之前,因為view()要求呼叫張量是連續的。可以通過is_contiguous檢視張量記憶體是否連續。

import torch
a=torch.tensor([[[1,2,3],[4,8,12]],[[1,2,3],[4,8,12]]])
print(a.is_contiguous)

print(a.contiguous().view(4,3))

輸出:

<built-in method is_contiguous of Tensor object at 0x7f4b5e35afa0>
tensor([[  1,   2,   3],
        [  4,   8,  12],
        [  1,   2,   3],
        [  4,   8,  12]])

softmax

假設陣列V有C個元素。對其進行softmax等價於將V的每個元素的指數除以所有元素的指數之和。這會使值落在區間(0,1)上,並且和為1。

S_{i}=\frac{e^{v_{i}}}{ \sum_{i=1}^{C} e^{v_{i}} }

import torch
import torch.nn.functional as F

a=torch.tensor([[1.,1],[2,1],[3,1],[1,2],[1,3]])
b=F.softmax(a,dim=1)
print(b)

輸出:

tensor([[ 0.5000,  0.5000],
        [ 0.7311,  0.2689],
        [ 0.8808,  0.1192],
        [ 0.2689,  0.7311],
        [ 0.1192,  0.8808]])

max

返回最大值,或指定維度的最大值以及index

import torch
a=torch.tensor([[.1,.2,.3],
                [1.1,1.2,1.3],
                [2.1,2.2,2.3],
                [3.1,3.2,3.3]])
print(a.max(dim=1))
print(a.max())

輸出:

(tensor([ 0.3000,  1.3000,  2.3000,  3.3000]), tensor([ 2,  2,  2,  2]))
tensor(3.3000)

argmax

返回最大值的index

import torch
a=torch.tensor([[.1,.2,.3],
                [1.1,1.2,1.3],
                [2.1,2.2,2.3],
                [3.1,3.2,3.3]])
print(a.argmax(dim=1))
print(a.argmax())

輸出:

tensor([ 2,  2,  2,  2])
tensor(11)

相關推薦

pytorchexpandgathersqueezesumcontiguoussoftmaxmaxargmax

目錄 sum max gather torch.gather(input,dim,index,out=None)。對指定維進行索引。比如4*3的張量,對dim=1進行索引,那麼index的取值範圍就是0~2. input是一個張量,index

MPI聚合通訊-ScatterGatherAllgather

一、 MPI_Scatter MPI_Scatter與MPI_Bcast非常相似,都是一對多的通訊方式,不同的是後者的0號程序將相同的資訊傳送給所有的程序,而前者則是將一段array 的不同部分發送給所有的程序,其區別可以用下圖概括: 0號程序分發資料的時候是根據程序的編

雲計算路-阿裏雲上:彈性伸縮無服務器可彈已有服務器無兵可援

cit spec -h ebs request sca 天上 chan binding 活動起因: A scheduled task executes scaling rule "eBsJ2veNkwJkcGinmICVH1Q", changing the Total

python 操作redis數據庫(非關系型數據庫k-v)

都是 ont sql 失效 font cal post nan 所有 數據庫: 1. 關系型數據庫 表結構 2. 非關系型數據庫 nosql (k - v 速度快),常用的時以下三種: memcache 存在內存裏 redis 存在內存裏 mangod

《SpringBoot從入門到放棄》第(十)篇——整合Redis(SpringBoot 2.0 版本)寫於2018年10月24號程式設計師節。

在 pom.xml 配置中新增 jar 依賴: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-d

pytorch筆記:03)softmax和log_softmax以及CrossEntropyLoss

softmax在神經網路裡面比較常見,簡而言之,就是多分類的概率輸出 sotfmax(xi)=exp(xi)∑jexp(xj) s o t

請實現一個函式按照字形列印二叉樹即第一行按照從左到右的順序列印第二層按照從右至左的順序列印第三行按照從左到右的順序列印其他行以此類推。

 boolean flag1 = true ;                   //利用標誌位來控制順序,為true,則從左到右的順序,為false則相反      

素有高冷曾被微軟放言取代馮氏結構的FPGA被阿里雲玩“活”了

對於專業人士來說,FPGA (現場可程式設計門陣列)並不陌生,由於其硬體並行加速能力和可程式設計特性,在傳統通訊領域和IC設計領域可謂是大放異彩,一直都被廣泛使用。但是,大部分人還不是太瞭解它。 開發門檻過高,硬體加速演算法的釋出和部署保護要求非常高,FPGA

《程式設計珠璣》程式碼路7:這個演算法全世界程式設計師16年才寫對你肯定想不到竟然是這個

這篇部落格要講的演算法,是個有故事的演算法,大家一定會喜歡的: 有這麼一個演算法: 1:業界巨佬經典鉅著《程式設計珠璣》的作者,在課堂上給出了思想,不限時間讓程式設計師們實現,所有的程式設計師在提交的時候都覺得自己寫的是對的,然而結果是即使是高階程式設計師,90%以上的人都寫錯了。 2:

C#小練③(C#標籤的使用:連續輸入五個人年齡如果錄入有誤則報異常)

原題目:迴圈錄入5個人的年齡並計算平均年齡,如果錄入的資料出現負數或大於100的數,則立即停止輸入並報錯。        個人感覺這個解題思路的重點不在於迴圈語句的使用,不在於範圍的判定,而是在於標籤的使用,之前學VB時也使用過標籤,但當時並沒有現在這麼深

《程式設計珠璣》程式碼路7:這演算法全世界程式設計師16年才寫對你肯定想不到竟然是這個

這篇部落格要講的演算法,是個有故事的演算法,大家一定會喜歡的: 有這麼一個演算法: 1:業界巨佬經典鉅著《程式設計珠璣》的作者,在課堂上給出了思想,不限時間讓程式設計師們實現,所有的程式設計師在提交的時候都覺得自己寫的是對的,然而結果是即使是高階程式設計師,90%以上的人

百度星程式設計大賽的資格賽 1001調查問卷(用二進位制位運算暴力列舉想要的那幾個位置上的數)

Problem Description 度度熊為了完成畢業論文,需要收集一些資料來支撐他的論據,於是設計了一份包含 mm 個問題的調查問卷,每個問題只有 'A' 和 'B' 兩種選項。 將問卷散發出去之後,度度熊收到了 nn 份互不相同的問卷,在整理結果的時候,他發現可以

torch.linspaceunsqueeze()以及squeeze()函式

1.torch.linspace(start,end,steps=100,dtype) 作用是返回一個一維的tensor(張量),其中dtype是返回的資料型別。 import torch print(torch.linspace(-1,1,5)) 輸出結果為:tensor([-1.0000,

torch.linspaceunsqueeze()以及squeeze()函數

image linspace 數據類型 class start .com 增加 spa res 1.torch.linspace(start,end,steps=100,dtype) 作用是返回一個一維的tensor(張量),其中dtype是返回的數據類型。 import

網易面試對於一個整數X定義操作rev(X)為將X按數位翻轉過來並且去除掉前導0

對於一個整數X,定義操作rev(X)為將X按數位翻轉過來,並且去除掉前導0。例如: 如果 X = 123,則rev(X) = 321; 如果 X = 100,則rev(X) = 1.現在給出整數x和y

面試題final,finally和finalize的區別以及如果catch裡面有return語句請問finally裡面的程式碼還會執行嗎?

/*  * 面試題:  * 1:final,finally和finalize的區別  * final:最終的意思,可以修飾類,成員變數,成員方法  *         修飾類,類不能被繼承  *         修飾變數,變數是常量  *         修飾方法,方法不能

【fifan的專欄】夫君子靜以修身儉以養德。非淡泊無以明志非寧靜無以致遠。夫學須靜也才須學也非學無以廣才非志無以成學。淫慢則不能勵精險躁則不能治性。年與時馳意與日去遂成枯落多不接世悲守窮廬將復何及!

夫君子之行,靜以修身,儉以養德。非淡泊無以明志,非寧靜無以致遠。夫學須靜也,才須學也,非學無以廣才,非志無以成學。淫慢則不能勵精,險躁則不能治性。年與時馳,意與日去,遂成枯落,多不接世,悲守窮廬,將復...

資料結構頭結點連結串列的三種插入方式(頭插法尾插法在pos處插入)

建立頭結點 流程:首先建立頭結點表指標併為其分配空間——並將頭結點指向空,防止出現段錯誤。 程式碼: //建立頭結點 Node* Create_List () { //建立頭結點 Node* list = (Node*) malloc(

【為無為事無事味無味。】大小多少抱怨以德。圖難乎其易也;為大乎其細也;天下作於易;天下作於細。是以聖人終不為大故能成其大。夫輕諾必寡信;必多難。是以聖人猶難之,故終無難矣。

每天進步一點點。。。 從2009年畢業到現在,做過Java後臺開發,PL/SQL開發,會編寫shell指令碼,現為兼職開發的MySQL DBA。為人友善誠懇,工作踏實,吃苦耐勞,富有朝氣,激情,以及團隊合作意識。

網易面試題 牛牛的作業薄上有一個長度為 n 的排列 A這個排列包含了從1到n的n個數但是因為一些原因 * 其中有一些位置(不超過 10 個)看不清了但是牛牛記得這個數列順序對的數量是 k

package wangyi; /** * Created by Administrator on 2016/12/7. * 牛牛的作業薄上有一個長度為 n 的排列 A,這個排列包含了從1到n的n個數,但是因為一些原因, * 其中有一些位置(不超過 10 個)看不清