将 Graph 从 Networkx 转换为 Dgl 错误时

While converting Graph from Networkx to Dgl error

当我想将 networkx Graph 转换为 dgl 库时出现此错误

KeyError                                  Traceback (most recent call last)

<ipython-input-140-ee8cede61bf4> in <module>()
---> 12 dgl.from_networkx(DiGraphNN, node_attrs=['name'], edge_attrs=['weight'])

/usr/local/lib/python3.7/dist-packages/dgl/convert.py in from_networkx(nx_graph, node_attrs, edge_attrs, edge_id_attr_name, idtype, device)
   1277         for nid in range(g.number_of_nodes()):
   1278             for attr in node_attrs:
-> 1279                 attr_dict[attr].append(nx_graph.nodes[nid][attr])
   1280         for attr in node_attrs:
   1281             g.ndata[attr] = F.copy_to(_batcher(attr_dict[attr]), g.device)

KeyError: 'name' 

'name'代表这里的节点特征,我有这样的数据结构

[(-1, {'name': 11}), (20940, {'name': 11}), (-2, {'name': 11}), (-3, {'name': 11}), (-6, {'name': 11}), (-10, {'name': 11}), (-11, {'name': 11}), (-12, {'name': 11}), (-14, {'name': 11})]

我不明白为什么它无法访问 Graph 的名称功能。

from networkx.classes import digraph
import dgl
from dgl.data import DGLDataset

# dG = dgl.DGLGraph()
dgl.from_networkx(DiGraphNN, node_attrs=['name'], edge_attrs=['weight'])

你有什么建议吗?

我在不同的两天里尝试了不同的事情。我无法直接在这个函数中解决,但我有解决方法,我怀疑它为什么不起作用。

导致此问题的原因:

  1. 如果部分节点没有此功能
  2. 也许边有不同的节点,这些节点没有出现在节点列表中,所以它会自动添加 这些是我的怀疑我现在对 Dgl 了解不多。

我是如何解决这个问题的:

dG = dgl.from_networkx(DiGraphNN)
dG.ndata['name'] = torch.randn(6, 3)
dG.edata['weight'] = torch.randn(5, 4)

所以我创建了没有特征的图,然后我在 DGL 中向图添加了特征。这只是您必须在节点或边的长度中添加特征的示例。

Documentation