张量(Tensor)的降维与升维

本文通过Excel示例讲解张量的一维至四维概念,并详细介绍PyTorch中的tensor升维与降维操作,包括torch.squeeze()与torch.unsqueeze()函数的应用。

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

一、Tensor的降维——torch.squeeze()函数

1.tensor的维度

小编对于张量的理解一直很模糊,今天用Excel来帮助大家理解,希望对大家有所帮助。

首先,张量是多维数组,这里不多赘述,可以去查阅相关资料。今天重点介绍的是张量的维度。

张量有一维、二维、三维、四维等。

一维:

正如我们的Eecel表里的3个数字就组成一维数据。

你也可以把它理解为一行数据,即由单个元素组成的一组数据。

 

 

二维:

 二维就是一维的叠加。

前面所说可以把“一行”看作一维

那么二维就是多行,也就相当于Excel里的一个工作部(下方的sheet1)

但是这里要注意,代码最外面有两个中括号,如果只有一个中括号,就会报错。

这里简单记忆可以理解为:有几维,最外面的中括号就有几个

 三维:

 torch.Size([1,2,3]),第一个1表示1个深度,你可以理解为Excel的一个工作部,如果是2,那就是两个工作部。

第二个数字表示2行,第三个数字表示3列。

三维就相当于Excel里的多个工作部

上图所示是深度为1,即1个Excel工作部,接下来我们来看深度为2的,即2分Excel工作部:

这里就有两个深度,相当于一个Excel文件中的两个工作部,sheet1和sheet2。

注意:标黄处是两个工作部的分隔

前文所说,有几个维度就有几个维度。标黄处是2个中括号,即标黄中括号里的数据是第二维,那么这两个中括号中的二维数据(即多行数据)一叠加就成了我们的三维数据(即一个或多个Excel工作部)

如图

四维 :

现在已经介绍完三维了,也就是多个工作部,那这些工作部最终就能组成一个Excel文件,即第四维。

 

这里的torch.Size([1,1,2,3]),左边第一个数字 1表示这个张量在第四维占了一个,即一个Excel表,第二个数字1表示三维上的1,即1个工作部

第三个数字2表示每个工作部里有2行,当然,这里就1个工作部

第四个数字3表示每个工作部里有3列。

2.torch.squeeze()函数

接下来,我们就要介绍tensor的升维与降维,降维用到的函数是torch.squeeze()函数。

那么升维用到的就是torch.unsqueeze()函数。

为什么要降维呢?

小编认为这是为了减少计算耗时,就像你的一个Excel文件,里面有10个工作部,但只有第一个工作部有数据,那其他9个工作部在大部分时候就是无用的,此时就需要用到降维。

我们看下面这个代码,这里,第三维第4维都是只有一个占位(维数)的,也就是说,此时我们在第3维,第4维看到的数据都是一样的,那么就可以降去第3维和第4维。

而第二维有3个占位(维数),如果去掉这一维,那么数据就会收到影响。

以下是降维的具体代码

这里的torch.squeeze(A,0)的0时什么意思呢?

在第0个位置,这个函数就是,如果第0个位置的维度是1,那么就删除该维度

在原本的维度(1,1,3,2)中,从左向右一次是位置0,1,2,3,。没有第四位

 如果我们输入torch.squeeze(A,2),看一看结果:

一个维度也没降,因为第2位置的维度是3,自然不会删除该维度。

那我们再来看看如果输入torch.squeeze(A,4)会是什么结果呢

 (哈哈,当然会报错啦)

同样,也可以输入负数的,负数就有-4,如果是负数,那从左向右一次是-4,-3,-2,-1

 

二、Tensor的升维——torch.unsqueeze(函数)

介绍完降维,我们来介绍一下升维吧

降维理解了,升维就不难理解了

b=a.unsqueeze(0)即在索引0对应的位置增加一个维度

下面是咋索引1对应位置增加一个维度

这是在索引2位置增加:

 

 同样的,这里也没有3,但是可以有负数,就不一一赘述了。

 

### 离散小波变换U-Net的结合及其应用 离散小波变换(Discrete Wavelet Transform, DWT)是一种多分辨率分析工具,在图像处理领域具有广泛的应用。它能够分解信号到不同频率带宽上,从而提取出低频和高频特征[^1]。这种能力使得DWT非常适合用于医学影像分割、压缩以及增强等领域。 #### 小波变换在U-Net中的作用机制 U-Net作为一种经典的卷积神经网络结构,主要用于语义分割任务。其核心思想是通过编码器-解码器架构实现输入图像的空间操作。然而,传统U-Net仅依赖于像素级信息可能无法充分捕捉全局上下文关系或者细节纹理特征。因此引入离散小波变换可以弥补这一缺陷: 1. **多尺度特征融合** 利用DWT将原始图像分解成多个子带图层(如LL、LH、HL 和HH),这些子带分别代表不同的空间方向和平滑程度下的特征表示。随后,可以在U-Net的不同层次注入相应的小波系数作为补充通道数据[^2]。 2. **残差注意力模块设计** 在某些改进版本中,例如WRANet (Wavelet Integrated Residual Attention U-Net),采用了基于小波域特性的新型注意机制来加强重要区域的学习权重分配。具体而言,该方法先执行一次前向传播计算得到初步预测掩模;接着依据此结果指导后续迭代过程中哪些部分更值得关注并加以优化调整。 3. **轻量化建模策略** 对于资源受限场景下部署需求较高的实际应用场景来说,单纯增加参数量往往不是最优解决方案之一。而借助Haar小波基函数构建紧凑型表达形式,则能够在保持较高精度的同时显著低模型复杂度。例如三路径U-Net即采用这种方式实现了高效训练收敛速度提效果明显优于其他同类算法[^3]。 以下是有关如何编程实现上述概念的一个简单示例代码片段: ```python import pywt import torch.nn as nn class DWTLayer(nn.Module): def __init__(self, wavelet='haar'): super(DWTLayer, self).__init__() self.wavelet = wavelet def forward(self, x): coeffs = pywt.dwt2(x.detach().cpu().numpy(), self.wavelet) ll, (lh, hl, hh) = coeffs # Convert back to tensor and move device accordingly. ll_tensor = torch.tensor(ll).to(x.device) lh_tensor = torch.tensor(lh).to(x.device) hl_tensor = torch.tensor(hl).to(x.device) hh_tensor = torch.tensor(hh).to(x.device) return ll_tensor, lh_tensor, hl_tensor, hh_tensor ``` 以上定义了一个PyTorch风格的小波变换层类`DWTLayer`, 它接受任意大小二张量作为输入,并返回四个对应位置上的近似值(LL)其他三个详细分量(LH, HL, HH). ---
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值