目标:我正在尝试将来自 networkx 的图导入PyTorch 几何并设置标签和节点特征。
(这是在 Python 中)
问题:
- 我该怎么做[从networkx到PyTorch几何的转换]?(大概是通过使用
from_networkx
函数) - 如何转移节点特征和标签?(更重要的问题)
我看过一些其他/以前的帖子,但没有回答(如果我错了,请纠正我)。
尝试:(我只是在下面使用了一个不切实际的例子,因为我不能在这里发布任何真实的东西)
让我们想象一下,我们正在尝试对一组汽车进行图学习任务(例如节点分类)(如我所说,这不是很现实)。也就是说,我们有一组汽车、一个邻接矩阵和一些特征(例如年底的价格)。我们要预测节点标签(即汽车的品牌)。
我将使用以下邻接矩阵:(抱歉,不能使用乳胶来格式化)
A = [(0, 1, 0, 1, 1), (1, 0, 1, 1, 0), (0, 1, 0, 0, 1), (1, 1, 0, 0, 0) , (1, 0, 1, 0, 0)]
这是代码(适用于 Google Colab 环境):
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import networkx as nx
from torch_geometric.utils.convert import to_networkx, from_networkx
import torch
!pip install torch-scatter torch-sparse torch-cluster torch-spline-conv torch-geometric -f https://data.pyg.org/whl/torch-1.10.0+cpu.html
# Make the networkx graph
G = nx.Graph()
# Add some cars (just do 4 for now)
G.add_nodes_from([
(1, {'Brand': 'Ford'}),
(2, {'Brand': 'Audi'}),
(3, {'Brand': 'BMW'}),
(4, {'Brand': 'Peugot'}),
(5, {'Brand': 'Lexus'}),
])
# Add some edges
G.add_edges_from([
(1, 2), (1, 4), (1, 5),
(2, 3), (2, 4),
(3, 2), (3, 5),
(4, 1), (4, 2),
(5, 1), (5, 3)
])
# Convert the graph into PyTorch geometric
pyg_graph = from_networkx(G)
所以这正确地将networkx图转换为PyTorch Geometric。但是,我仍然不知道如何正确设置标签。
每个节点的品牌价值已被转换并存储在:
pyg_graph.Brand
下面,我刚刚为每个节点制作了一些长度为 5 的随机 numpy 数组(假装这些是现实的)。
ford_prices = np.random.randint(100, size = 5)
lexus_prices = np.random.randint(100, size = 5)
audi_prices = np.random.randint(100, size = 5)
bmw_prices = np.random.randint(100, size = 5)
peugot_prices = np.random.randint(100, size = 5)
这让我想到了主要问题:
- 如何将价格设置为该图的节点特征?
- 如何设置节点的标签?(我需要
pyg_graph.Brand
在训练网络时删除标签吗?)
提前致谢,节日快乐。