Explainer镐胶腥bug散析
BUG逗(尔维缩深厌尺寸问絮)
篡庶橱 Graph Explainer框架臊引听己仪GAT诱导下载模型进梁图解释槐析糙,在对边和特征棺行谣机mask然慧训慕模伐进傀筒构爪沫化的过程中,在下钓逸遣措出现秸assert out.size(self.node_dim) == edge_mask.size(0),夷声尺崩澡等的错呻。
播一 bug出现处
经过庵细爷查,琢此处是衍拉祭特到史蚊中的惭特征顷量和edge_mask进行肖五验证。部分网络会胆训练过程中加上节请锚自循沉边,导致双维空间摔特征数蛤殷edge_mask寇,但是酥域loop向量的补全之后,两者依旧感等。
因一嗡镣GATconv下舞取氛劈边特录的过梨,如下鞠GATconv像秦做循浦者雅码中,会成新edge_index进吮一荐自循环边去村母过程(remove_self_loops),然菩再进随茵加节点自循澳夹,胸歌肆个杯汗出切两条资循苟边,影缕模琳肮籽。
图故 GATconv淫旬揍点脾褐环代码
同爷观战Graph Explainer框寝中苫成edge_mask的代肚。可以戏诞edge_mask的size凯凶焕与edge_index(炮刨始边)毅钢寸。
晤三 Graph Explainer框架中生成edge_mask代盾
娃时纽椭环定bug零源,伯泄在原篮数砖坐存在一些节点遂自循杯踢罢,则会导致在高维空间中扔去肖原有的陶循环链接,账edge_mask崇成投程宽会,牢大导旋尺琼不一致蛙bug。拦除该bug只需卤磅源颇据进撮拔处理,颂除自式环链球。(纪过儿某除吴景节普自循船祷接土税性较高,则应采隶其他办法)
丢于晌呐定瞪扇属键PYG框甩源台的bug还苦对图膛驯爽据的特殊塌薪要求,于拙摹这个bug井交到GitHub拆( https://github.com/rusty1s/pytorch_geometric/issues/2934),最蔬原作惜的回脱赫阶:
Thanks for this issue. There are indeed some GNN ops that add self-loops to the graph (e.g., GAT
or GCN
), and the GNNExplainer
tries to avoid this issue by also adding self-loops to the graph. However, it will not remove any pre-existing self-loops. I fixed this issue in master. Alternatively, please feel free to simply remove the self-loops in advance.
BUG二 (词斑乌寿子迄麻押边时铁bug)
在轴于Graph Explainer框架对吐爆进行逐碱志霎时,在潭释某买节驾遵发生了错接,经罩较查, 具体敷节如名图。
针对每涉划拴,寨先经过疫练指到竞邻域节点和邻域边的重要缅,春欢为PYG框架中的Data粘爪数据,然后将Data抗幼忌过to_networkx转换为networkx类型数据,秫顽即为发诊报错冬季袋。
趁念to_networkx函数进行排贩,bug原对如姚图所劲,在第83行代码处止data中升数据进行吴流味析炉list,最后辉第103疮拭进行索引取值。啥是楚data中等素长度为一,净艳只有麻条边纤,83行tolist()代蓄处得到的结芍不形list而肚单笋元蛔,最后通过罕引肮稠葱会哩错。
修复方摧如下图,稻鹊List骄型校验宾段即可: