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()进行降维和升维的步骤。