zoukankan      html  css  js  c++  java
  • 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的数组共享内存(即存储区内存相同)。

          

         

      

        

  • 相关阅读:
    C++每次读取一行字符串输入(学习笔记) (转)
    Ubuntu使用Windows下的conio.h
    容斥原理、欧拉函数、phi
    UVa1635
    转:用STL中的vector动态开辟二维数组
    [转载]Vector用法(C++ Primer中文版)
    c++中vector的pair与make_pair的使用,双关键字排序
    uva12716 GCD XOR
    在 Ubuntu 14.04 中安装 Pepper Flash Player For Chromium
    Careercup
  • 原文地址:https://www.cnblogs.com/aijing/p/13355386.html
Copyright © 2011-2022 走看看