pytorch reshape_pytorch常用总结 之 tensor维度变换
小白最近刚开始使用pytorch,经常需要在各个网站反复查询一些函数的区别。但是不同的博客说的有时候不一样,趁着实验室停电,小白写了这篇文章,方便自己食用,不定期更新。如有错误,欢迎大家热烈指正。
第0章 敌动我也动,敌动我不动
之前写背包问题的时候,对序列B做更改的时候,(B=A) 序列A也跟着改变大小。这是因为A和B都指针指向了同一个地址。下面详细介绍:
c = [1,2]赋值的时候,python是创建一个地址,地址存放[1,2],此时c指针指向内存为[1,2]的地方;这个时候,d = c表示d的指针也指向[1,2]。因此,不管对c还是d进行操作,他们的变化都是一致的。比如d[0] = 3,此时c和d都变成了[3,2]。注意,如果d = [3,4],此时c输出的是[1,2],d输出的是[3,4]。我的理解是,d = [3,4]的时候,变量d指向存储[3,4]的内存,此时存储[1,2]的内存的标签名字依旧是c。
c = [1,2];d = c;
#d[0] = 3;
#d = d+2
d = [3,4]
print(c);print(d)
c = [1, 2]; d=[3, 4]
#c = [3, 2]; d=[3, 2]这一行对应d[0] = 3的输出
第一章 tensor维度变换
pytorch中常用tensor维度变换有两种方法,一种是a.view(),另一种是a.permute()。
假设a=torch.randn(1,2,3,4),a的数据是按照行优先的原则存储的(一般存储要求地址是连续的),这里24个变量的地址是连续的,且固定好的。(我们可以假设这24个数排成了一行,a 表示将这24个数按照[1,2,3,4]的格式使用)
1、b = a.view(1,2,2,6)
b 是将a中的元素,按照顺序逐个选取,凑成(1,2,2,6)的大小。
2、b = a.permute(0,1,3,2)
b 是按照a已经排好顺序,只改变a的轴。具体说就是将a的第二维度和第三维度进行互换
3、上代码
a = torch.randn(1,2,3,4);b = a.permute(0,1,3,2);c = a.view(1,2,4,3)
print(a);print(b);print(c)
不难看出,b和c虽然维度相同,但是每一个维度的数值并不是相同的。值得注意的是,如果对b进行b+200的操作,此时a的数值和c的数值是不会改变的;但是如果对b进行b[0]=b[0]+200的操作,此时a,b,c的数值都会改变。
b = b + 200
b[0] = b[0] + 200
4、d = a.reshape()
reshape 和view方法的结果是一致的,但是view没有开辟新的内存空间,而reshape开辟了新的内存空间。尽管reshape开辟了新的内存空间,但是指向的底层元素地址依旧没有变换,也就是说,对d的操作会影响到a。
a = torch.randn(1,2,3,4);c = a.view(1,2,4,3);d = a.reshape(1,2,4,3);d[0] = d[0]+100
print(a);print(c);print(d)
pytorch reshape_pytorch常用总结 之 tensor维度变换相关推荐
- PyTorch教程(四):维度变换
view和reshape 在PyTorch0.3版本中使用view,在PyTorch0.4以后增加了reshape,作用是将一个shape转变为另一个shape. shape变化的前提是保证numel ...
- tensor 增加维度_tensor维度变换
维度变换是tensorflow中的重要模块之一,前面mnist实战模块我们使用了图片数据的压平操作,它就是维度变换的应用之一. 在详解维度变换的方法之前,这里先介绍一下View(视图)的概念.所谓Vi ...
- Pytorch中tensor维度和torch.max()函数中dim参数的理解
Pytorch中tensor维度和torch.max()函数中dim参数的理解 维度 参考了 https://blog.csdn.net/qq_41375609/article/details/106 ...
- PyTorch 笔记(04)— Tensor 属性方法(获取元素个数numel/neleme、查看形状size()/shape、增减维度squeeze()/unsqueeze()、resize形状)
1. 获取 Tensor 元素个数 获取 Tensor 的元素个数 ,a.numel() 等价 a.nelement() In [1]: import torch as t In [5]: a = t ...
- Pytorch:一些常用代码
1.PIL读取图像转成tensor pil_img = Image.open(img_path) array = np.asarray(pil_img) data = t.from_numpy(arr ...
- 判定两个tensor维度相同_Pytorch之Tensor大详解
导语 深度学习框架Pytorch发展势头惊人,这点小编也深有体会,翻翻Github上深度学习的开源代码,发现用Pytorch真的多了不少,所以小编最近也正在入坑Pytorch,顺便写写文章做些总结.认 ...
- PyTorch入坑(一)~(三): Tensor的概念,基本操作和线性回归
PyTorch 一文入门 PyTorch 入坑一:数据类型与Tensor的概念 PyTorch数据类型 Tensor的概念 Tensor与Variable Variable Tensor Tensor ...
- 【TensorFlow2.0】(4) 维度变换、广播
各位同学好,今天我和大家分享一下TensorFlow2.0中有关数学计算的相关操作,主要内容有: (1) 改变维度:reshape():(2) 维度转置:transpose():(3) 增加维度:ex ...
- TensorFlow张量的维度变换
在神经网络运算过程中,维度变换是最核心的张量操作,通过维度变换可以将数据任意地切换形式,满足不同场合的运算需求. 维度变换的一个例子: Y = X@W + b X 的 shape 为[2,4] W 的 ...
最新文章
- 八骏登场 学子圆梦 一卷在手 良师益友(2)
- 将DataTable中的数据一次性提交到数据库中
- 基于Solr的HBase多条件查询测试
- Linux高可用性方案之Heartbeat的CRM节点得分计算(原创)
- android 显示字符串最后一个字,android – 在textview中显示的最后一个单词
- 【BUG记录】在onCreate()方法handler调用方法导致程序闪退
- 【Linux】/dev/null 21 详解
- 在自定义Java 9映像上运行Eclipse Neon
- 20155320《网络对抗》Exp4 恶意代码分析
- cakephp 1.3 Views
- Angular 2 ViewChild ViewChildren
- Dos - 学习总结(1)
- smarty3中文手册
- Multisim使用入门教程
- C++ 文件输入输出问题
- MATLAB平台学习(9)信道模型
- copy和strong的区别
- 怎样保护计算机桌面不被更改,电脑保护屏幕怎么设置
- java判断百分数_Java 验证前台返回的是不是百分数 在后台用正则表达式验证百分比数据...
- mysql三张表 left join
热门文章
- [转]Entity Framework 异常: ‘OFFSET‘ 附近有语法错误。\r\n在 FETCH 语句中选项 NEXT 的用法无效
- nvm 装 nodejs 重启终端失效的解决方法
- 解决非controller使用@Autowired注解注入报错为java.lang.NullPointerException问题
- 使用mock解决测试中依赖第三方接口的问题
- MERGE INTO 解决大数据量 10w 更新缓慢的问题
- 使用POI导出百万级数据到excel的解决方案
- 安装.Net Framework 4.6.2时出现“无法建立到信任根颁发机构的证书链”解决方法
- 解决SSH远程执行命令找不到环境变量的问题
- 编译/链接过程如何工作?
- 如何在PHP中保护数据库密码?