如何将我自己的数据集转换为可供 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) 就是负边。我对么?我没有找到任何有关图表中正边缘/负边缘含义的信息。
您好,可视化 pyg HeteroData 对象的好方法是什么?(定义类似:https://pytorch-geometric.readthedocs.io/en/latest/notes/heterogeneous.html#creating-heterogeneous-gnns)
我尝试使用networkx,但我认为它仅限于同构图(可以转换它,但信息量要少得多)。
g = torch_geometric.utils.to_networkx(data.to_homogeneous(), to_undirected=False )
Run Code Online (Sandbox Code Playgroud)
有人尝试用其他 python lib (matplotlib) 或 js (sigma.js/d3.js) 来做到这一点吗?
您可以分享任何文档链接吗?
visualization networkx graph-visualization pytorch-geometric
我想在 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]
问题:将图形从networkxpytorch 几何图形转换为图形时如何保留节点顺序/标签?
代码:(在 Google Colab 中运行)
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import networkx as nx
import torch
from torch.nn import Linear
import torch.nn.functional as F
torch.__version__
# install pytorch geometric
!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
from torch_geometric.nn import GCNConv
from torch_geometric.utils.convert import to_networkx, from_networkx
# Make the networkx graph
G = nx.Graph()
# Add some cars
G.add_nodes_from([
('Ford', {'y': 0, 'Name': 'Ford'}),
('Lexus', {'y': 1, …Run Code Online (Sandbox Code Playgroud) 我有两个张量
# losses_q
tensor(0.0870, device='cuda:0', grad_fn=<SumBackward0>)
# this_loss_q
tensor([0.0874], device='cuda:0', grad_fn=<AddBackward0>)
Run Code Online (Sandbox Code Playgroud)
当我尝试连接它们时,pytorch 会引发错误:
losses_q = torch.cat((losses_q, this_loss_q), dim=0)
RuntimeError: zero-dimensional tensor (at position 0) cannot be concatenated
Run Code Online (Sandbox Code Playgroud)
如何解决这个错误?
我意识到torch_geometric 库提供了全局池化层和池化层,但我真的不明白这两个层在应用于图神经网络时有什么区别?
我正在用 python 编写并收到错误:
“抛出'std :: bad_alloc'实例后调用终止。what
():std :: bad_alloc。
中止(核心转储)”
经过大量的调试,我发现问题的根源是:
import torch_geometric
Run Code Online (Sandbox Code Playgroud)
我什至只用这行代码创建了一个文件,但仍然收到错误。
我正在 conda 环境(4.10.3)中运行,我确保在 conda 环境中安装了 torch_geometric。我尝试删除并重新安装,但这不起作用。
我还尝试删除并重新安装 torch/cuda。
我用谷歌搜索了这个错误,但似乎只提出了数据分配方面的问题,但我不确定这会是一个问题,因为我只是导入 torch_geometric。
有任何想法吗?
bad-alloc python-import importerror pytorch pytorch-geometric
pytorch ×9
python ×5
graph ×3
networkx ×3
python-3.x ×2
bad-alloc ×1
importerror ×1
tensor ×1
torch ×1