101(入门)以后就是开始具体逐项学习图神经网络的各个细节。下面介绍:
1.如何构建图
2.将特征赋给节点或者边,及查询方法
这算是图神经网络最基础最基础的部分了。

一、如何构建图

DGL中创建的图的方法有:
1. 通过(u, v),u和v分别为起始节点和终止节点的列表,可以是numpy矩阵也可以是tensor
2. scipy中的稀疏矩阵,该稀疏矩阵储存这图的邻接矩阵
3. networkx图对象转化
4. 逐步添加节点与边

先导入所有可能需要的模块

import networkx as nx
import dgl
import torch as th
import numpy as np
import scipy.sparse as spp

1. 通过起始节点u和终止节点v的列表构建图

u = th.tensor([0,0,0,0,0]) #起始节点
v = th.tensor([1,2,3,4,5]) #终止节点
star1 = dgl.DGLGraph((u,v))
nx.draw(star1.to_networkx(), with_labels=True) #可视化
# plt.show()

结果如下图:

如果u、v之一是标量,那么DGL会自动使用boadscat机制,适应数组的长度

plt.clf()
u = th.tensor(0)
v = th.tensor([1,2,3,4,5])
star2= dgl.DGLGraph((u,v))
nx.draw(star2.to_networkx(), with_labels=True)

结果与上图类似

2. scipy中的稀疏矩阵,该稀疏矩阵储存这图的邻接矩

稀疏矩阵是图的邻接矩阵

u = th.tensor([0,0,0,0,0])
v = th.tensor([1,2,3,4,5])
adj = spp.coo_matrix((np.ones(len(u)), (u.numpy(), v.numpy()))) #稀疏矩阵
star3 = dgl.DGLGraph(adj)
nx.draw(star3.to_networkx(), with_labels=True)
plt.show()

结果如上图

3.networkx图对象转化

DGL中的图与networkx中的图是可以相互转化的

g_nx = nx.petersen_graph() #networkx内置的彼得森图
g_dgl = dgl.DGLGraph(g_nx) #生成dgl的图import matplotlib.pyplot as plt
plt.subplot(121)
nx.draw(g_nx, with_labels=True)
plt.title('Networkx')
plt.subplot(122)
nx.draw(g_dgl.to_networkx(), with_labels=True)
plt.title('DGL')
plt.show()

结果如下图,可以看出二者等价。

4. 逐步添加节点与边

plt.clf()
g = dgl.DGLGraph()
g.add_nodes(10)
for i in range(0,5):g.add_edge(i, 0) #逐个添加边
src = list(range(5,8))
dst = th.tensor([0]*3)
g.add_edges(src, dst) #根据边起点,终点,一次性添加多条边
src = th.tensor([8,9])
dst = th.tensor([0,0])
g.add_edges(src, dst)
nx.draw(g.to_networkx(), with_labels=True)
plt.show()

结果如下:

二、将特征赋给节点或者边,及查询方法

先构建一个图

g = dgl.DGLGraph()
g.add_nodes(10)
for i in range(0,10):g.add_edge(i, 0) #逐个添加边

将特征分配到节点或者边,使用字典的格式存储 {名字:特征张量},称之为fields。
ndata是访问图中节点数据的语法,类似于数组,通过切片访问
edata是访问图中边数据的语法,类似于数组,通过切片访问

1. 特征赋给节点或者边,及查询方法

x = th.randn(10, 3)
print(x)
g.ndata['x'] = x
print('第0个节点:', g.ndata['x'][0])
print('第1, 2个节点:', g.ndata['x'][[1, 2]])
print('第1, 2个节点:', g.ndata['x'][th.tensor([1, 2])])print('图中边的数量:', len(g.edata)) #没有赋值之前是空的
g.edata['w'] = th.randn(10, 2)
print(g.edata['w'])
print('第0个边:', g.ndata['x'][0])
print('第1, 2个边:', g.ndata['x'][[1, 2]])
print('第1, 2个边:', g.ndata['x'][th.tensor([1, 2])])
#通过边的起始节点和终止节点的ID进行访问
print('起始节点为1,终止节点为0的边:', g.edata['w'][g.edge_id(1, 0)])
print('起始节点分别为1,2,3,终止节点均为0的边:', g.edata['w'][g.edge_ids([1,2,3,], 0)])
print('起始节点分别为1,2,3,终止节点均为0的边:', g.edata['w'][g.edge_ids([1,2,3,], [0,0,0])])g.ndata['feats'] = th.zeros((10, 4))
print(g.node_attr_schemes()) #输出图中每一个特征shape等信息#删除节点或者边的数据
g.ndata.pop('feats')
print(g.node_attr_schemes()) #输出图中每一个特征shape等信息

2.存在重复的边的情况

有的图可能存在两条重合的边,例如:1->0

lt.clf()
g_mutil = dgl.DGLGraph()
g_mutil.add_nodes(10)
g_mutil.ndata['x'] = th.randn(10, 2)
g_mutil.add_edges(list(range(1,10)),0) #图中只有9条边
g_mutil.add_edge(1,0) #再次添加一条1->0的边,此时有两条边了, 分别为第一条边和最后一条边
# 此时图中共计10条边
g_mutil.edata['w'] = th.randn(10, 2)
print('第一条边数据:', g_mutil.edges[0].data['w'])
print('最后一条边数据', g_mutil.edges[9].data['w'])g_mutil.edges[0].data['w'] = th.zeros(1, 2) #修改第一条边的数据
print('第一条边数据:', g_mutil.edges[0].data['w'])
print('第一条边数据:', g_mutil.edges[0].data)

