1 DGLGraph图的创建与维护

1.1 生成DGLGraph图并且增加顶点与边

import dgl
import torch as th# 边 0->1, 0->2, 0->3, 1->3
u, v = th.tensor([0, 0, 0, 1]), th.tensor([1, 2, 3, 3])
g = dgl.graph((u, v))print(g) # 图中节点的数量是DGL通过给定的图的边列表中最大的点ID推断所得出的
# 获取节点的ID
print(g.nodes())
# 获取边的对应端点
print(g.edges())
# 获取边的对应端点和边ID
print(g.edges(form='all'))
# 如果具有最大ID的节点没有边,在创建图的时候,用户需要明确地指明节点的数量。
g = dgl.graph((u, v), num_nodes=8)

1.2 获得DGLGraph图的顶点与边

import dgl
import networkx as nx
import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ['SimHei'] # 显示中文字符
mpl.rcParams['font.family'] = 'STSong'
mpl.rcParams['font.size'] = 40
g_dgl = dgl.DGLGraph() # 生成一个空图
g_dgl.add_nodes(4) # 增加四个顶点
g_dgl.add_edges(list(range(4)),[0]*4) # 增加四条边
print("顶点",g_dgl.nodes()) # 输出顶点列表
print("边:",g_dgl.edges()) # 输出边
print("边索引",g_dgl.edge_id(1,0)) # 输出边索引
print("边属性",g_dgl.edges[g_dgl.edge_id(1,0)]) # 输出边属性

顶点 tensor([0, 1, 2, 3])
边: (tensor([0, 1, 2, 3]), tensor([0, 0, 0, 0]))
边索引 1
边属性 EdgeSpace(data={})

1.3 删除DGLGraph图的顶点与边

g_dgl.remove_edges(i) # 删除索引值为i的边
print(g_dgl.number_of_edges()) # 输出图的边数

1.4 清空DGLGraph图

g_dgl.clear() # 清空图内容

2 查看DGLGraph图中的度

DGLGraph图按照边的方向将度分为两种:连接其他顶点的度(out)和被其他顶点连接的度。

  • in_degree:查询指定顶点被连接的边数。
  • in_degrees:查询多个顶点被连接的边数,默认查询图中的全部顶点。
  • out_degree:查询指定顶点连接其他顶点的边数。
  • out_degrees:查询多个顶点连接其他顶点的边数,默认查询图中的全部顶点。

2.1 代码实战:查看DGLGraph图中的度

import dgl
import networkx as nx
import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ['SimHei'] # 显示中文字符
mpl.rcParams['font.family'] = 'STSong'
mpl.rcParams['font.size'] = 40
g_dgl = dgl.DGLGraph() # 生成一个空图
g_dgl.add_nodes(4) # 增加四个顶点
g_dgl.add_edges(list(range(4)),[0]*4) # 增加四条边
print(g_dgl.in_degree(0)) # 查询连接0顶点的度,输出:4
print(g_dgl.in_degrees([0,1])) # 查询连接0,1顶点的度,输出:tensor([4, 0])
print(g_dgl.in_degrees()) # 查询全部顶点被连接的度,输出:tensor([4, 0, 0, 0])
print(g_dgl.out_degrees()) # 查询全部顶点向外连接的度,输出:tensor([1, 1, 1, 1])

3 DGLGraph图与NetWorkx图的相互转化

DGLGraph类在NetWorkx模块之上进行扩展

3.1 将DGLGraph图转成NetWorkx图并显示

将DGLGraph图转成NetWorkx图后便可以借助NetWorkx图的显示功能来可视化其内部结构。

import dgl
import networkx as nx
import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ['SimHei'] # 显示中文字符
mpl.rcParams['font.family'] = 'STSong'
mpl.rcParams['font.size'] = 40
import os
os.environ['KMP_DUPLICATE_LIB_OK'] = 'True'g_dgl = dgl.DGLGraph() # 生成一个空图
g_dgl.add_nodes(4) # 增加四个顶点
g_dgl.add_edges(list(range(4)),[0]*4) # 增加四条边nx.draw(g_dgl.to_networkx(),with_labels=True) # 先调用to_networkx()方法,将DGLGraph图转成NetWorkx图,再调用NeWorkx的draw()方法进行显示。#### Networkx库中对图的可视化没有自环图的功能

3.2 利用NetWorkx图创建DGLGraph图

DGLGraph图可以从NetWorkx图中转化而来。

3.2.1 代码实战:利用NetWorkx图创建DGLGraph图

先调用dgl.DGLGraph()将NetWorkx图转化为DGLGraph图,再调用了DGLGraph图对象的to_networkx()方法,将DGLGraph图转换为NetWorkx图显示。

import dgl
import networkx as nx
import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ['SimHei'] # 显示中文字符
mpl.rcParams['font.family'] = 'STSong'
mpl.rcParams['font.size'] = 40
import os
os.environ['KMP_DUPLICATE_LIB_OK'] = 'True'g_nx = nx.petersen_graph() # 创建一个Networkx类型的无向图petersen
g_dgl = dgl.DGLGraph(g_nx) # 将Networkx类型转化为DGLGraph
plt.figure(figsize=(20,6))
plt.title("Networkx无向图",fontsize=20)
nx.draw(g_nx,with_labels=True)
plt.subplots(122)
plt.title("DGL有向图",fontsize=20)
nx.draw(g_dgl.to_networkx(),with_labels=True) # 将DGLGraph转化为Networkx类型的图

4 DGLGraph图中顶点属性的操作

4.1 为图添加节点特征和边特征

