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

05 | Tensor变形记:快速掌握Tensor切分、变形等方法

你好,我是方远。
上节课我们一起学习了 Tensor 的基础概念,也熟悉了创建、转换、维度变换等操作,掌握了这些基础知识,你就可以做一些简单的 Tensor 相关的操作了。
不过,要想在实际的应用中更灵活地用好 Tensor,Tensor 的连接、切分等操作也是必不可少的。今天这节课,咱们就通过一些例子和图片来一块学习下。虽然这几个操作比较有难度,但只要你耐心听我讲解,然后上手练习,还是可以拿下的。

Tensor 的连接操作

在项目开发中,深度学习某一层神经元的数据可能有多个不同的来源,那么就需要将数据进行组合,这个组合的操作,我们称之为连接

cat

连接的操作函数如下。
torch.cat(tensors, dim = 0, out = None)
cat 是 concatnate 的意思,也就是拼接、联系的意思。该函数有两个重要的参数需要你掌握。
第一个参数是 tensors,它很好理解,就是若干个我们准备进行拼接的 Tensor。
第二个参数是 dim,我们回忆一下 Tensor 的定义,Tensor 的维度(秩)是有多种情况的。比如有两个 3 维的 Tensor,可以有几种不同的拼接方式(如下图),dim 参数就可以对此作出约定。
看到这里,你可能觉得上面画的图是三维的,看起来比较晦涩,所以咱们先从简单的二维的情况说起,我们先声明两个 3x3 的矩阵,代码如下:
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文详细介绍了PyTorch中Tensor的连接、切分和索引操作,以及高级操作中的masked_select函数。通过示例演示了如何使用torch.cat和torch.stack函数进行连接操作,以及chunk、split和unbind方法进行切分操作。此外,还介绍了index_select函数和masked_select函数的使用方法,并通过示例展示了如何根据特定条件选择数据。文章通过清晰的示例和详细的解释,帮助读者快速了解了Tensor的高级操作,为读者在实际应用中更灵活地使用Tensor提供了指导。整篇文章内容涵盖了Tensor操作的基本知识和实际应用,适合对PyTorch中Tensor操作感兴趣的读者阅读学习。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《PyTorch 深度学习实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(20)

  • 最新
  • 精选
  • lwg0452
    更正😀 mask = torch.tensor([[1, 0, 0], [1, 1, 0], [0, 0, 1]]) B = torch.masked_select(A, mask>0)

    作者回复: 你好,lwg0452。👍👍👍👍👍👍回答正确^^。

    2021-10-20
    2
    27
  • optimus
    eye = torch.eye(3) torch.masked_select(A,eye>0)

    作者回复: 👍🏻👍🏻👍🏻👍🏻👍🏻👍🏻

    2022-03-24
    2
    3
  • ifelse
    学习打卡

    编辑回复: 加油

    2023-11-23归属地:浙江
    1
  • Geek_fc975d
    抄作业 # 手动构建了一个True/False A = torch.tensor([[4,5,7],[4,9,8],[2,3,4]]) masked_index = torch.tensor( [[True,False,False], [True,True,False], [False,False,True] ]) torch.masked_select(A, masked_index) # 这篇课程,个人觉得重要的几个知识点 1. index_select返回的结果和输入是一个维度,而masked_select返回一维输出 2. split获取的是原输入的视图,也就是对split的结果的操作会影响原来的数据 3. stack和cat的一个不同点在于,stack会升维,而cat不会。

    作者回复: ^^ 👍🏻👍🏻👍🏻👍🏻

    2022-04-07
    1
  • A🐴@伯乐
    import torch A=torch.tensor([[4,5,7], [3,9,8],[2,3,4]]) B=torch.tensor([[1,0,0],[1,1,0],[1,0,0]]) C=torch.masked_select(A, A*B!=0) print(C)

    作者回复: 👍🏻👍🏻👍🏻

    2022-09-07归属地:北京
  • 亚林
    这是个mask是不是就是传说中的数据打标

    作者回复: 你好,亚林,感谢留言。 差不多这个意思吧。和后面的图像分割中的mask类似。

    2022-05-09
  • Geek_a95f0e
    a=tc.tensor([[4,5,7],[3,9,8],[2,3,4]]) b=tc.tensor([1,0,0,1,1,0,0,0,1],dtype=tc.bool).reshape(3,3) c=tc.masked_select(a,b)

    作者回复: 你好,谢谢你的留言。👍🏻👍🏻👍🏻👍🏻👍🏻👍🏻👍🏻👍🏻完全正确^^.

    2021-10-29
  • 王骥
    input 表示待处理的 Tensor。mask 代表掩码张量,也就是满足条件的特征掩码。这里你需要注意的是,mask 须跟 input 张量有相同数量的元素数目,但形状或维度不需要相同。 老师,mask 须跟 input 张量有相同数量的元素数目,但形状或维度不需要相同 这句话该怎么理解? A = torch.tensor([[4, 5, 7], [3, 9, 8], [2, 3, 4]]) B = torch.masked_select(A, torch.tensor([[1, 0, 0], [1, 1, 0], [0, 0, 1]]) > 0) # B = torch.masked_select(A, torch.tensor([1, 0, 0, 1, 1, 0, 0, 0, 1]) > 0) 我尝试下面一种就会报错。

    作者回复: 你好,王骥。感谢你的留言。很赞的问题,这里“形状或维度不需要相同”,我们举个二维矩阵的例子,你可以只写“一行”,或者所有“行”,但是“列”的数量必须跟原来的数量一致。如下代码: a=torch.randn(3,5) #不会报错 mask=torch.tensor([True, False,False,True,True]) torch.masked_select(a,mask) #会报错 mask=torch.tensor([True, False,False,True]) torch.masked_select(a,mask) 此外,需要注意的是,官网强调:The shapes of the mask tensor and the input tensor don’t need to match, but they must be broadcastable。不过一般而言咱们用的变量基本多为broadcastable的。

    2021-10-24
    2
  • 李雄
    喜欢这节的内容。

    作者回复: 你好,李雄。感谢你的留言,也谢谢你的认可。希望能与你一起学习进步^^

    2021-10-23
    2
  • vcjmhg
    A = torch.tensor([[4, 5, 7], [3, 9, 8], [2, 3, 4]]) mask_matrix = torch.tensor([[1, 0, 0], [1, 1, 0], [0, 0, 1]]) B = torch.masked_select(A, mask == 1)

    作者回复: 你好,vcjmhg。👍🏻👍🏻👍🏻,每次的回答都很赞^^,加油~ 不过masked_select中的参数是mask_matrix不是mask。:)

    2021-10-21
收起评论
显示
设置
留言
20
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部