如何将我自己的数据集转换为可供 pytorch 几何图形神经网络使用的数据集?
所有教程都使用已转换为可由 pytorch 使用的现有数据集。例如,如果我有自己的点云数据集,如何使用它来训练图神经网络的分类?我自己的分类图像数据集怎么样?
目标:我正在尝试将网络中的图形导入 PyTorch 几何图形并设置标签和节点特征。
(这是Python中的)
问题):
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 …
Run Code Online (Sandbox Code Playgroud) 我试图找到图中负边和正边的解释,如函数 train_test_split_edges Pytorch Geometric doc开头所述。根据文档文件,它说该函数应该将图分成“正和负训练/验证/测试边缘”。就此而言,正边缘或负边缘的含义是什么?根据代码,正边“似乎”是图的邻接矩阵的上三角形中的边的连接,负边是邻接矩阵的下三角形中的边。因此,如果 (1,0) 被认为是正边,那么在无向图中 (0,1) 就是负边。我对么?我没有找到任何有关图表中正边缘/负边缘含义的信息。
我想在 Pytorch Geometric 中处理加权无向图。节点特征是50维的。我发现这可以通过类x
的属性来处理torch_geometric.data.data
。边的权重是标量值。我们发现edge_attr
和edge_weight
是处理边缘的属性。
我想我应该使用edge_weight
,这是正确的吗?
edge_attr
另外,和 之间有什么区别edge_weight
?
我的英语不太好,所以对此我深表歉意。我希望我能得到一个好的答案。
谢谢。
我自己有一个数据集,该数据集包含两个类,比方说0和1。此外,还有很大一部分类的节点未标记。我的目标是使用 GCN 预测这些未标记的节点。但我对如何处理 Pytorch Geometric 中这些未标记的节点感到困惑。
据我所知,我可以将节点标记为 3 类:0、1 和未知。但如果我这样做,这意味着我试图将数据集分为三类?(但这不是我想要的,因为未知不是一个类)。
处理这些节点的另一种方法是忽略它们,只需在标记的节点上运行 PyG 即可。但这样看来,这些未标记的节点(具有特征)在数据集中似乎没有用处?
我的数据对象有data.adj_t
参数,给我稀疏邻接矩阵。我怎样才能从中得到edge_index
尺寸张量?[2, num_edges]
我有一个节点1、节点2 形式的数据集,想要使用网络来构建图表。这是一个相当大的数据集,导致图具有 500k 个节点
import pandas as pd
import numpy as np
import networkx as nx
df = pd.read_csv('large.csv')
G=nx.from_pandas_edgelist(df, 'node1','node2')
Run Code Online (Sandbox Code Playgroud)
这部分代码运行速度非常快,将数据帧转换为图形。然后我尝试应用弹簧布局:
pos = nx.spring_layout(G)
Run Code Online (Sandbox Code Playgroud)
这部分代码需要很长时间。如果我尝试不同的布局,如circular_layout或shell_layout,它会非常快,但布局与我的图表相符。
对于这么大的图,有没有更好的方法来应用 spring_layout ?
我正在使用 NetworkX 和 Matplotlib 绘制节点,但节点有时会在图形边缘被切断。是否有设置可以增加边距或防止它们被切断?
图像:节点在图形边缘被切除
示例程序:
import networkx as nx
import matplotlib.pyplot as plt
import numpy as np
adjacency_matrix = np.array([[1,0,0,0,0,0,1,0],[0,1,1,1,1,0,0,0],[0,1,1,0,0,0,0,0],[0,1,0,1,0,0,0,0],
[0,1,0,0,1,1,0,0],[0,0,0,0,1,1,1,1],[1,0,0,0,0,1,1,0],[0,0,0,0,0,1,0,1]])
nx_graph = nx.from_numpy_matrix(adjacency_matrix)
pos = nx.networkx.kamada_kawai_layout(nx_graph)
nx.draw_networkx_nodes(nx_graph, pos, node_color="#000000", node_size=10000)
nx.draw_networkx_edges(nx_graph, pos, color="#808080", alpha=0.2, width=2.0)
plt.axis('off')
plt.tight_layout()
plt.show()
Run Code Online (Sandbox Code Playgroud)