图神经网络DGL-构图

2023-11-02 01:59
文章标签 神经网络 构图 dgl

本文主要是介绍图神经网络DGL-构图,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

图神经网络DGL-构图

图神经网络、图表示学习、知识图谱

GNN的学习目标是获得每个结点的图感知的隐藏状态,这就意味着:对于每个节点,它的隐藏状态包含了来自邻居节点的信息。

TF-IDF算法介绍及实现

图神经网络—基本概念与手写code

【图计算】 DGL-构图与用图

DGL-图属性

dgl.DGLGraph是对图的统一抽象,它存储了图的结构信息、节点/边的属性信息。

  • 通过dgl.graph()生成同构图
  • 通过dgl.heterograph()生成异构图
  • 借助dgl.*工具包和其他数据源生成图

备注:在DGL眼中图都是有向的。对于无向图,用户需要为每条边创建两个方向的边,具体需调用dgl.to_bidirected()方法。

实现GCN 需要具备message信息 和 reduce信息

一、同构图

同构图:图中只有一种类型的节点、一种类型的边。

import networkx as nx
import dgl
import torch
import numpy as np
#import scipy.sparse as sppu = torch.tensor([0, 0, 0, 0, 0])
v = torch.tensor([1, 2, 3, 4, 5])
G = dgl.graph((u, v))
print(G)
# Graph(num_nodes=6, num_edges=5,
#       ndata_schemes={}
#       edata_schemes={})
#获取节点的ID
print(G.nodes())
# tensor([0, 1, 2, 3, 4, 5])
#获取边对应端点
print(G.edges())
# (tensor([0, 0, 0, 0, 0]), tensor([1, 2, 3, 4, 5]))
#获取边对应的端点和边ID
print(G.edges(form = 'all'))
# (tensor([0, 0, 0, 0, 0]), tensor([1, 2, 3, 4, 5]), tensor([0, 1, 2, 3, 4]))
#用户可以在构建图的时候,指明节点的数量
G = dgl.graph((u, v), num_nodes = 8)
print(G)
# Graph(num_nodes=8, num_edges=5,
#       ndata_schemes={}
#       edata_schemes={})

访问节点、边的属性信息:通过graph.ndata访问节点属性,通过graph.edata访问边属性

import networkx as nx
import dgl
import torch
import numpy as np
#import scipy.sparse as sppu = torch.tensor([0, 0, 1, 5])
v = torch.tensor([1, 2, 2, 0])
G = dgl.graph((u, v))   #6个节点, 4条边
print(G)
# Graph(num_nodes=6, num_edges=4,
#       ndata_schemes={}
#       edata_schemes={})
G.ndata['x'] = torch.ones(G.num_nodes(), 3) #长度为3的节点特征, 矩阵大小为(6, 3)
G.edata['x'] = torch.ones(G.num_edges(), dtype = torch.int32)   #边的属性为标量整型特征
print(G)
# Graph(num_nodes=6, num_edges=4,
#       ndata_schemes={'x': Scheme(shape=(3,), dtype=torch.float32)}
#       edata_schemes={'x': Scheme(shape=(), dtype=torch.int32)})
G.ndata['y'] = torch.randn(G.num_nodes(), 5) #节点y的特征, 节点目前有x和y两种特征
print(G.ndata['x'][1])
# tensor([1., 1., 1.])
print(G.edata['x'][torch.tensor([0, 3])])
# tensor([1, 1], dtype=torch.int32)
print(G)
# Graph(num_nodes=6, num_edges=4,
#       ndata_schemes={'x': Scheme(shape=(3,), dtype=torch.float32), 'y': Scheme(shape=(5,), dtype=torch.float32)}
#       edata_schemes={'x': Scheme(shape=(), dtype=torch.int32)})

 创建图的过程,还可以通过dgl.to_bidirected直接由单向图创建双向图。

如果在图中有没有边链接的点,需要通过graph函数的num_nodes属性指定有多少单点。

对于有权图,可将权值作为图的边特征存储

# edges 0->1, 0->2, 0->3, 1->3
edges = th.tensor([0, 0, 0, 1]), th.tensor([1, 2, 3, 3])
weights = th.tensor([0.1, 0.6, 0.9, 0.7]) # weight of each edge
g = dgl.graph(edges)
g.edata['w'] = weights
print(g)
# Graph(num_nodes=4, num_edges=4,
#      ndata_schemes={}
#      edata_schemes={'w' : Scheme(shape=(,), dtype=torch.float32)})

二、异构图

