• 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的数组共享内存(即存储区内存相同)。

          

         

      

        

  • 相关阅读:
    Android网页打开指定App
    使用Android Studio Gradle实现友盟多渠道打包
    Android开发 PopupWindow弹窗调用第三方地图(百度,高德)实现导航功能
    Android使用Mob ShareSDK 分享不同平台
    Android布局优化之层级优化
    (Facebook开源项目)Fresco:一个新的Android图像处理类库
    关于Android开发的几点建议
    [AndroidTips]startService与bindService的区别
    基于HBase的手机数据备份系统 .
    MySQL在CenterOS和Ubuntu的安装
  • 原文地址:https://www.cnblogs.com/aijing/p/13355386.html
Copyright © 2020-2023  润新知