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).定时/计数器.并行接口.串行接口和中断系统 ...
随机推荐
- Fatal error encountered during command execution
MySQL + .net + EF 开发环境,调用一处sql语句报错: Fatal error encountered during command execution[sql] view plain ...
- Urban Elevations UVA - 221
题目大意:给出建筑的俯视图,以及每个建筑的左下角坐标,宽度,长度,高度.求正视图可观察到的建筑的编号 思路:建筑物的可见性等于南墙的可见性,依据左下角排序后,逐个判断每个建筑是否可见.对南墙的x坐标进 ...
- Appnium-API-Dvice
Device Activity Start Activity Start an Android activity by providing package name and activity name ...
- eclipse,代码中有错误,项目或者java类中却不显示红叉
修改eclipse代码提示级别1.单个项目修改项目上右键-->properties-->java compiler-->building-->enable project sp ...
- STM32F0使用LL库实现PWM输出
在本次项目中,限于空间要求我们选用了STM32F030F4作为控制芯片.这款MCU不但封装紧凑,而且自带的Flash空间也非常有限,所以我们选择了LL库实现.本文我们将说明如何通过LL库实现PWM信号 ...
- LoadRunner运行错误集
1.error-27796错误解决方法: 在负载生成器的注册表HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Tcpip/Parameters ...
- 数据库六大约束用法:主键(primary key)、外键(foreign key)、非空(not null)、默认(default)、检查(check)、唯一(unique)
1. 数据库有六大约束 主键(primary key) 外键(foreign key):被参照的键必须有唯一约束或是主键 非空(not null) 默认(default) 检查(check):orac ...
- python2 使用pip安装psycopg2出现错误:Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-install-mvzdNj/psycopg2/
公司业务需求,开发语言python2,需要使用数据库:postgresql,需要安装模块psycopg2这个模块, 使用pip install psycopg2 报错: Command "p ...
- 【mongo】查询超时处理
使用no_cursor_timeout collection = self.db[tb_name] cols = collection.find(no_cursor_timeout=True) for ...
- Redis的学习
单线程架构可参考:https://blog.csdn.net/sunhuiliang85/article/details/73656830