PyTorch中为什么需要使用squeeze()和unsqueeze()操作?

1 问题描述

今天在学习FaceBoxes~

在看到模型推理部分的代码时,总会出现squeeze()和unsqueeze()操作,从网上的资料上来看,就是升维和降维的操作,但是为什么需要进行这样的操作呢?

2 PyTorch中的squeeze()和unsqueeze()操作

看到“西北小生_”的博文,给予了我一定的启发《torch.squeeze()和torch.unsqueeze()》,他在博文中是这样说的:

unsqueeze()函数的功能是在tensor的某个维度上添加一个维数为1的维度,这个功能用view()函数也可以实现。这一功能尤其在神经网络输入单个样本时很有用,由于pytorch神经网络要求的输入都是mini-batch型的,维度为[batch_size, channels, w, h],而一个样本的维度为[c, w, h],此时用unsqueeze()增加一个维度变为[1, c, w, h]就很方便了。

莫烦在教程中也讲到过,Torch只能处理二维的数据,

果然,“西北小生_”的表述是很有道理,今天在学习了《Deep Learning with PyTorch: A 60 Minute Blitz》,终于有些明白了,

Soumith Chintala在他的教程中是这样讲述的,

我觉得讲的挺好的,.unsqueeze(0)操作主要是针对于此时的输入数据只包含一个样本的情况;

感谢网友“中国拖拉机手”的解答,他是这样说的:

pytorch中,处理图片必须一个batch一个batch的操作,所以我们要准备的数据的格式是 [batch_size, n_channels, hight, width]

这样的话,我就明白了,将图像数据的张量送入到torch中进行处理之前,首先需要转换成[batch_size, n_channels, hight, width]的格式,所以需要使用unsqueeze()的升维操作;

而相应的,在降维的时候,需要用到squeeze()操作;

所以,我们会在PyTorch中使用使用squeeze()和unsqueeze()进行降维和升维的步骤。

  • 17
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值