PyTorch 深度学习实战
方远
LINE China 数据科学家
10381 人已学习
新⼈⾸单¥59
登录后,你可以任选3讲全文学习
课程目录
已完结/共 32 讲
开篇词 (1讲)
PyTorch 深度学习实战
15
15
1.0x
00:00/00:00
登录|注册

04 | Tensor:PyTorch中最基础的计算单元

在上节课中,我们一起学习了 NumPy 的主要使用方法和技巧,有了 NumPy 我们可以很好地处理各种类型的数据。而在深度学习中,数据的组织则更进一步,从数据的组织,到模型内部的参数,都是通过一种叫做张量的数据结构进行表示和处理。
今天我们就来一块儿了解一下张量(Tensor),学习一下 Tensor 的常用操作。

什么是 Tensor

Tensor 是深度学习框架中极为基础的概念,也是 PyTroch、TensorFlow 中最重要的知识点之一,它是一种数据的存储和处理结构。
回忆一下我们目前知道的几种数据表示:
标量,也称 Scalar,是一个只有大小,没有方向的量,比如 1.8、e、10 等。
向量,也称 Vector,是一个有大小也有方向的量,比如 (1,2,3,4) 等。
矩阵,也称 Matrix,是多个向量合并在一起得到的量,比如[(1,2,3),(4,5,6)]等。
为了帮助你更好理解标量、向量和矩阵,我特意准备了一张示意图,你可以结合图片理解。
不难发现,几种数据表示其实都是有着联系的,标量可以组合成向量,向量可以组合成矩阵。那么,我们可否将它们看作是一种数据形式呢?
答案是可以的,这种统一的数据形式,在 PyTorch 中我们称之为张量 (Tensor)。从标量、向量和矩阵的关系来看,你可能会觉得它们就是不同“维度”的 Tensor,这个说法对,也不全对。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

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-08
    2
    35
  • vcjmhg
    torch.Tensor() 是Tensor类的构造方法,通过构造方法创建Tensor对象的实例;torch.tensor()则是Tensor类内部的一个方法,方法的返回值是Tensor类型

    作者回复: 你好,vcjmhg,感谢你的留言。回答的很赞👍。torch.tensor是函数,调用之后会对参数中的数据做拷贝,生成相应的张量并返回这个张量。

    2021-10-18
    10
  • Sam Wang
    Squeeze 和unsqueeze我的理解是他们只是减少或增加了1维,但其实并未增加或者减少数据。因为数据数量没变 (多乘1而已,数量不变)

    作者回复: 你好,Geek_60b6fb,感谢你的留言。数据是没有发生变化的,只是维度变化了。 但是你说的多乘1,我没太理解是什么意思。可以留言,或者在微信群里咱们继续交流。^^

    2021-10-20
    3
    4
  • Geek_86b454
    新创建出来的tensor是CPU tensor还是GPU tensor呢

    作者回复: 你好,感谢你的留言。 由创建tensor中的device参数决定是在CPU还是GPU。

    2021-12-13
    2
    3
  • celerychen
    x.view(4, 4) 元素个数仍然是16个,和之前的一样,内存怎么就变成不连续的呢,能否解释一下?谢谢老师!

    作者回复: celerychen,你好,感谢你的留言。 view操作只作用在连续内存上,仅仅按照行重新排列下标,不改变数据的内存分布。也就是说,数据本身没有变化,下标发生了变化,如果从下标顺序的角度来看,内存就是不连续的了。

    2022-07-28归属地:北京
    2
    2
  • 步比天下
    老师您好,感觉最后一个例子有些不太理想,有些同学可能会搞不清新的一维是在哪个位置插入的,能不能再换个例子啊

    作者回复: 你好,步比天下。感谢你的留言。这个例子其实还是比较好理解的,unsqueeze函数例子中是在第2维度进行插入的,也就是说,新的维度在第二维,新tensor的shape为2,1,1,3,其中第二个1就是新插入的。

    2021-10-19
    1
  • 梦之吃吃
    调用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
收起评论
显示
设置
留言
18
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部