在DGL中,一个异构图由一系列子图构成,一个子图对应一种关系。每个关系由一个字符串三元组定义(源节点类型,边类型,目标节点类型)。

preview

import networkx as nx
import dgl
import torch
import numpy as np#创建具有3个节点类型 和 3种边类型的异构图
graph_data = {('drug', 'interacts', 'drug'):(torch.tensor([0, 1]), torch.tensor([1, 2])), #两条边, drug0 - drug1, drug1 - drug2('drug', 'interacts', 'gene'):(torch.tensor([0, 1]), torch.tensor([2, 3])),('drug', 'treats', 'disease'):(torch.tensor([1]), torch.tensor([2]))
}G = dgl.heterograph(graph_data)print("ntypes = ", G.ntypes)
# ntypes =  ['disease', 'drug', 'gene']
print("etypes = ", G.etypes)
# etypes =  ['interacts', 'interacts', 'treats']
print("canonical_etypes = ", G.canonical_etypes)
# canonical_etypes =  [('drug', 'interacts', 'drug'), ('drug', 'interacts', 'gene'), ('drug', 'treats', 'disease')]
print(G)
# Graph(num_nodes={'disease': 3, 'drug': 3, 'gene': 4},
#       num_edges={('drug', 'interacts', 'drug'): 2, ('drug', 'interacts', 'gene'): 2, ('drug', 'treats', 'disease'): 1},
#       metagraph=[('drug', 'drug', 'interacts'), ('drug', 'gene', 'interacts'), ('drug', 'disease', 'treats')])
print(G.nodes('drug'))
print(G.nodes('gene'))
print(G.nodes('disease'))
# tensor([0, 1, 2])
# tensor([0, 1, 2, 3])
# tensor([0, 1, 2])
G.nodes['drug'].data['hv'] = torch.ones(3, 1)
G.nodes['drug'].data['k'] = torch.randn(3, 4)
print(G.nodes['drug'].data['hv'])
# tensor([[1.],
#         [1.],
#         [1.]])
G.edges['treats'].data['he'] = torch.zeros(1, 1)
print(G.edges['treats'].data['he'])
# tensor([[0.]])
print(G.nodes('drug'))
print(G.nodes['drug'])
# tensor([0, 1, 2])
# NodeSpace(data={'hv': tensor([[1.],
#         [1.],
#         [1.]]),
#         'k': tensor([[ 0.3068, -1.1727,  0.3256,  1.6496],
#         [ 2.1131,  1.9972, -0.9089,  1.5092],
#         [-0.9954,  2.1767,  0.3712, -0.0139]])})

Scipy sparse matrix 作为图的邻接矩阵 转换成dgl的图 : g = dgl.from_scipy(sp.g)
Networkx graph : g = dgl.from_networkx(nx.g)

外部资源创建图

import dgl
import scipy.sparse as spsp_g = sp.rand(100, 100, density=0.5) # 5% nonzero entries
g = dgl.from_scipy(sp_g)
print(g)
# Graph(num_nodes=100, num_edges=5000,
#       ndata_schemes={}
#       edata_schemes={})import networkx as nx
nxg = nx.path_graph(5) # a chain 0-1-2-3-4
# nx.path_graph constructs an undirected NetworkX graph
g = dgl.from_networkx(nxg)
print(g)
# Graph(num_nodes=5, num_edges=8,
#       ndata_schemes={}
#       edata_schemes={})nxg = nx.DiGraph([(2, 1), (1, 2), (2, 3), (0, 0)])
# constructs an directed NetworkX graph
g = dgl.from_networkx(nxg)
print(g)
# Graph(num_nodes=4, num_edges=4,
#      ndata_schemes={}
#      edata_schemes={})

三、二分图

 

 

 

 

 

 

 

 

 

 

这篇关于图神经网络DGL-构图的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/327321

相关文章

图神经网络模型介绍(1)

我们将图神经网络分为基于谱域的模型和基于空域的模型,并按照发展顺序详解每个类别中的重要模型。 1.1基于谱域的图神经网络         谱域上的图卷积在图学习迈向深度学习的发展历程中起到了关键的作用。本节主要介绍三个具有代表性的谱域图神经网络:谱图卷积网络、切比雪夫网络和图卷积网络。 (1)谱图卷积网络 卷积定理:函数卷积的傅里叶变换是函数傅里叶变换的乘积,即F{f*g}

机器学习之监督学习(三)神经网络

机器学习之监督学习(三)神经网络基础 0. 文章传送1. 深度学习 Deep Learning深度学习的关键特点深度学习VS传统机器学习 2. 生物神经网络 Biological Neural Network3. 神经网络模型基本结构模块一:TensorFlow搭建神经网络 4. 反向传播梯度下降 Back Propagation Gradient Descent模块二:激活函数 activ

