1. <nobr id="easjo"><address id="easjo"></address></nobr>

      <track id="easjo"><source id="easjo"></source></track>
      1. 
        

      2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
      3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>
          貴州做網站公司
          貴州做網站公司~專業!靠譜!
          10年網站模板開發經驗,熟悉國內外開源網站程序,包括DEDECMS,WordPress,ZBlog,Discuz! 等網站程序,可為您提供網站建設,網站克隆,仿站,網頁設計,網站制作,網站推廣優化等服務。我們專注高端營銷型網站,企業官網,集團官網,自適應網站,手機網站,網絡營銷,網站優化,網站服務器環境搭建以及托管運維等。為客戶提供一站式網站解決方案?。?!

          contiguous(在Pytorch中如何使用contiguous)

          來源:互聯網轉載 時間:2024-05-11 23:28:56

          舉個栗子,在使用transpose()進行轉置操作時,pytorch并不會創建新的、轉置后的tensor,而是修改了tensor中的一些屬性(也就是元數據),使得此時的offset和stride是與轉置tensor相對應的。

          轉置的tensor和原tensor的內存是共享的!

          為了證明這一點,我們來看下面的代碼:

          x=torch.randn(3,2)y=x.transpose(x,0,1)x[0,0]=233print(y[0,0])#print233

          可以看到,改變了y的元素的值的同時,x的元素的值也發生了變化。

          也就是說,經過上述操作后得到的tensor,它內部數據的布局方式和從頭開始創建一個這樣的常規的tensor的布局方式是不一樣的!于是…這就有contiguous()的用武之地了。

          在上面的例子中,x是contiguous的,但y不是(因為內部數據不是通常的布局方式)。

          注意不要被contiguous的字面意思“連續的”誤解,tensor中數據還是在內存中一塊區域里,只是布局的問題!

          當調用contiguous()時,會強制拷貝一份tensor,讓它的布局和從頭創建的一毛一樣。

          一般來說這一點不用太擔心,如果你沒在需要調用contiguous()的地方調用contiguous(),運行時會提示你:

          RuntimeError: input is not contiguous

          只要看到這個錯誤提示,加上contiguous()就好啦~

          補充:pytorch之expand,gather,squeeze,sum,contiguous,softmax,max,argmax

          gather

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

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

          importtorcha=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)

          importtorcha=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)

          importtorchx=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)的張量

          importtorcha=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查看張量內存是否連續。

          importtorcha=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-inmethodis_contiguousofTensorobjectat0x7f4b5e35afa0>tensor([[1,2,3],[4,8,12],[1,2,3],[4,8,12]])

          softmax

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

          importtorchimporttorch.nn.functionalasFa=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

          importtorcha=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

          importtorcha=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)

          到此,關于“在Pytorch中如何使用contiguous”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注本站網站,小編會繼續努力為大家帶來更多實用的文章!

          標簽:contiguous-

          c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...

          2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...

          :喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...

          今日加拿大元對人民幣匯率表當前匯率5.1787加拿大元100人民幣517.8700Tips:100加拿大元兌換517.8700人民幣匯率更新時間:2022/10/99:21:482022年9月30日銀行間外匯市場人民幣匯率中間價為:1美元對人民幣7.0998元,1歐元對人民幣6.9892元,100日元對人民幣4.9276元,1港元對人民幣0.90444元,1英鎊對人民幣7.9481元,1澳大利亞元...

          短債基金是什么意思?基金分為很多類型,主要是按照投資持倉來分,比如股票型基金、貨幣基金、債券基金等等,而債券基金又分為短債基金、中短債基金、中長期純債基金等等,很多人都是買的短債基金,短債基金是主要投資于久期小于1年的債券,中短債基金主要投資于久期在1-3年的債券,中長期純債基金則沒有久期的限制。久期就是債券的剩余壽命,也就是債券持有者收回全部本金和利息的平均時間。久期越長,債券價格的波動越大,風...

          歌唱事業相信大家對之前春晚薩頂頂的歌曲《萬物有靈》印象深刻。薩頂頂的藏式服裝和配飾非常引人注目,她也是格萊美邀請的第一位中國歌手??梢哉f她做了一個大膽的嘗試,將佛教和流行音樂結合起來,不過還好,得到了不錯的效果。她出道的時候也經歷了很多風浪,所以被觀眾噴了很多。不過后來她結婚了,有了一個女兒,這幾年已經很少出現在大眾的視野里了。薩頂頂,1983年出生,今年36歲。這個年紀能有這么高的成就,真的很神...

          TOP
          国产初高中生视频在线观看|亚洲一区中文|久久亚洲欧美国产精品|黄色网站入口免费进人
          1. <nobr id="easjo"><address id="easjo"></address></nobr>

              <track id="easjo"><source id="easjo"></source></track>
              1. 
                

              2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
              3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>