首先Linear 也是作用的向量的最后一个维度,nn.AvgPool1d也是作用的最后一个维度
所以对一段时间序列(Batch_size,channel number,Length)一般的各种操作都是作用在Length上面的,所以也就是最后一个维度。
比如我有一段数据x.shape=(batch_size=8,length=96,channel=7),我得先x.permute(0,2,1)一下把length放到最后一维,使我们的各种模块作用提取特征啥的,但网络模型的输出得和输入进行loss计算,又得x.permute(0,2,1)回来,所以这中间有两次permute.
比如自从Autoformer开始,后面的各种xxx_former都是这个框架,都permuter两次,主要还是因为autoformer里面的那个预数据处理(embedding部分)得到的数据是(batch,length,channel),而各种卷积啥的还有线形层(Linear)啥的作用的都是最后一维,咱们理应作用在Length维上,所以需要permute.
这里通过loss函数说明一下
MSELoss损失函数_Wanderer001的博客-CSDN博客_mseloss
torch.nn — PyTorch 1.12 documentation
以上为基础必备前提知识
想法1
1.首先nn.Identity这个方法打扰了,解释看这个链接
torch.nn.identity()方法详解_sigmoidAndRELU的博客-CSDN博客_torch.nn.identity()
https://zhuanlan.zhihu.com/p/442092801