C3Shirt
Results
1
comments of
C3Shirt
> > #SATT_3函数 > > f1 = self.conv1(seq).view(shape[0],self.c_in//4,4,shape[2],shape[3]).permute(0,3,1,4,2).contiguous() > > f2 = self.conv2(seq).view(shape[0],self.c_in//4,4,shape[2],shape[3]).permute(0,1,3,4,2).contiguous() > > logits = torch.einsum('bnclm,bcqlm->bnqlm',f1,f2) > > 这里,我并没有用for循环的方式实现多头注意力,因为,不管是单头还是多头,其本质都是矩阵内积,所以你可以看见:如果我用单头,应该就没有“4”,直接在init中定义映射特征size为self.c_in//4;所以多头无非就是多了几次重复的动作,这里我做了4头注意力,所以我可以认为在特征映射阶段,init中定义映射特征size为self.c_in//4*4=self.c_in,再用这里的代码,分割出4个不同的特征,实现矩阵内积,这是一种实现的方式。 我用PEMS08数据运行了一下,这里的f1维度16(batchsize)*170(nodeNumber)*16*4*4 后面的三个维度16*4*4,其中16*4 是分出来4个特征,每个特征的长度是16 ,那还有一个4有什么实际意义吗?