小白最近刚开始使用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=b+2
b[0] = b[0] + 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维度变换相关推荐

  1. PyTorch教程(四):维度变换

    view和reshape 在PyTorch0.3版本中使用view,在PyTorch0.4以后增加了reshape,作用是将一个shape转变为另一个shape. shape变化的前提是保证numel ...

  2. tensor 增加维度_tensor维度变换

    维度变换是tensorflow中的重要模块之一,前面mnist实战模块我们使用了图片数据的压平操作,它就是维度变换的应用之一. 在详解维度变换的方法之前,这里先介绍一下View(视图)的概念.所谓Vi ...

  3. Pytorch中tensor维度和torch.max()函数中dim参数的理解

    Pytorch中tensor维度和torch.max()函数中dim参数的理解 维度 参考了 https://blog.csdn.net/qq_41375609/article/details/106 ...

  4. 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 ...

  5. Pytorch:一些常用代码

    1.PIL读取图像转成tensor pil_img = Image.open(img_path) array = np.asarray(pil_img) data = t.from_numpy(arr ...

  6. 判定两个tensor维度相同_Pytorch之Tensor大详解

    导语 深度学习框架Pytorch发展势头惊人,这点小编也深有体会,翻翻Github上深度学习的开源代码,发现用Pytorch真的多了不少,所以小编最近也正在入坑Pytorch,顺便写写文章做些总结.认 ...

  7. PyTorch入坑(一)~(三): Tensor的概念,基本操作和线性回归

    PyTorch 一文入门 PyTorch 入坑一:数据类型与Tensor的概念 PyTorch数据类型 Tensor的概念 Tensor与Variable Variable Tensor Tensor ...

  8. 【TensorFlow2.0】(4) 维度变换、广播

    各位同学好,今天我和大家分享一下TensorFlow2.0中有关数学计算的相关操作,主要内容有: (1) 改变维度:reshape():(2) 维度转置:transpose():(3) 增加维度:ex ...

  9. TensorFlow张量的维度变换

    在神经网络运算过程中,维度变换是最核心的张量操作,通过维度变换可以将数据任意地切换形式,满足不同场合的运算需求. 维度变换的一个例子: Y = X@W + b X 的 shape 为[2,4] W 的 ...

最新文章

  1. 八骏登场 学子圆梦 一卷在手 良师益友(2)
  2. 将DataTable中的数据一次性提交到数据库中
  3. 基于Solr的HBase多条件查询测试
  4. Linux高可用性方案之Heartbeat的CRM节点得分计算(原创)
  5. android 显示字符串最后一个字,android – 在textview中显示的最后一个单词
  6. 【BUG记录】在onCreate()方法handler调用方法导致程序闪退
  7. 【Linux】/dev/null 21 详解
  8. 在自定义Java 9映像上运行Eclipse Neon
  9. 20155320《网络对抗》Exp4 恶意代码分析
  10. cakephp 1.3 Views
  11. Angular 2 ViewChild ViewChildren
  12. Dos - 学习总结(1)
  13. smarty3中文手册
  14. Multisim使用入门教程
  15. C++ 文件输入输出问题
  16. MATLAB平台学习(9)信道模型
  17. copy和strong的区别
  18. 怎样保护计算机桌面不被更改,电脑保护屏幕怎么设置
  19. java判断百分数_Java 验证前台返回的是不是百分数 在后台用正则表达式验证百分比数据...
  20. mysql三张表 left join

热门文章

  1. [转]Entity Framework 异常: ‘OFFSET‘ 附近有语法错误。\r\n在 FETCH 语句中选项 NEXT 的用法无效
  2. nvm 装 nodejs 重启终端失效的解决方法
  3. 解决非controller使用@Autowired注解注入报错为java.lang.NullPointerException问题
  4. 使用mock解决测试中依赖第三方接口的问题
  5. MERGE INTO 解决大数据量 10w 更新缓慢的问题
  6. 使用POI导出百万级数据到excel的解决方案
  7. 安装.Net Framework 4.6.2时出现“无法建立到信任根颁发机构的证书链”解决方法
  8. 解决SSH远程执行命令找不到环境变量的问题
  9. 编译/链接过程如何工作?
  10. 如何在PHP中保护数据库密码?