在处理自己的数据时,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')
)