pytorch tensor數據存儲與內存共享


  tensor分為頭信息區(Tensor)存儲區(Storage)信息區主要保存着tensor的形狀(size)、步長(stride)、數據類型(type)等信息,而真正的數據則保存成連續數組,存儲在存儲區

  

  通過id(tensor.storage)來獲取“存儲區”,注意:id(tensor)與id(tensor.storage)不同,id(tensor)是整個tensor所占的內存地址(包括信息區和存儲區),而 id(tensor.storage)只是該tensor存儲區的內存地址,也就是說某幾個tensor的存儲區的內存地址可以相同(即他們共享數據)。

  1,切片操作:

  索引出來的結果與原數據共享內存(存儲區內存地址相同,總內存地址不同)。

  [In]:   x=torch.zeros(2,2)  # x: [ [ 0,0]

                  [0,0] ]

      y=x[0,:]

      y+=1

      print(y)

      print(x)

      print(id(y)==id(x))

      print(id(y.storage)==id(x.storage))

  [Out]:

      y:[[1,1]]

      x:[[1,1]

       [0,0]]

      False

      True

  

  2, view方法:

  view可以用來改變tensor的形狀,返回新的tensor。

  返回的tensor與原數據共享data,即存儲區內存地址相同,總內存地址不同

  [In]    x=torch.zeros(2,2)  # x: [ [ 0,0]

 

                 [0,0] ]

        y=x.view(4,1)    

     y+=1

     print(y)

     print(x)

     print(id(y)==id(x))

     print(id(y.storage)==id(x.storage))

  [Out] y: [[1][1][1][1]]

     x: [[1, 1]

       [1,1]]

     False

     True

  

  3 detach,data方法:

  與tensor全切片時相同。

 

  4 numpy,from_numpy方法

  該方法將tensor與numpy相互轉換,這兩個函數所產生的tensor與numpy的數組共享內存(即存儲區內存相同)。

      

     

  

    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM