问题标签 [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.

0 投票
1 回答
709 浏览

python - 如何从networkx将图形加载到PyTorch几何中并设置节点特征和标签?

目标:我正在尝试将来自 networkx 的图导入PyTorch 几何并设置标签和节点特征

(这是在 Python 中)

问题

  1. 我该怎么做[从networkx到PyTorch几何的转换]?(大概是通过使用from_networkx函数)
  2. 如何转移节点特征和标签?(更重要的问题)

我看过一些其他/以前的帖子,但没有回答(如果我错了,请纠正我)。

尝试:(我只是在下面使用了一个不切实际的例子,因为我不能在这里发布任何真实的东西)

让我们想象一下,我们正在尝试对一组汽车进行图学习任务(例如节点分类)(如我所说,这不是很现实)。也就是说,我们有一组汽车、一个邻接矩阵和一些特征(例如年底的价格)。我们要预测节点标签(即汽车的品牌)。

我将使用以下邻接矩阵:(抱歉,不能使用乳胶来格式化)

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在训练网络时删除标签吗?)

提前致谢,节日快乐。

0 投票
0 回答
98 浏览

python - PyTorch:'RuntimeError:预期的标量类型 Long,但发现 Float'pytorch 几何错误

这篇文章是从上一篇文章开始的(我将在下面的代码中使用相同的示例)。我已阅读有关这些错误的其他帖子,但我认为这些解决方法对我没有帮助。

目标:实现一个节点分类任务(类似于Cora,但应用不同)

问题:如何解决我遇到的这些错误?

  1. 'IndexError:用作索引的张量必须是长、字节或布尔张量'(在我的主代码中得到这个)
  2. '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

任何帮助将不胜感激,并希望每个人都有一个愉快的假期。

0 投票
0 回答
10 浏览

pytorch-geometric - 将 Pytorch Geometric 与 TorchDyn 结合使用时出错

我正在尝试使用 TorchDyn 将使用 PyTorch Geometric 编写的 GCN 转换为图形神经 ODE。GCN 本身可以正常工作,但我尝试使用以下代码转换为 GDE:

这会产生以下错误:

Learner定义了关于 TorchDyn 快速入门中描述的格式,并且train_loaderval_loader来自torch_geometric.dataloader,包含torch_geometric.batch由 GCN 的功能解包的对象,forward如下所示:

尽管该问题引发的错误torch_geometric显然源于torchdynGCN 单独正常工作。我将不胜感激调试此错误的任何帮助。

0 投票
1 回答
153 浏览

python - 将图从networkx转换为pytorch几何时如何保留节点顺序?

问题networkx:将图形从pytorch 几何转换时如何保留节点顺序/标签?

代码:(在 Google Colab 中运行)

当我在代码的最后一行打印边缘索引时,每次运行它都会得到不同的答案。最重要的是,我希望始终获得相同(正确)的答案,从而从 networkx 中保留每个节点编号:

这个边缘索引张量的形式是:

  • 第一个列表包含节点的节点 ID
  • 第二个列表包含目标节点的节点 ID

对于要保留的节点 ID,我们希望节点 0 在第一个(源)列表中出现 3 次,而不是仅出现两次。

我有什么办法可以强制 PyTorch Geometric 复制节点 ID?

谢谢

[编辑] 我有一种可能的解决方法是使用以下代码,它能够为 PyTorch 几何生成边缘索引和权重张量

0 投票
0 回答
15 浏览

pytorch - Pytorch:如何仅针对 GNN 中的节点子集进行训练/预测

我正在尝试开发一个图神经网络来解决节点子集上的约束问题。如何强制某些节点包含在其他节点的评估中(消息传递)但它们自己的值不会改变(因为它们是边界条件而没有被训练或预测)。

谢谢你的帮助!

0 投票
1 回答
56 浏览

deep-learning - GCNConv 模块上的spectral_norm

我想在 GCNConv 层上调用 torch.nn.utilsspectral_norm 函数

但我收到以下错误:

意味着 gc1._parameters 没有权重(只有偏差):

但是, gc1.parameters() 存储两个对象,其中一个是 16 x 18 矩阵(权重矩阵)。

如何使spectral_norm 函数在GCNConv 模块上工作?

0 投票
1 回答
32 浏览

python - Torch Geometric - RuntimeError:mat1 和 mat2 形状不能相乘(1479x1 和 1479x1024)

我正在尝试创建一个模拟蛋白质的 GNN。但是,我遇到了一个错误GraphConv(我得到了同样的错误GCNConv)。我不明白为什么当形状应该能够相乘时会出现此错误。我认为这个错误一定与我创建的自定义数据集有关,但我不能 100% 确定。如果您有类似的问题或知道如何解决此问题,请告诉我。谢谢你。

编辑:即使我更改embedding_size1479,我仍然得到:RuntimeError: mat1 and mat2 shapes cannot be multiplied (1479x1 and 1479x1479)

自定义数据集:

模型:

训练:

运行训练时出错:

0 投票
0 回答
80 浏览

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个最近的邻居是否足够。

0 投票
1 回答
52 浏览

python - torch_geometric.nn.GATConv 中的 AssertionError

我正在尝试在其中使用图形注意网络(GAT)模块,torch_geometric但继续AssertionError: Static graphs not supported in 'GATConv'使用以下代码。

当我替换blockGATConv后跟标准训练循环时,会发生此错误(其他卷积层,例如GCNConvSAGEConv没有任何问题)。我检查了文档并确保输入形状正确(其他卷积层相同)。

在源代码assert x.dim() == 2, "Static graphs not supported in 'GATConv'"中,该方法中有这一部分,forward但显然批处理维度将在前向传递中发挥作用,并且x.dim()将为 3。批处理维度的输入形状为 [1024,6,200]。但是,如果我手动将断言条件更改x.dim() == 3为相同的错误,仍然会引发好像条件不满足一样。我只对 GAT 有较高的了解,所以我可能遗漏了一些东西。无论如何,我对此有几个问题

  • 我这边是否存在任何可能导致此错误的实施错误?
  • 这个断言条件是干什么用的?在这种情况下,静态图是什么?

我将不胜感激任何见解和帮助!谢谢!

0 投票
2 回答
40 浏览

python - 在 Google Colab 中运行支持 cuda 的 Python 代码

我的 Macbook pro 没有 GPU 支持。我在 Google colab 中上传了一个代码目录以利用 Cuda 支持。但是,我看到代码无法访问当前目录中文件夹中的其他文件。请指教。

在此处输入图像描述

在此处输入图像描述