【pytorch】torch.stack()/F.interpolate/unsqueeze_(0)/squeeze()

1.torch.stack()

torch.stack() 函数会将一个元素为张量的序列(列表、元组等)沿着新的维度进行拼接,生成一个新的张量。例如,如果有一个包含 n 个 k维张量的序列,那么它们拼接后的张量就会是 (n, k) 维的。

如果我们将视频的每一帧作为一个张量,存储在列表 frames 中,torch.stack(frames) 的作用就是将所有的帧拼接成一个新的张量 x。假设视频总共有 m 帧,那么 x 的形状就是 (m, c, h, w),其中 c、h、w 分别表示图像的通道数、高度、宽度。因为视频中的每一帧都具有相同的形状,所以 torch.stack() 可以正确地将这些张量拼接在一起,形成一个四维张量。

2.F.interpolate

F.interpolate()是PyTorch中的函数,用于对张量进行插值操作,从而改变其尺寸。具体来说,该函数可以对二维或三维输入张量进行插值,支持各种插值算法,例如最近邻插值、双线性插值和三线性插值等。

函数的参数说明如下:

  • input:输入的张量;
  • size:输出张量的尺寸;
  • scale_factor:输出张量与输入张量的比例系数;
  • mode:插值算法,可以是“nearest”(最近邻插值)、“bilinear”(双线性插值)、“bicubic”(三次样条插值)、“trilinear”(三线性插值)等;
  • align_corners:在进行插值时,是否将像素点放在输入张量的角落。如果该参数为True,则像素点会放在输入张量的角落,否则会放在输入张量的中心。

划重点:

  1. 输入张量的形状必须是4维的,具体形状是 (batch_size, channels, height, width)。

  2. 其中,batch_size和channels是可以为1的,表示只有1个样本和1个通道。

  3. 要对输入张量进行的插值操作必须在height和width两个维度上进行,即必须在后两个维度上指定插值后的目标大小。

  4. 目标大小的形状是(height, width)。

在进行插值操作时,F.interpolate()函数会自动根据目标大小和原始大小计算出插值的比例,并对输入张量进行插值操作。

函数的返回值为插值后的张量。

举个例子:

假设有一个 2x2 的张量 x,其值为:

tensor([[1, 2],
        [3, 4]])

现在我们想把它插值到 4x4 的大小,使用双线性插值的方式,可以这样实现:

import torch.nn.functional as F

x = torch.tensor([[1, 2], [3, 4]], dtype=torch.float32)

# 对张量进行插值,大小为 4x4
y = F.interpolate(x.unsqueeze(0).unsqueeze(0), size=(4, 4), mode='bilinear', align_corners=False)

# 打印输出结果
print(y.squeeze())

》》》
tensor([[1.0000, 1.3333, 1.6667, 2.0000],
        [1.6667, 2.0000, 2.3333, 2.6667],
        [2.3333, 2.6667, 3.0000, 3.3333],
        [3.0000, 3.3333, 3.6667, 4.0000]])

3.unsqueeze_(0)

unsqueeze_(0) 是 PyTorch 中的一个方法,它会在张量的第 0 维(即最前面)增加一个维度。例如,如果原来一个张量的形状为 (3, 5),那么执行 unsqueeze_(0) 后,它的形状就变成了 (1, 3, 5)

4.squeeze()

squeeze()是一个PyTorch张量操作,用于从张量中删除尺寸为1的维度,并返回新的张量。

如果张量中有一个或多个维度的大小为1,则可以使用squeeze()将这些维度删除。例如,如果我们有一个形状为(1, 3, 1, 5)的张量,使用squeeze()将删除尺寸为1的维度,并返回一个形状为(3, 5)的新张量。

如果你想指定要删除的维度,则可以使用squeeze(dim),其中dim是要删除的维度的索引。

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值