千家信息网

PyTorch中的squeeze()和unsqueeze()如何应用

发表于:2024-11-26 作者:千家信息网编辑
千家信息网最后更新 2024年11月26日,本篇内容主要讲解"PyTorch中的squeeze()和unsqueeze()如何应用",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"PyTorch中的sq
千家信息网最后更新 2024年11月26日PyTorch中的squeeze()和unsqueeze()如何应用

本篇内容主要讲解"PyTorch中的squeeze()和unsqueeze()如何应用",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"PyTorch中的squeeze()和unsqueeze()如何应用"吧!

1.torch.squeeze

squeeze的用法主要就是对数据的维度进行压缩或者解压。

先看torch.squeeze() 这个函数主要对数据的维度进行压缩,去掉维数为1的的维度,比如是一行或者一列这种,一个一行三列(1,3)的数去掉第一个维数为一的维度之后就变成(3)行。squeeze(a)就是将a中所有为1的维度删掉。不为1的维度没有影响。a.squeeze(N) 就是去掉a中指定的维数为一的维度。还有一种形式就是b=torch.squeeze(a,N) a中去掉指定的定的维数为一的维度。

换言之:

表示若第arg维的维度值为1,则去掉该维度,否则tensor不变。(即若tensor.shape()[arg] == 1,则去掉该维度)

例如:

一个维度为2x1x2x1x2的tensor,不用去想它长什么样儿,squeeze(0)就是不变,squeeze(1)就是变成2x2x1x2。(0是从最左边的维度算起的)

>>> x = torch.zeros(2, 1, 2, 1, 2)>>> x.size()torch.Size([2, 1, 2, 1, 2])>>> y = torch.squeeze(x)>>> y.size()torch.Size([2, 2, 2])>>> y = torch.squeeze(x, 0)>>> y.size()torch.Size([2, 1, 2, 1, 2])>>> y = torch.squeeze(x, 1)>>> y.size()torch.Size([2, 2, 1, 2])

2.torch.unsqueeze

torch.unsqueeze()这个函数主要是对数据维度进行扩充。给指定位置加上维数为一的维度,比如原本有个三行的数据(3),在0的位置加了一维就变成一行三列(1,3)。a.squeeze(N) 就是在a中指定位置N加上一个维数为1的维度。还有一种形式就是b=torch.squeeze(a,N) a就是在a中指定位置N加上一个维数为1的维度。

>>> x = torch.tensor([1, 2, 3, 4])>>> torch.unsqueeze(x, 0)tensor([[ 1,  2,  3,  4]])>>> torch.unsqueeze(x, 1)tensor([[ 1],        [ 2],        [ 3],        [ 4]])

3.例子

给一个使用上述两个函数,并进行一次卷积的例子:

from torchvision.transforms import  ToTensorimport torch as tfrom torch import nnimport cv2import numpy as npimport cv2to_tensor = ToTensor()# 加载图像lena = cv2.imread('lena.jpg', cv2.IMREAD_GRAYSCALE)cv2.imshow('lena', lena)# input = to_tensor(lena) 将ndarray转换为tensor,自动将[0,255]归一化至[0,1]。input = to_tensor(lena).unsqueeze(0)# 初始化卷积参数kernel = t.ones(1, 1, 3, 3)/-9kernel[:, :, 1, 1] = 1conv = nn.Conv2d(1, 1, 3, 1, padding=1, bias=False)conv.weight.data = kernel.view(1, 1, 3, 3)# 输出out = conv(input)out = out.squeeze(0)print(out.shape)out = out.unsqueeze(3)print(out.shape)out = out.squeeze(0)print(out.shape)out = out.detach().numpy()# 缩放到0~最大值cv2.normalize(out, out, 1.0, 0, cv2.NORM_INF)cv2.imshow("lena-result", out)cv2.waitKey()

结果图如下:

到此,相信大家对"PyTorch中的squeeze()和unsqueeze()如何应用"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

0