Pytorch Tensor 维度操作的形象理解 Tensor.unsqueeze() Tensor.squeeze()

我们认为数组、矩阵、张量都是有形状的,假如有一个形状是 (2×2×3) 的张量 a,从左到右称为第0维、第1维、第2维…我可以使用 a[1] 取出第0维视角下的第1组数据,可以使用 a[:,:,0] 看到第2维视角下的第0组数据。

并且我可以使用 .unsqueeze 方法在 | 0 | 1 | 2| 这三个维度给出的4个任意空隙插入新的维度,如 b = a.unsqueeze(2)b.size() = torch.size([2,2,1,3]) 。可以比较清晰的理解再最高的维度阔维的操作,这就是一些语言中 (如:Python MATLAB) 的广播机制对应的原理。但是在其他部位扩张维度是一件不好理解的事:

In [2]: import torch
In [3]: a = torch.tensor([[1, 2, 3], [4, 5, 6]])
In [4]: a
Out[4]: 
tensor([[1, 2, 3],
        [4, 5, 6]])
In [5]: a.size()
Out[5]: torch.Size([2, 3])
In [6]: b = a.unsqueeze(1)
In [7]: b
Out[7]: 
tensor([[[1, 2, 3]],

        [[4, 5, 6]]])
In [8]: b.size()
Out[8]: torch.Size([2, 1, 3])

对于一个 (2×3) 的张量,从第0维的一维视角看有两组数据 [1, 2, 3] [4, 5, 6],从二维视角看就是一组平面数据,这个平面内实际上是有两个箱子的,一个箱子里放了 [1, 2, 3],另一个箱子里放了 [4, 5, 6],现在我给他在第一维视角上的箱子外又套了一层箱子。这就是阔维的思想。为了形象的理解张量形状的问题,用这种套箱思想,比线、平面、空间思想更加合理。这也与 Python 输出中的一层层方括号更加的契合。

In [9]: c = a.unsqueeze(2)
In [10]: c
Out[10]: 
tensor([[[1],
         [2],
         [3]],
        [[4],
         [5],
         [6]]])
In [11]: c.size()
Out[11]: torch.Size([2, 3, 1])

根据这种思想可以很好的理解上面的这种阔维做了什么。

  • 9
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西土城山羊卷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值