AILab-CVC/UniRepLKNet

作者您好,在Time-series子项目中,张量的格式似乎出错

prestyan opened this issue · 7 comments

133:enc_out = self.encoder(enc_out)
# enc_out's shape [350, 1000]
134:enc_out = enc_out.reshape(self.node_num,-1,self.d_model)
# however, node_num = 350 and d_model = 768
这导致无法转换:RunTimEerror:shape '[350,-1,768]' is invalid for input size 350000.
我发现github仓库中代码和点云代码中不同,是否是哪里需要进行改动,但是我不敢随意改动网络模型格式。
非常感谢!

方便多贴一些代码和截图吗 这里面网络的结构不需要改变 只需要改变一下这里的张量形状 可以发一下你运行的代码脚本和相关参数设定

可以的,我使用的数据是按照readme里面所说的在点云data文件中下载,并放到了dataset文件夹中,运行结果如截图所示。
run
运行的项目为Time-Series,在该项目文件夹中所使用的unireplknet.py为从主文件夹复制,文件夹格式安排为:
dir
运行方法:按照Time-Series中readme所提示的命令运行,即bash ./scripts/Global_Temp/UniRepLKNet.sh,并无其他改动。
并没有使用iGEMM,使用默认pytorch卷积。
由于Time-Series中的models中不包含Corrformer_Large.py文件,所以在exp/exp_main.py文件中,在import中删除了Corrformer_Large,只保留from models import Corrformer
其余全部使用默认代码。

补充dataset文件组织形式:
image

同学你好,你这个问题是因为你调用外层的UniRepLKNet的时候前传过了ImageNet的分类头所以特征被分类成了(1000种类别),但是在时序里面我们仅使用UniRepLKNet所提取的特征。

除此以外,可以对照一下我给出的对应的代码和张量形状输出

核心使用UniRepLKNet前传的代码如下面所示,对应github上面开源部分L126L134

B, L, D = x_enc.shape
print((x_enc.shape))
_, _, C = x_mark_enc.shape
x_enc = x_enc.view(B, L, self.node_num, -1).permute(0, 2, 1, 3).contiguous() \
    .view(B * self.node_num, L, D // self.node_num)
print((x_enc.shape))
x_mark_enc = x_mark_enc.unsqueeze(1).repeat(1, self.node_num, 1, 1).view(B * self.node_num, L, C)
print((x_enc.shape))
enc_out = self.enc_embedding(x_enc, x_mark_enc)
print((enc_out.shape))
enc_out = enc_out.reshape(self.node_num,1,192,192)
print((enc_out.shape))

image

谢谢,祝您早日发表!

replk/UniRepLKNet/Time-Series/layers/Multi_Correlation.py", line 111, in forward
_, S, _ = keys.shape
ValueError: too many values to unpack (expected 3)
根据上述更改后,会出现这个bug,请教下怎么改

replk/UniRepLKNet/Time-Series/layers/Multi_Correlation.py", line 111, in forward _, S, _ = keys.shape ValueError: too many values to unpack (expected 3) 根据上述更改后,会出现这个bug,请教下怎么改

是参数过多,需要去除一些