图神经网络框架DGL实现Graph Attention Network (GAT)笔记

参考列表: [1]深入理解图注意力机制 [2]DGL官方学习教程一 ——基础操作&消息传递 [3]Cora数据集介绍+python读取 一、DGL实现GAT分类机器学习论文 程序摘自[1],该程序实现了利用图神经网络框架——DGL,实现图注意网络(GAT)。应用demo为对机器学习论文数据集——Cora,对论文所属类别进行分类。(下图摘自[3]) 1. 程序 Ubuntu:18.04

基于深度学习 卷积神经网络resnext50的中医舌苔分类系统

项目概述 本项目旨在通过深度学习技术,特别是利用卷积神经网络(Convolutional Neural Networks, CNNs)中的ResNeXt50架构,实现对中医舌象图像的自动分类。该系统不仅能够识别不同的舌苔类型,还能够在PyQt5框架下提供一个直观的图形用户界面(GUI),使得医生或患者能够方便地上传舌象照片并获取分析结果。 技术栈 深度学习框架:采用PyTorch或其他

图神经网络(2)预备知识

1. 图的基本概念         对于接触过数据结构和算法的读者来说,图并不是一个陌生的概念。一个图由一些顶点也称为节点和连接这些顶点的边组成。给定一个图G=(V,E),  其 中V={V1,V2,…,Vn}  是一个具有 n 个顶点的集合。 1.1邻接矩阵         我们用邻接矩阵A∈Rn×n表示顶点之间的连接关系。 如果顶点 vi和vj之间有连接,就表示(vi,vj)  组成了

自然语言处理系列六十三》神经网络算法》LSTM长短期记忆神经网络算法

注:此文章内容均节选自充电了么创始人,CEO兼CTO陈敬雷老师的新书《自然语言处理原理与实战》(人工智能科学与技术丛书)【陈敬雷编著】【清华大学出版社】 文章目录 自然语言处理系列六十三神经网络算法》LSTM长短期记忆神经网络算法Seq2Seq端到端神经网络算法 总结 自然语言处理系列六十三 神经网络算法》LSTM长短期记忆神经网络算法 长短期记忆网络(LSTM,Long S

神经网络训练不起来怎么办(零)| General Guidance

摘要:模型性能不理想时,如何判断 Model Bias, Optimization, Overfitting 等问题,并以此着手优化模型。在这个分析过程中,我们可以对Function Set,模型弹性有直观的理解。关键词:模型性能,Model Bias, Optimization, Overfitting。 零,领域背景 如果我们的模型表现较差,那么我们往往需要根据 Training l

如何将卷积神经网络(CNN)应用于医学图像分析:从分类到分割和检测的实用指南

引言 在现代医疗领域,医学图像已经成为疾病诊断和治疗规划的重要工具。医学图像的类型繁多,包括但不限于X射线、CT(计算机断层扫描)、MRI(磁共振成像)和超声图像。这些图像提供了对身体内部结构的详细视图,有助于医生在进行准确诊断和制定个性化治疗方案时获取关键的信息。 1. 医学图像分析的挑战 医学图像分析面临诸多挑战,其中包括: 图像数据的复杂性:医学图像通常具有高维度和复杂的结构

临床基础两手抓!这个12+神经网络模型太贪了,免疫治疗预测、通路重要性、基因重要性、通路交互作用性全部拿下!

生信碱移 IRnet介绍 用于预测病人免疫治疗反应类型的生物过程嵌入神经网络,提供通路、通路交互、基因重要性的多重可解释性评估。 临床实践中常常遇到许多复杂的问题,常见的两种是: 二分类或多分类:预测患者对治疗有无耐受(二分类)、判断患者的疾病分级(多分类); 连续数值的预测:预测癌症病人的风险、预测患者的白细胞数值水平; 尽管传统的机器学习提供了高效的建模预测与初步的特征重

回归预测 | MATLAB实现PSO-LSTM(粒子群优化长短期记忆神经网络)多输入单输出

回归预测 | MATLAB实现PSO-LSTM(粒子群优化长短期记忆神经网络)多输入单输出 目录 回归预测 | MATLAB实现PSO-LSTM(粒子群优化长短期记忆神经网络)多输入单输出预测效果基本介绍模型介绍PSO模型LSTM模型PSO-LSTM模型 程序设计参考资料致谢 预测效果 Matlab实现PSO-LSTM多变量回归预测 1.input和outpu