Closed klayc-gzl closed 1 year ago
或者说,请问如何将官网下载的PeMS03文件转换成您模型用到的原子文件呢
libcity下载的pems03直接就能用啊,配置复制一下pems04的就行了
下边的.json文件只是配置一些模型的参数,不同数据集用一样的就行
好的好的,谢谢您,主要是我这样使用以后发现就03的会出错,04,07,08都能运行,就在想会不会是这个文件的问题。
上个issue你关了 我以为你解决了。问题应该就是拉普拉斯矩阵计算的问题
好的好的,我再去debug一下,十分感谢!
你这个pems03在哪里下的?
就是您libcity提到那个Google drive里的PeMSD3
您好,我debug了一下发现就是isolated_point_num这个值计算有问题,其它三个数据集计算出来的结果都是0,但是PeMS03数据集计算出来是它的顶点个数358,如果我认为在将这个值赋值为0的话,代码是可以成功运行的。
这是否说明下载的PeMS03数据集没有读取到它顶点与顶点之间相连的关系,导致它们全是孤立的点呢?因为我查看PeMS03数据集中.rel文件发现它们的顶点id是有问题的,并不是顶点命名的数字
没看出来这个rel的问题,跟geo的id是对应的
不好意思,仔细观察了一下,确实是对应的,然后就不太明白是哪里出问题了
我知道了
pems03的config.json有一个配置是:"weight_col": "distance",
但是,rel文件里边的列名是”cost"
这就导致读不到cost,导致邻接矩阵构造出错。
你把config.json里边的"weight_col": "cost", 就对了
{ "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 } }
之前一直没说清楚,看到一个维度是0,我就猜到了是拉普拉斯矩阵这里的孤立点的问题。
因为我记得pems03本身就有孤立点,这个问题就是因为邻接矩阵构造错误导致孤立点本来只有几个,变成了全是孤立点,拉普莱斯向量就出错了。
这个排除孤立点是因为,有孤立点 不是满秩的话 应该前几个特征向量是0,所以选最小的k个特征向量的时候,排除了孤立点对应的前几个
好像原始文件里面,config.json和rel都是使用的distance,当时我也尝试过把这两个都改为cost,但是好像还是存在问题
数据集确实没有问题,我在libcity中用其它模型也是可以跑03数据集的
那也好处理,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
不要改别的地方
你已经定位到孤立点的错误了。就看下孤立点的代码为啥错了就好了
大概率就是邻接矩阵是0矩阵,才会所有点都是孤立点
好的,谢谢您,我再去debug一下
确实是邻接矩阵全是0了
那就看邻接矩阵代码哪里错了,正常是rel里边有的就是1,其他是0
十分感谢您的耐心解答,我发现好像是这两个id标号有点问题,origin_id,destination_id。您在PDFormer中给出的代码好像是自动将id作为了行列标号,如果我将rel里的id改成0-357的话,其邻接矩阵就不再全为0了。
没看懂是啥错误,可以说详细点吗
发自我的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: @.***>
就是您这部分代码中,self.geo_to_ind始终取的0-357的值,但是row[0]和row[1]的id不是0-357的,而是它的317842这种,所以就一直continue,导致邻接矩阵全是0了
您的self.geo_to_ind是根据geo那个文件获得的,它的id就是0-357.
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: @.***>
你这个geo文件好像是错的。
他跟rel文件的id对不上
所以才有这个错误
阿这,原来是数据集没对应上。十分抱歉,耽误您这么多时间!再次感谢您地耐心解答。
从您提供的数据集里面下载的PeMS03只有上面这部分内容,但是下面这部分PeMS03.json没有,应该怎么写呢