PyG|邻接矩阵转为coo_matrix格式

在使用PyG框架的时候,PyG要求输入的是 edge_index 格式,而不是我们所使用的邻接矩阵格式,即N x N。

import scipy.sparse as sp
import numpy as np
import torch

# adj_matrix 是邻接矩阵
tmp_coo = sp.coo_matrix(adj_matrix)
values = tmp_coo.data
indices = np.vstack((tmp_coo.row,tmp_coo.col))
i = torch.LongTensor(indices)
v = torch.LongTensor(values)
edge_index=torch.sparse_coo_tensor(i,v,tmp_coo.shape)
### 关于 PyG 中 `edge_weight` 参数的用法 在 PyTorch Geometric (PyG) 中,`edge_weight` 是一个非常重要的参数,用于表示图中的边权重。这个参数可以被传递给多种图神经网络层和消息传递机制,以便在网络训练过程中考虑不同边的重要性。 #### 定义与初始化 当构建图数据结构时,可以通过向 `Data` 对象添加属性来定义 `edge_weight`: ```python from torch_geometric.data import Data import torch edge_index = torch.tensor([[0, 1, 1, 2], [1, 0, 2, 1]], dtype=torch.long) edge_weight = torch.tensor([0.5, 0.7, 0.9, 1.0], dtype=torch.float) data = Data(edge_index=edge_index, edge_attr=edge_weight) ``` 上述代码创建了一个简单的无向加权图[^1]。 #### 使用场景 `edge_weight` 可以应用于多个方面,比如卷积操作、注意力机制等。下面是一个使用 GCNConv 层的例子,在这里指定了 `edge_weight` 来影响节点间的信息传播过程: ```python from torch_geometric.nn import GCNConv class Net(torch.nn.Module): def __init__(self): super(Net, self).__init__() self.conv1 = GCNConv(dataset.num_features, 16) def forward(self, data): x, edge_index, edge_weight = data.x, data.edge_index, data.edge_attr x = self.conv1(x, edge_index, edge_weight=edge_weight) return F.log_softmax(x, dim=1) ``` 在这个例子中,通过设置 `edge_weight` 参数,使得每条边上携带不同的权重值参与计算。 #### 常见问题及解决方案 - **负数或零作为权重**: 如果存在负数或零的情况,则可能导致数值不稳定或其他异常行为。建议预处理输入数据,确保所有的权重都是正实数。 - **缺失边缘权重**: 当某些边没有指定权重时,默认情况下这些边会被赋予单位权重(即1)。如果希望自定义默认值,可以在模型内部实现逻辑判断并赋值相应权重。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiao黄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值