04 | Tensor:PyTorch中最基础的计算单元
什么是 Tensor
- 深入了解
- 翻译
- 解释
- 总结
PyTorch中的张量(Tensor)是深度学习框架的基本数据结构,本文介绍了张量的概念、创建、转换方法以及常用操作。张量包括标量、向量和矩阵,可以通过torch.tensor函数直接创建,也可以从NumPy数组转换而来。文章还涵盖了特殊形式的张量创建,如零矩阵、单位矩阵、全一矩阵和随机矩阵。此外,介绍了不同数据类型与张量之间的转换,包括整数、列表和NumPy数组。常用操作包括获取形状、维度转换、形状变换以及增减维度。通过本文,读者可以快速了解PyTorch中张量的基本概念和操作方法,为深入学习深度学习框架奠定基础。文章还提到了PyTorch中的高级操作,如矩阵转秩、形状变换、增减维度等,为读者提供了进一步学习的方向。
《PyTorch 深度学习实战》,新⼈⾸单¥59
全部留言(18)
- 最新
- 精选
- 徐洲更通过查阅文档,torch.Tensor是默认tensor类型的torch.FloatTensor别名, 可以直接从给定数据中创建出FloatTensor的tensor, 而torch.tensor是创建会根据输入的数据类型判断。 也就是说,如果我传入的是int类型,那么torch.Tensor输出的是FloatTensor数据格式,而torch.tensor输出的torch.int32
作者回复: 👍🏻👍🏻👍🏻👍🏻👍🏻👍🏻
2021-12-08235 - vcjmhgtorch.Tensor() 是Tensor类的构造方法,通过构造方法创建Tensor对象的实例;torch.tensor()则是Tensor类内部的一个方法,方法的返回值是Tensor类型
作者回复: 你好,vcjmhg,感谢你的留言。回答的很赞👍。torch.tensor是函数,调用之后会对参数中的数据做拷贝,生成相应的张量并返回这个张量。
2021-10-1810 - Sam WangSqueeze 和unsqueeze我的理解是他们只是减少或增加了1维,但其实并未增加或者减少数据。因为数据数量没变 (多乘1而已,数量不变)
作者回复: 你好,Geek_60b6fb,感谢你的留言。数据是没有发生变化的,只是维度变化了。 但是你说的多乘1,我没太理解是什么意思。可以留言,或者在微信群里咱们继续交流。^^
2021-10-2034 - Geek_86b454新创建出来的tensor是CPU tensor还是GPU tensor呢
作者回复: 你好,感谢你的留言。 由创建tensor中的device参数决定是在CPU还是GPU。
2021-12-1323 - celerychenx.view(4, 4) 元素个数仍然是16个,和之前的一样,内存怎么就变成不连续的呢,能否解释一下?谢谢老师!
作者回复: celerychen,你好,感谢你的留言。 view操作只作用在连续内存上,仅仅按照行重新排列下标,不改变数据的内存分布。也就是说,数据本身没有变化,下标发生了变化,如果从下标顺序的角度来看,内存就是不连续的了。
2022-07-28归属地:北京22 - 步比天下老师您好,感觉最后一个例子有些不太理想,有些同学可能会搞不清新的一维是在哪个位置插入的,能不能再换个例子啊
作者回复: 你好,步比天下。感谢你的留言。这个例子其实还是比较好理解的,unsqueeze函数例子中是在第2维度进行插入的,也就是说,新的维度在第二维,新tensor的shape为2,1,1,3,其中第二个1就是新插入的。
2021-10-191 - 梦之吃吃调用torch.Tensor构造的tensor默认类型是单精度浮点数类型,调用torch.tensor构造的tensor根据原始数据类型生成对应的tensor数据类型
作者回复: 👍🏻
2023-12-13归属地:江苏 - 站着睡觉的树老师,请问 获取形状的代码中,a=torch.zeros(2, 3, 5) ,这是一个2行,3列,深度为5的张量吗?我看您的配图,表示的是2列,3行,深度为5的张量。 也就是说,张量的0维,指的是有多少列,张量的1维指的是有多少行,张量的2维指的是有层(深度),我的理解对吗?
作者回复: 你好,站着睡觉的树,感谢你的留言。 其实,没有行、列、深度的概念的。只不过3维是我们可以用图画描述出来的,如果是4维、5维更高维度的话,那该怎么办呢? a=torch.zeros(2, 3, 5) 只能说张量a的shape的第一个维度是2,第二个维度是3,第三个维度是5
2022-03-28 - Chloe请问老师能不能讲讲为什么squeeze 只能增减维度的大小为 1 的维度呢?
作者回复: squeeze只能减不能增啊。
2022-01-26 - 马克图布老师,关于 Tensor 内存不连续的问题,使用 contiguous() 函数也可以解决吧?还是说使用 reshape() 有些什么其他优势呢?
作者回复: 你好。马克图布,感谢你的留言。 View本身不支持内存不连续的Tensor结构,所以你先用contiguous处理一下是可以的。但是View方法本身共享底层数据内存,返回的Tensor不会使用新的内存。所以如果你想在view中使用contiguous,就有可能会使用新的内存,破坏了代码的连贯与兼容性。
2021-11-05