将 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'])
你有什么建议吗?
我在不同的两天里尝试了不同的事情。我无法直接在这个函数中解决,但我有解决方法,我怀疑它为什么不起作用。
导致此问题的原因:
- 如果部分节点没有此功能
- 也许边有不同的节点,这些节点没有出现在节点列表中,所以它会自动添加
这些是我的怀疑我现在对 Dgl 了解不多。
我是如何解决这个问题的:
dG = dgl.from_networkx(DiGraphNN)
dG.ndata['name'] = torch.randn(6, 3)
dG.edata['weight'] = torch.randn(5, 4)
所以我创建了没有特征的图,然后我在 DGL 中向图添加了特征。这只是您必须在节点或边的长度中添加特征的示例。
当我想将 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'])
你有什么建议吗?
我在不同的两天里尝试了不同的事情。我无法直接在这个函数中解决,但我有解决方法,我怀疑它为什么不起作用。
导致此问题的原因:
- 如果部分节点没有此功能
- 也许边有不同的节点,这些节点没有出现在节点列表中,所以它会自动添加 这些是我的怀疑我现在对 Dgl 了解不多。
我是如何解决这个问题的:
dG = dgl.from_networkx(DiGraphNN)
dG.ndata['name'] = torch.randn(6, 3)
dG.edata['weight'] = torch.randn(5, 4)
所以我创建了没有特征的图,然后我在 DGL 中向图添加了特征。这只是您必须在节点或边的长度中添加特征的示例。