tensor内部结构
内部结构
1.tensor分为头信息区(Tensor)和存储区(Storage);
信息区:tensor的形状(size)、步长(stride)、数据类型(type),信息区占用内存较少
存储区:数据保存为连续数组,主要内存占用在存储区
2.每一个tensor有着一个对应的storage,storage是在data之上封装的接口;
具体操作
- a = t.arange(0,6)
- a.storage()
- b = a.view(2,3)
- b.storage()
- #a和b的storage的内存地址一样,即他们是用同一个storage
- print( id(b.storage) == id(a.storage) )
- #a改变,b也随之改变,因为他们共享storage
- a[1] = 100
- print(b)
- c = a[2:]
- c.storage()
- print(c)
- #3198436924144 3198436924128,首地址差16,因为两个元素2*8,每个元素占8个字节
- print(c.data_ptr())
- print(a.data_ptr())
- c[0] = -100
- print(a)
- #3个tensor共享storage
- print(id( a.storage() ) == id( b.storage() ) == id( c.storage()) )
- #以储存元素的个数的形式返回tensor在地城内存中的偏移量
- print( a.storage_offset() )
- print( b.storage_offset() )
- print( c.storage_offset() )
- '''''0 0 2'''
- print('b',b)
- e = b[::1,::2]
- print('e',e)
- '''''b tensor([[ 0, 100, -100],
- [ 3, 4, 5]])
- e tensor([[ 0, -100],
- [ 3, 5]])'''
- #tensor步长
- print(b.stride(),e.stride())
- '''''(3, 1) (3, 2)'''
- #判断tensor是否连续
- print(e.is_contiguous())
- '''''False'''
- f = e.contiguous()
- print(f.is_contiguous())
- '''''True'''
总结
大部分操作并不修改tensor的数据,只修改了tensor的头信息,这种做法更节省内存,提升了处理速度。
注意:有些操作会导致tensor不连续,可以用tensor.contiguous方法将它们变成连续的数据。
2018-11-22 20:36:00
tensor内部结构的更多相关文章
- tensorflow+入门笔记︱基本张量tensor理解与tensorflow运行结构
Gokula Krishnan Santhanam认为,大部分深度学习框架都包含以下五个核心组件: 张量(Tensor) 基于张量的各种操作 计算图(Computation Graph) 自动微分(A ...
- 深度学习框架PyTorch一书的学习-第三章-Tensor和autograd-1-Tensor
参考https://github.com/chenyuntc/pytorch-book/tree/v1.0 希望大家直接到上面的网址去查看代码,下面是本人的笔记 Tensor Tensor可以是一个数 ...
- Torch7 Tensor切片总结
1.narrow(k,m,n) 这个函数是选中第k维的从m行开始,供选中n行 2.sub(dim1s,dim1e[,dim2s,dim2e,..,dim4s,dim4e]) 功能最强大,可以切任意的一 ...
- Tensorflow学习笔记2:About Session, Graph, Operation and Tensor
简介 上一篇笔记:Tensorflow学习笔记1:Get Started 我们谈到Tensorflow是基于图(Graph)的计算系统.而图的节点则是由操作(Operation)来构成的,而图的各个节 ...
- tensor
初始化 z = torch.Tensor(,,,,) --可以创建多维数组.里面是随机的数. s = torch.Tensor(,):fill() --用1填充 t = torch.rand(,) m ...
- 4d tensor
偶然在一个ppt中看到了如下关于tensor的解释,清晰明白,所以post在这里,以备后续查看 根据这个理解: theano中的input(4d tensor):[mini-batch size, n ...
- Tensor神经网络进行知识库推理
本文是我关于论文<Reasoning With Neural Tensor Networks for Knowledge Base Completion>的学习笔记. 一.算法简介 网络的 ...
- 高级进阶DB2(第2版)——内部结构、高级管理与问题诊断
<高级进阶DB2(第2版)——内部结构.高级管理与问题诊断> 基本信息 作者: 牛新庄 出版社:清华大学出版社 ISBN:9787302323839 上架时间:2013-7-3 出版 ...
- MCS-51单片机内部结构
8051是MCS-51系列单片机的典型产品,我们以这一代表性的机型进行系统的讲解. 8051单片机包含中央处理器.程序存储器(ROM).数据存储器(RAM).定时/计数器.并行接口.串行接口和中断系统 ...
随机推荐
- .net core 2.0 报错:error NU1102: Unable to find package 。。。
这种是nuget无法还原的问题.解决问题的方法: 在项目文件所在的目录下创建文件:NuGet.Config 里面内容: "?> <configuration> <pa ...
- ES7的async/await
async 表示这是一个async函数,await只能用在这个函数里面. await 表示在这里等待promise返回结果了,再继续执行. await 后面跟着的应该是一个promise对象 awai ...
- GX/GZOI2019 day2 解题报告
GX/GZOI2019 day2 解题报告 题目链接 逼死强迫症 旅行者 旧词 t1 逼死强迫症 显然地,记 \(f(i)\) 为长度为 \(i\) 的木板的答案,可得: \(\\\) \[f(i)= ...
- ubuntu命令安装
1.当make时,发现没有对应的命令: apt-get install build-essential 安装工具,可解决这个问题
- RSA加密解密算法
/** * RSA加密解密算法 * Class Rsa */ class Rsa { /** * 获取pem格式的公钥 * @param $public_key 公钥文件路径或者字符串 * @retu ...
- goroute应用-模拟远程调用RPC
go语言简单模拟RPC,详见个人新博客:blog.dlgde.cn 代码如下: package main import ( "errors" "fmt" &qu ...
- PHP常用函数大全500+
php usleep() //函数延迟代码执行若干微秒. unpack() //函数从二进制字符串对数据进行解包. uniqid() //函数基于以微秒计的当前时间,生成一个唯一的 ID. time_ ...
- Arrays类的运用,二分法,数组的复制,命令行参数的运用,二维数组,Object,equals
/*Arrays jdk中为了便于开发,给开发者提供了Arrays类, 其中包含了很多数组的常用操作.例如快速输出.排序.查找等.*/ import java.util.Arrays; public ...
- Zabbix (五)
介绍添加主机时,各个参数的含义 https://blog.51cto.com/5001660/2154692 Zabbix配置介绍: https://blog.51cto.com/5001660/21 ...
- js |竖线字符串全部替换 replace
一般人解决方案: 'a|b|c'.replace(/\|/g, ','); 神经病解决方案: 'a|b|c'.split('|').join(',');