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

          

         

      

        

  • 相关阅读:
    分享 | 自定义属于自己的U盘图标
    GIF工具 | 分享几个Gif相关工具
    XTU | 人工智能入门复习总结
    XTU | 物联网概论复习总结
    收纳箱2号 | 前端开发大全
    收纳箱1号 | GitHub Pages部署静态网页的一点私货
    博客 | 基于Travis CI实现Hexo在Github和Coding的同步自动化部署
    图床plus演示 | 图床及在线分享演示文稿工具
    css写实心正三角和倒三角
    React 多个className的写法
  • 原文地址:https://www.cnblogs.com/aijing/p/13355386.html
Copyright © 2020-2023  润新知