最常用的3种Pytorch tensor的维度变化方法

本文详细介绍了在PyTorch中如何利用None和view()方法进行张量维度的变化。None可以方便地在任意位置增加维度,而view()则能改变张量的形状,包括压缩和展开维度。此外,还提到了squeeze()和unsqueeze()在处理单维度张量时的作用。这些技巧在构建和操作深度学习模型时非常关键。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近一周一直在搭建新的模型,学到了很多新的tensor维度变化操作,记录一下:

a = torch.tensor([1,2,3])
1、None增加一维:
b = a[None, :]  # 改成两维(一个逗号),增加到第一维
>>> b == tensor([[1, 2, 3]])

c = a[:, None]  # 改成两维(一个逗号),增加到第二维
>>> c == tensor([[1],[2],[3]])

d = a[:,None, None]  # 改成三维(两个逗号),增加到第二、三维
>>> d == tensor([[[1]],[[2]],[[3]]])

可以看出,None就是用来加[]的,一个None比原来多一维,n个逗号代表最后的向量是n+1维度的。
值得注意的是,None这种加[]不会改变原向量a,并且返回的新向量的属性也是默认tensor属性而不是a的,比如设置a的requires_grad=True,b c d还是默认的requires_grad=False。

2、view(*args) 改变形状

这是一个很有意思的方法,做的事情和None有点类似,但是它可以压缩向量维度。就是把一个tensor的元素先按行列依次展平,然后再reshape成view中传入参数的形状。
其中-1代表自适应。
例如:
1) tensor.view(-1) 代表将tensor展成自适应一维。(注意,如果值view一维,那么传参要不是-1,要不就是所有元素个数。因此view一维建议全部用view(-1)表示)。
2) tensor.view(1,-1) 代表将tensor变成2维,其中第一维是自适应。
3) tensor.view(1, 1,-1) 代表将tensor变成3维,其中第一维是自适应。
…依次类推,如果设置的张量shape没法整除,那么程序会抛出RuntimeError错误,可以后期捕捉。

3、squeeze()和unsqueeze(*args)

tensor.squeeze()不用传参,代表将张量中所有shape1的维数去掉,用于节省内存或者满足强迫症需求。注意的是suqeeze方法去的是所有的shape1的维数。

  1. tensor.unsqueeze(0) 代表在第0维加上一个维数为1的
  2. tensor.unsqueeze(1) 代表在第1维加上一个维数为1的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值