BUAABIGSCity / PDFormer

[AAAI2023] A PyTorch implementation of PDFormer: Propagation Delay-aware Dynamic Long-range Transformer for Traffic Flow Prediction.
MIT License
209 stars 35 forks source link

您好,请问PeMS03.json文件应该怎么写呢? #27

Closed klayc-gzl closed 1 year ago

klayc-gzl commented 1 year ago

从您提供的数据集里面下载的PeMS03只有上面这部分内容,但是下面这部分PeMS03.json没有,应该怎么写呢 3~PLR`C%_76QCR O7D Z2B1

klayc-gzl commented 1 year ago

或者说,请问如何将官网下载的PeMS03文件转换成您模型用到的原子文件呢

aptx1231 commented 1 year ago

libcity下载的pems03直接就能用啊,配置复制一下pems04的就行了

aptx1231 commented 1 year ago

下边的.json文件只是配置一些模型的参数,不同数据集用一样的就行

klayc-gzl commented 1 year ago

好的好的,谢谢您,主要是我这样使用以后发现就03的会出错,04,07,08都能运行,就在想会不会是这个文件的问题。

aptx1231 commented 1 year ago

上个issue你关了 我以为你解决了。问题应该就是拉普拉斯矩阵计算的问题

klayc-gzl commented 1 year ago

好的好的,我再去debug一下,十分感谢!

aptx1231 commented 1 year ago

你这个pems03在哪里下的?

klayc-gzl commented 1 year ago

就是您libcity提到那个Google drive里的PeMSD3

klayc-gzl commented 1 year ago

您好,我debug了一下发现就是isolated_point_num这个值计算有问题,其它三个数据集计算出来的结果都是0,但是PeMS03数据集计算出来是它的顶点个数358,如果我认为在将这个值赋值为0的话,代码是可以成功运行的。 1698996108282 image

klayc-gzl commented 1 year ago

这是否说明下载的PeMS03数据集没有读取到它顶点与顶点之间相连的关系,导致它们全是孤立的点呢?因为我查看PeMS03数据集中.rel文件发现它们的顶点id是有问题的,并不是顶点命名的数字 image

aptx1231 commented 1 year ago

没看出来这个rel的问题,跟geo的id是对应的

klayc-gzl commented 1 year ago

不好意思,仔细观察了一下,确实是对应的,然后就不太明白是哪里出问题了

aptx1231 commented 1 year ago

我知道了

pems03的config.json有一个配置是:"weight_col": "distance",

但是,rel文件里边的列名是”cost"

这就导致读不到cost,导致邻接矩阵构造出错。

你把config.json里边的"weight_col": "cost", 就对了

aptx1231 commented 1 year ago

{ "geo": { "including_types": [ "Point" ], "Point": {} }, "rel": { "including_types": [ "geo" ], "geo": { "distance": "num" } }, "dyna": { "including_types": [ "state" ], "state": { "entity_id": "geo_id", "traffic_flow": "num" } }, "info": { "data_col": [ "traffic_flow" ], "weight_col": "distance", "data_files": [ "PEMSD3" ], "geo_file": "PEMSD3", "rel_file": "PEMSD3", "output_dim": 1, "time_intervals": 300, "init_weight_inf_or_zero": "zero", "set_weight_link_or_dist": "link", "calculate_weight_adj": false, "weight_adj_epsilon": 0.1 } }

aptx1231 commented 1 year ago

之前一直没说清楚,看到一个维度是0,我就猜到了是拉普拉斯矩阵这里的孤立点的问题。

因为我记得pems03本身就有孤立点,这个问题就是因为邻接矩阵构造错误导致孤立点本来只有几个,变成了全是孤立点,拉普莱斯向量就出错了。

aptx1231 commented 1 year ago

这个排除孤立点是因为,有孤立点 不是满秩的话 应该前几个特征向量是0,所以选最小的k个特征向量的时候,排除了孤立点对应的前几个

klayc-gzl commented 1 year ago

好像原始文件里面,config.json和rel都是使用的distance,当时我也尝试过把这两个都改为cost,但是好像还是存在问题

klayc-gzl commented 1 year ago

数据集确实没有问题,我在libcity中用其它模型也是可以跑03数据集的

aptx1231 commented 1 year ago

那也好处理,2个地方可能出现问题

(1)计算adj_mx:看这个代码计算出来的邻接矩阵对不对,是不是全0:https://github.com/BUAABIGSCity/PDFormer/blob/master/libcity/data/dataset/traffic_state_datatset.py#L105

(2)看根据邻接矩阵计算孤立点的代码对不对,为啥算出来全是孤立点:https://github.com/BUAABIGSCity/PDFormer/blob/master/libcity/executor/pdformer_executor.py#L50

不要改别的地方

aptx1231 commented 1 year ago

你已经定位到孤立点的错误了。就看下孤立点的代码为啥错了就好了

aptx1231 commented 1 year ago

大概率就是邻接矩阵是0矩阵,才会所有点都是孤立点

klayc-gzl commented 1 year ago

好的,谢谢您,我再去debug一下

klayc-gzl commented 1 year ago

确实是邻接矩阵全是0了

aptx1231 commented 1 year ago

那就看邻接矩阵代码哪里错了,正常是rel里边有的就是1,其他是0

klayc-gzl commented 1 year ago

十分感谢您的耐心解答,我发现好像是这两个id标号有点问题,origin_id,destination_id。您在PDFormer中给出的代码好像是自动将id作为了行列标号,如果我将rel里的id改成0-357的话,其邻接矩阵就不再全为0了。 0TW2JU `MN}`OQI6BP@2F_0 1699002941803

aptx1231 commented 1 year ago

没看懂是啥错误,可以说详细点吗

发自我的iPhone

------------------ 原始邮件 ------------------ 发件人: kk @.> 发送时间: 2023年11月3日 17:16 收件人: BUAABIGSCity/PDFormer @.> 抄送: Jiawei Jiang @.>, Comment @.> 主题: Re: [BUAABIGSCity/PDFormer] 您好,请问PeMS03.json文件应该怎么写呢? (Issue #27)

十分感谢您的耐心解答,我发现好像是这两个id标号有点问题,origin_id,destination_id。您在PDFormer中给出的代码好像是自动将id作为了行列标号,如果我将rel里的id改成0-357的话,其邻接矩阵就不再全为0了。

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>

klayc-gzl commented 1 year ago

就是您这部分代码中,self.geo_to_ind始终取的0-357的值,但是row[0]和row[1]的id不是0-357的,而是它的317842这种,所以就一直continue,导致邻接矩阵全是0了 1699004333551 image

klayc-gzl commented 1 year ago

您的self.geo_to_ind是根据geo那个文件获得的,它的id就是0-357. image image

aptx1231 commented 1 year ago

Geo-to-idx,本身就是把原始id转换成0开始的id呀,这可能不是核心错误

发自我的iPhone

------------------ 原始邮件 ------------------ 发件人: kk @.> 发送时间: 2023年11月3日 17:41 收件人: BUAABIGSCity/PDFormer @.> 抄送: Jiawei Jiang @.>, Comment @.> 主题: Re: [BUAABIGSCity/PDFormer] 您好,请问PeMS03.json文件应该怎么写呢? (Issue #27)

就是您这部分代码中,self.geo_to_ind始终取的0-357的值,但是row[0]和row[1]的id不是0-357的,而是它的317842这种,所以就一直continue,导致邻接矩阵全是0了

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>

aptx1231 commented 1 year ago

你这个geo文件好像是错的。

image

他跟rel文件的id对不上

aptx1231 commented 1 year ago

所以才有这个错误

klayc-gzl commented 1 year ago

阿这,原来是数据集没对应上。十分抱歉,耽误您这么多时间!再次感谢您地耐心解答。