RandomLinkSplit无法使用HeteroData



在处理自己的数据时,torch-geometric遇到了一些严重的问题。我试图构建一个图,它有4个不同的节点实体(其中只有1个具有一些节点特征,其他都是简单节点(和5个不同的边类型(其中只有一个具有权重(。我通过构建一个HeteroData()对象并加载带有标签、属性等的不同矩阵来做到这一点

当我尝试调用RandomLinkSplit时,问题就出现了。以下是我的呼叫:

import torch_geometric.transforms as T

transform = T.RandomLinkSplit(
num_val = 0.1,
num_test = 0.1,
edge_types = [('Patient', 'suffers_from', 'Diagnosis'),
('bla', 'bla', 'bla') #I copy all the edge types here
],

)

但我得到了空的AssertionError,条件是:

assert is instance(rev_edge_types, list)

因此,我认为我需要像教程中那样将图转换为无向(出于某种奇怪的原因(,然后对反向边进行采样(尽管我不需要它们(:

import torch_geometric.transforms as T
data = T.ToUndirected()(data)
transform = T.RandomLinkSplit(
num_val = 0.1,
num_test = 0.1,
edge_types = [('Patient', 'suffers_from', 'Diagnosis'),
('bla', 'bla', 'bla') #I copy all the edge types here
],
rev_edge_types = [('Diagnosis', 'rev_suffers_from', 'Patient'),
...
]

)

但是这次我得到了错误CCD_ 5。

有专家知道为什么会发生这种情况吗?我只是想做一个训练测试拆分,从文档中我读到异构图应该得到很好的支持,但我不明白为什么这不起作用,我已经尝试了很多时间不同的东西。

任何帮助都将不胜感激!感谢

您应该尝试对每条边进行拆分,并一次对一种边类型进行训练。

transform = T.RandomLinkSplit(
num_val = 0.1,
num_test = 0.1,
edge_types = ('Patient', 'suffers_from', 'Diagnosis'),
rev_edge_types = ('Diagnosis', 'rev_suffers_from', 'Patient')

)

相关内容

  • 没有找到相关文章

最新更新