普通
矩阵:
adj <class 'torch.Tensor'> tensor([[10.0527, 0.7901, 4.7365, ..., -2.9740, -1.2431, 2.6618],
[ 0.7901, 7.8155, 2.0635, ..., -0.7821, 0.8580, -1.8541],
[ 4.7365, 2.0635, 6.2384, ..., -2.2005, -0.2560, 2.0816],
https://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.coo_matrix.html#scipy.sparse.coo_matrix
https://www.cnblogs.com/datasnail/p/11021835.html
preds = to_numpy(preds)#preds是[2985x16x2]
preds = preds.transpose(2, 1, 0)#preds[2x16x2985]
以上这篇pytorch 转换矩阵的维数位置方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持软件开发网。
您可能感兴趣的文章:对pytorch网络层结构的数组化详解pytorch对可变长度序列的处理方法详解pytorch 调整某一维度数据顺序的方法对PyTorch torch.stack的实例讲解使用pytorch进行图像的顺序读
稀疏矩阵指
矩阵中的大多数元素的值都为0,由于其中非常多的元素都是0,使用常规方法进行存储非常的浪费空间,所以采用另外的方法存储
稀疏矩阵。
Coordinate(
COO)格式是用来描述
稀疏矩阵一种方法或数据结构。
Coordinate(
COO)格式本身是一个
矩阵,用
COO矩阵,描述另一个目标
稀疏矩阵,原理如下:
这是非常简单的一种方式,使用一个三元组构成的三维
COO矩阵来描述任意维度的
稀疏矩阵。
三元组分别表示
稀疏矩阵中的元素(所...
values =X_train.data
indices = np.vstack((X_train.row, X_train.col))
i = torch.LongTensor(indices)
v = torch.FloatTensor(values)
shape = X_train.shape
X_train=torch.sparse.FloatTensor(i, v, torch.Size(shape))
转换为scipy.sparse:.to
coo()即可
刚开始学习图神经网络,在使用PyG框架编程的时候,有一件事很让我纠结:PyG要求输入的邻接矩阵X应该是稀疏矩阵的形式(edge_index),而不是我制作的NxN邻接矩阵形式。
举个简单的例子,看下面这个图结构:
邻接矩阵的创建如下:
A = np.array([0, 1, 0],
[1, 0, 1],
[0, 1, 0])
A = torch.LongTensor(A)
然后你会发现扔进PyG搭建的GCN模型报错了啊!
ValueError: `MessagePassing.propa
普通邻接矩阵转换成edge_index的COO稀疏矩阵形式,格式为[2, num_edges]。
平时我们接触的邻接矩阵adj的形式要么是稠密矩阵(原始二维矩阵),但是在使用PyG框架的时候会发现格式不对,需要形式为[2, edges]的coo_matrix。
首先,把adj转为普通的coo_matrix矩阵:
adj = sp.coo_matrix(adj)
(0, 633) 1
(0, 1862) 1
(0, 2582) 1
(0, 2) 1
. .
. .
(2707, 165) 1
indptr = np.array([0, 2, 3, 6])
indices = np.array([0, 2, 2, 0, 1, 2])
data = np.array([1, 2, 3, 4, 5, 6])
scipy.sparse.csc_matrix((data, indices, indptr), shape=(3, 3)).toarray()
output:
array([[...
def normalize_adjacency(adjacency_
matrix):
# 计算每个节点的度
node_degrees = torch.sum(adjacency_
matrix, dim=1)
# 计算度
矩阵的逆
矩阵
degree_
matrix = torch.diag(torch.pow(node_degrees, -0.5))
# 对称归一化
邻接矩阵
normalized_adjacency = torch.matmul(torch.matmul(degree_
matrix, adjacency_
matrix), degree_
matrix)
return normalized_adjacency
这个函数接受一个
邻接矩阵作为输入,并返回归一化后的
邻接矩阵。它首先计算每个节点的度,并使用度
矩阵的逆
矩阵进行归一化。然后,通过将度
矩阵的逆
矩阵应用于
邻接矩阵来实现对称归一化。
请注意,这个代码只适用于无向图。如果你处理的是有向图,可能需要使用不同的归一化方法。