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).定时/计数器.并行接口.串行接口和中断系统 ...
随机推荐
- 微信小程序常见的坑
wxml的标签跟html里面的一些标签是一样的,比如view标签相当于div标签,text标签相当于span标签. 在微信小程序中,表单元素都是原生组件,微信小程序中原生组件层级最高,所以在用inpu ...
- 小程序git发布
微信小程序提交项目: 1.码云上创建一个项目 xiaochengxu 2.本地创建一个文件夹,然后在控制台使用 cd 文件夹名字 (将文件拉到控制台) 3.使用 git init 命令 ,初始化一个g ...
- 后端视角下的前端框架之Vue.js初探
背景 作为常年搞后端的自己来说,除了多年前学习的一点关于HTML的皮毛,对现在的前端技术栈可谓是一窍不通.但是因为最近在做的内部业务全链路监控系统,负责前端的同事做到一半去搞别的项目了,为了把项目落地 ...
- 产品研发不等待 i.MX6Q全新推出增强版本 官方店铺下单双重优惠
迅为全新推出PLUS版本的i.MX6Q方案,版本介绍:它是NXP公司全新推出的i.MX6Q增强版新品,显著增强了图形和存储器性能,面向较高图形性能的先进消费电子.汽车和工业多媒体应用的多核平台.
- 2018-2019-2 网络对抗技术 20165337 Exp3 免杀原理与实践
基础问题回答 (1)杀软是如何检测出恶意代码的? 基于特征码的检测:特征码就是一段数据.如果一个可执行文件(或其他运行的库.脚本等)包含特定的数据则被认为是恶意代码.AV软件厂商要做的就是尽量搜集最全 ...
- QT删除非空文件夹
int choose; choose = QMessageBox::warning(NULL,"warning","确定删除该文件?",QMessageBox: ...
- 初识C语言 (四)
分支结构 if语句 C语言中的分支结构语句中的if条件语句,简单if语句的基本结构如下: 其语义是:如果表达式的值为真,则执行其后的语句,否则不执行该语句. 其过程可表示为下图 实例: if(resu ...
- crontab和at任务
crontab周期任务 名称解释: cron来源于希腊语 chronos(χρόνος),原意是时间.(引用自维基百科) tab全称是table,表 常用参数: -e 编辑crontab文件 -l 显 ...
- Python爬去有道翻译
注:传入的类型为POST类型,所以需要使用urllib.parse.urlencode(),将字典转换成URL可用参数: 使用json.loads(),将输出的json格式,转换为字典类型 impor ...
- css @import 导入文件
导入另一个css文件 例如 <style type="text/css"> @import url(css/main.css); //导入css目录下的main.css ...