许多图数据包含节点和边上的属性,即节点特征和边特征。虽然节点特征和边特征的类型在现实世界中可以是任意的,但是DGLGraph只接受存储在张量(Tensor)中的属性,且该属性必须为数值类型。

4.2 修改顶点属性

4.3 删除顶点属性

DGL库官方操作指南https://docs.dgl.ai/

【Pytorch神经网络理论篇】 28 DGLGraph图的基本操作(缺一部分 明天补)相关推荐

  1. 【Pytorch神经网络理论篇】 27 图神经网络DGL库:简介+安装+卸载+数据集+PYG库+NetWorkx库

    DGL库是由纽约大学和亚马逊联手推出的图神经网络框架,支持对异构图的处理,开源相关异构图神经网络的代码,在GCMC.RGCN等业内知名的模型实现上也取得了很好的效果. 1 DGL库 1.1 DGL库的 ...

  2. 【Pytorch神经网络理论篇】 29 图卷积模型的缺陷+弥补方案

    图卷积模型在每个全连接网络层的结果中加入了样本间的特征计算.其述质是依赖深度学特征与缺陷. 1.1 全连接网络的特征与缺陷 多层全连接神经网络被称为万能的拟合神经网络.先在单个网络层中用多个神经元节点 ...

  3. 【Pytorch神经网络理论篇】 25 基于谱域图神经网络GNN:基础知识+GNN功能+矩阵基础+图卷积神经网络+拉普拉斯矩阵

    图神经网络(Graph Neural Network,GNN)是一类能够从图结构数据中学习特征规律的神经网络,是解决图结构数据(非欧氏空间数据)机器学习问题的最重要的技术. 1 图神经网络的基础知识 ...

  4. 【Pytorch神经网络理论篇】 26 基于空间域的图卷积GCNs(ConvGNNs):定点域+谱域+图卷积的操作步骤

    图卷积网络(Graph Convolutional Network,GCN)是一种能对图数据进行深度学习的方法.图卷积中的"图"是指数学(图论)中用顶点和边建立的有相关联系的拓扑图 ...

  5. 【Pytorch神经网络理论篇】 20 神经网络中的注意力机制

    注意力机制可以使神经网络忽略不重要的特征向量,而重点计算有用的特征向量.在抛去无用特征对拟合结果于扰的同时,又提升了运算速度. 1 注意力机制 所谓Attention机制,便是聚焦于局部信息的机制,比 ...

  6. 【Pytorch神经网络理论篇】 35 GaitSet模型:步态识别思路+水平金字塔池化+三元损失

    代码: [Pytorch神经网络实战案例]28 GitSet模型进行步态与身份识别(CASIA-B数据集)_LiBiGor的博客-CSDN博客1 CASIA-B数据集本例使用的是预处理后的CASIA- ...

  7. 【Pytorch神经网络理论篇】 39 Transformers库中的BERTology系列模型

    同学你好!本文章于2021年末编写,获得广泛的好评! 故在2022年末对本系列进行填充与更新,欢迎大家订阅最新的专栏,获取基于Pytorch1.10版本的理论代码(2023版)实现, Pytorch深 ...

  8. 【Pytorch神经网络理论篇】 31 图片分类模型:ResNet模型+DenseNet模型+EffcientNet模型

    1 ResNet模型 在深度学习领域中,模型越深意味着拟合能力越强,出现过拟合问题是正常的,训练误差越来越大却是不正常的. 1.1 训练误差越来越大的原因 在反向传播中,每一层的梯度都是在上一层的基础 ...

  9. 【Pytorch神经网络理论篇】 24 神经网络中散度的应用:F散度+f-GAN的实现+互信息神经估计+GAN模型训练技巧

    1 散度在无监督学习中的应用 在神经网络的损失计算中,最大化和最小化两个数据分布间散度的方法,已经成为无监督模型中有效的训练方法之一. 在无监督模型训练中,不但可以使用K散度JS散度,而且可以使用其他 ...

最新文章

  1. 《面向对象程序设计》第一次作业
  2. 基于正样本的表面缺陷检测
  3. SAP Spartacus的configModule
  4. springcloud 创建子父项目_idea搭建springCloud----搭建父子项目(二)
  5. 64位处理器_快看看你的电脑是64位还是32位操作系统,处理器支持64位可升级
  6. Java命名规范+常量定义方法
  7. 常用screen参数
  8. 你必不可能错过的java开源商城项目
  9. 房产中介管理系统搭建
  10. 设置QQ空间评论回复权限,包括日志、相册、说说、留言板的评论回复和留言权限,限制名单成员无评论回复权限
  11. Linux 修改环境变量设置的三种方式
  12. java word 颜色设置_Java 给Word文档添加背景颜色
  13. 分享一个计算机视觉图片或者视频的标注神器
  14. 饮用水安全与水资源保护
  15. Python三元表达式(三目运算符)|Python技能树征题
  16. 如何用adobe audition剪切音频单独导出保存
  17. C++中关于switch的一些理解
  18. 基于51单片机智能可控洗衣机控制系统设计
  19. outlook不断弹出“对以下服务器输入您的用户名和密码”
  20. 浅谈Spring框架AOP概念

热门文章

  1. akshare双均线backtrader
  2. IDEA详细配置与使用
  3. mysql数据库访问编程,mysql 连接数据库
  4. 数字图像处理-频率域滤波原理
  5. linux :vim 实现命令行下输出进度条
  6. oracle高资源消耗sql,Oracle高资源消耗SQL语句定位
  7. 数据结构探险——栈篇
  8. YAML/Properties配置文件与Spring Boot(转)
  9. jquery中json数据转换为字典
  10. 这本轻小说真厉害 2016