一些节点和边的调用方法:

#所有的边
print(g_mutil.edges())#所有的边
print(g_mutil.nodes())#根据节点找边
eid_10 = g_mutil.edge_id(1, 0, return_array=True)
print(eid_10)
g_mutil.edges[eid_10].data['w'] = th.ones(len(eid_10), 2)
print(g_mutil.edata['w'])nx.draw(g_mutil.to_networkx(), with_labels=True)
plt.show()

图神经网络框架DGL学习 102——图、节点、边及其特征赋值相关推荐

  1. 图神经网络框架DGL学习 103——信息传递 (Message Passing Tutorial)

    在图神经网络中,信息的传递和特征的转变,用户可以自定义的.当然在DGL中,也有高级别的API供调用. 现在来看一个网页排名简单的模型.每一个节点都有相同的PV值,PV=0.01, 每一个节点首先会均匀 ...

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

    参考列表: [1]深入理解图注意力机制 [2]DGL官方学习教程一 --基础操作&消息传递 [3]Cora数据集介绍+python读取 一.DGL实现GAT分类机器学习论文 程序摘自[1],该 ...

  3. 开源图神经网络框架DGL升级:GCMC训练时间从1天缩到1小时,RGCN实现速度提升291倍...

    乾明 编辑整理  量子位 报道 | 公众号 QbitAI 又一个AI框架迎来升级. 这次,是纽约大学.亚马逊联手推出图神经网络框架DGL. 不仅全面上线了对异构图的支持,复现并开源了相关异构图神经网络 ...

  4. 图神经网络框架DGL教程-第3章:构建图神经网络(GNN)模块

    更多图神经网络和深度学习内容请关注: 第3章:构建图神经网络(GNN)模块 DGL NN模块是用户构建GNN模型的基本模块.根据DGL所使用的后端深度神经网络框架, DGL NN模块的父类取决于后端所 ...

  5. 图神经网络框架DGL教程-第4章:图数据处理管道

    更多图神经网络和深度学习内容请关注: 第4章:图数据处理管道 DGL在 dgl.data 里实现了很多常用的图数据集.它们遵循了由 dgl.data.DGLDataset 类定义的标准的数据处理管道. ...

  6. 亚马逊+纽约大学开源图神经网络框架DGL:新手友好,与主流框架无缝衔接

    量子位 授权转载 | 公众号 QbitAI 最近,纽约大学.纽约大学上海分校.AWS上海研究院以及AWS MXNet Science Team共同开源了一个面向图神经网络及图机器学习的全新框架,命名为 ...

  7. 详解机器学习的凸优化、图神经网络、强化学习、贝叶斯方法等四大主题

    AI是一门入门简单,但想深入却很难的学科,这也是为什么AI高端人才一直非常紧缺的重要原因.在AI领域技术领域,我们可以说机器学习功底决定了一个人的上限也不为过.为什么?机器学习就像物理学中的数学,如果 ...

  8. 图神经网络(GNN):同质图模型【GCN/GraphSAGE/GAT...】、异质图模型【HAN/HetGNN...】

    目前的图神经网络主要针对同质图(节点类型和边类型单一)设计. 同质图中只有一种类型的节点和边(例如,只有朋友关系的社交网络),网络结构较为简单.因此,同质图神经网络通常只需要聚合单一类型的邻居来更新节 ...

  9. PyG图神经网络框架学习--示例介绍

    实例介绍 通过自带的示例介绍并学习PyG.主要从以下4各方面: 图数据处理 通用基准数据集 Mini-batches 数据转换 图学习方法 图数据处理 图用于对对象(节点)之前的关系(边)进行建模.P ...

最新文章

  1. 替换字符串指定位置字符 php,PHP substr_replace 替换字符串指定位置字符
  2. 设计模式之 - 简单工厂模式
  3. opencv 标记有数字的区域
  4. Idea Debug调试介绍
  5. 对多个WCF服务进行统一的连接测试
  6. web APIS
  7. Spring Boot RestTemplate 忽略证书访问https
  8. 让你的博文自动带上缩址,方便发到微博客上
  9. 有人羡慕过自由职业吗?
  10. java中的工厂模式_java中工厂模式详解和使用方法
  11. RESTful登录设计(基于Spring及Redis的Token鉴权)
  12. 海康威视h5无插件播放解决方案
  13. 常见文件扩展名和它们的说明
  14. 【常用表】三角函数基本公式
  15. sql server 2008 mdf文件太大
  16. 《普罗米修斯/异形前传》[BD-RMVB.720p.中英双字][2012年科幻]
  17. cpu 关闭nx_AMD夺取武林盟主宝座(2020年1月CPU天梯图)
  18. fluxion-wifi破解/钓鱼
  19. Office2016只安装三件套方法(word,ppt,excel)另附安装visio2016安装教程
  20. 前端表单神器form-create,复杂表单轻松搞定

热门文章

  1. CSS中背景图定位方法
  2. Arduino UNO测试BMP388温度气压传感器
  3. 使用python+opencv实现文档扫描
  4. 预约挂号项目之预约挂号模块
  5. 魔兽服务器队列位置为什么波动,《魔兽世界》怀旧服:炸团的原因找到了,解决排队问题还会远吗?...
  6. mini game游戏像素画绘画课-1
  7. 绝地求生服务器维护6.17,绝地求生最新更新维护到几点 6月17日绝地求生停机维护多久...
  8. 【源码解析】psp training 过程
  9. html5基础的ppt,HTML5程序设计基础教程第1章HTML5概述.ppt
  10. base64攻防世界