xyanchen / WiFi-CSI-Sensing-Benchmark

MIT License
315 stars 55 forks source link

关于NTU_Fi_LSTM的输入X的格式问题 #9

Open yanyvjiangnan opened 1 year ago

yanyvjiangnan commented 1 year ago

在def forward(self,x):后 x = x.view(-1,342,500)假设我dataload里batch为32,----》(32,342,500) x = x.permute(2,0,1) -----》(500,32,342)如果这样放进lstm,在你们HAR数据集上表现不错,但是一旦放到widar数据集(只提取了幅值特性的数据集)就不拟合,我试着调了一下子载波数和时间序列长度----》x = x.permute(1, 0, 2),发现在两个数据集上都可以正常拟合。这是为什么呢?

wanghe97 commented 4 months ago

在def forward(self,x):后 x = x.view(-1,342,500)假设我dataload里batch为32,----》(32,342,500) x = x.permute(2,0,1) -----》(500,32,342)如果这样放进lstm,在你们HAR数据集上表现不错,但是一旦放到widar数据集(只提取了幅值特性的数据集)就不拟合,我试着调了一下子载波数和时间序列长度----》x = x.permute(1, 0, 2),发现在两个数据集上都可以正常拟合。这是为什么呢?

请问你现在解决了这个问题吗?我用了自己的数据集,放进lstm也出现了这个问题

Marsrocky commented 4 months ago

@xyanchen

xyanchen commented 3 months ago

因为在HAR数据集上,数据维度是(batch, antenna, subcarrier, packet),view成(32,342,500)后,也是(batch, feature, time)的排序方式。所以在输入lstm之前使用permute(2, 0, 1)可以调整排序使time到dim 0。而widar数据集的原始维度是(batch, time, x velocity, y velocity),view成(32,22, 400)后,各维度表达的意义为(batch,time,feature)。所以要将time调整到dim 0需要用permute(1,0,2)。理论上只有dim0=time时,lstm model才能正常拟合。