问题标签 [pytorch-geometric]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 如何从networkx将图形加载到PyTorch几何中并设置节点特征和标签?
目标:我正在尝试将来自 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 环境):
所以这正确地将networkx图转换为PyTorch Geometric。但是,我仍然不知道如何正确设置标签。
每个节点的品牌价值已被转换并存储在:
下面,我刚刚为每个节点制作了一些长度为 5 的随机 numpy 数组(假装这些是现实的)。
这让我想到了主要问题:
- 如何将价格设置为该图的节点特征?
- 如何设置节点的标签?(我需要
pyg_graph.Brand
在训练网络时删除标签吗?)
提前致谢,节日快乐。
python - PyTorch:'RuntimeError:预期的标量类型 Long,但发现 Float'pytorch 几何错误
这篇文章是从上一篇文章开始的(我将在下面的代码中使用相同的示例)。我已阅读有关这些错误的其他帖子,但我认为这些解决方法对我没有帮助。
目标:实现一个节点分类任务(类似于Cora,但应用不同)
问题:如何解决我遇到的这些错误?
- 'IndexError:用作索引的张量必须是长、字节或布尔张量'(在我的主代码中得到这个)
- 'RuntimeError: expected scalar type Long but found Float'(当我试图以公共友好的形式重现代码时,在我的代码中得到这个,以及上面的错误)
上下文:这是下面的代码:(在 Google Colab 中使用)
对于下面的示例,我将尝试对节点的类别进行分类,每个节点将有一个长度为 5 的特征向量(现在刚刚完全弥补)。我将使用邻接矩阵:
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)]
我认为上面的一切都是正确的(我很幸运在后面部分得到了一些帮助)。概括地说,上面的代码:
一个。在中创建图形 (G)networkx
湾。分配品牌(即类别)和特征向量
C。将图形转换为 PyTorch 几何图形
d。为 PyTorch 几何定义 train_mask 和 test_mask
下面的大部分代码来自 Pytorch Geometric Cora 教程代码,只有一点点改变了一两次(例如变量的名称)。但是,这会导致错误,因此急于了解导致错误的原因。
这是我现在尝试更改变量类型以防止错误的地方。
现在代码继续:
data.x = data.x.type(LongTensor)
如/etc行所示。我已经尝试过这些解决方案,但似乎没有任何效果。此外,由于某种原因,在我的示例笔记本中执行该行时(此帖子的版本),我收到一个错误:NameError: name 'LongTensor' is not defined' 但我将把它放在另一篇文章中好像不能导入torch_C
。
任何帮助将不胜感激,并希望每个人都有一个愉快的假期。
pytorch-geometric - 将 Pytorch Geometric 与 TorchDyn 结合使用时出错
我正在尝试使用 TorchDyn 将使用 PyTorch Geometric 编写的 GCN 转换为图形神经 ODE。GCN 本身可以正常工作,但我尝试使用以下代码转换为 GDE:
这会产生以下错误:
Learner
定义了关于 TorchDyn 快速入门中描述的格式,并且train_loader
和val_loader
来自torch_geometric.dataloader
,包含torch_geometric.batch
由 GCN 的功能解包的对象,forward
如下所示:
尽管该问题引发的错误torch_geometric
显然源于torchdyn
GCN 单独正常工作。我将不胜感激调试此错误的任何帮助。
python - 将图从networkx转换为pytorch几何时如何保留节点顺序?
问题networkx
:将图形从pytorch 几何转换时如何保留节点顺序/标签?
代码:(在 Google Colab 中运行)
当我在代码的最后一行打印边缘索引时,每次运行它都会得到不同的答案。最重要的是,我希望始终获得相同(正确)的答案,从而从 networkx 中保留每个节点编号:
这个边缘索引张量的形式是:
- 第一个列表包含源节点的节点 ID
- 第二个列表包含目标节点的节点 ID
对于要保留的节点 ID,我们希望节点 0 在第一个(源)列表中出现 3 次,而不是仅出现两次。
我有什么办法可以强制 PyTorch Geometric 复制节点 ID?
谢谢
[编辑] 我有一种可能的解决方法是使用以下代码,它能够为 PyTorch 几何生成边缘索引和权重张量
pytorch - Pytorch:如何仅针对 GNN 中的节点子集进行训练/预测
我正在尝试开发一个图神经网络来解决节点子集上的约束问题。如何强制某些节点包含在其他节点的评估中(消息传递)但它们自己的值不会改变(因为它们是边界条件而没有被训练或预测)。
谢谢你的帮助!
deep-learning - GCNConv 模块上的spectral_norm
我想在 GCNConv 层上调用 torch.nn.utilsspectral_norm 函数
但我收到以下错误:
意味着 gc1._parameters 没有权重(只有偏差):
但是, gc1.parameters() 存储两个对象,其中一个是 16 x 18 矩阵(权重矩阵)。
如何使spectral_norm 函数在GCNConv 模块上工作?
python - Torch Geometric - RuntimeError:mat1 和 mat2 形状不能相乘(1479x1 和 1479x1024)
我正在尝试创建一个模拟蛋白质的 GNN。但是,我遇到了一个错误GraphConv
(我得到了同样的错误GCNConv
)。我不明白为什么当形状应该能够相乘时会出现此错误。我认为这个错误一定与我创建的自定义数据集有关,但我不能 100% 确定。如果您有类似的问题或知道如何解决此问题,请告诉我。谢谢你。
编辑:即使我更改embedding_size
为1479
,我仍然得到:RuntimeError: mat1 and mat2 shapes cannot be multiplied (1479x1 and 1479x1479)
。
自定义数据集:
模型:
训练:
运行训练时出错:
python - 使用 PyTorch-Geometric 的图形自动编码器
我正在为点云创建一个基于图形的自动编码器。原始点云的形状是[3, 1024]
- 1024 个点,每个点有 3 个坐标
使用以下步骤将点云转换为无向图:
- 一个点变成了一个节点。
- 一个节点的特征是 3 个坐标
- 对于每个节点点,找到离它最近的 5 个节点点。它们由一条边连接
- 边的特征是它连接的两个节点之间的距离。
我使用 pytorch-geometric 来构建我的网络,并使用 pytorch3d [源] 的倒角距离作为损失函数。
我的网络架构如下:
编码器:GAT (3->16) -> GAT (16->24) -> GAT (24->36) -> shape([32*1024, 36])
解码器:GAT (36-> 24) -> GAT (24->16) -> GAT (16->3) -> shape([32*1024, 3])
所有这些层都接受节点特征和边缘特征。除此之外,我使用 Dropout 和 ReLU。
之后,我只得到原始图:[32, 1024, 3] 和预测图:[32, 1024, 3] 并将它们提供给 pytorch3d 的倒角损失。我得到了某种结果,但如果我将它们可视化,我可以看到网络没有学到任何东西。
问题是:由于我仅将节点的特征与倒角距离进行比较,网络是否甚至使用邻接矩阵和边的特征?我是否只需要进行一些微调,或者这个模型没有任何意义?
PS:在这一点上,我不关心架构或5个最近的邻居是否足够。
python - torch_geometric.nn.GATConv 中的 AssertionError
我正在尝试在其中使用图形注意网络(GAT)模块,torch_geometric
但继续AssertionError: Static graphs not supported in 'GATConv'
使用以下代码。
当我替换block
为GATConv
后跟标准训练循环时,会发生此错误(其他卷积层,例如GCNConv
或SAGEConv
没有任何问题)。我检查了文档并确保输入形状正确(其他卷积层相同)。
在源代码assert x.dim() == 2, "Static graphs not supported in 'GATConv'"
中,该方法中有这一部分,forward
但显然批处理维度将在前向传递中发挥作用,并且x.dim()
将为 3。批处理维度的输入形状为 [1024,6,200]。但是,如果我手动将断言条件更改x.dim() == 3
为相同的错误,仍然会引发好像条件不满足一样。我只对 GAT 有较高的了解,所以我可能遗漏了一些东西。无论如何,我对此有几个问题
- 我这边是否存在任何可能导致此错误的实施错误?
- 这个断言条件是干什么用的?在这种情况下,静态图是什么?
我将不胜感激任何见解和帮助!谢谢!