IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> (初学必看)deep graph library(dgl)库的入门引导 -> 正文阅读

[人工智能](初学必看)deep graph library(dgl)库的入门引导

前言

下载这个库要去官方网站:https://www.dgl.ai/,网站上会给你下载命令,这有点像下载pytorch的时候。

然后,官方网站提供了一些入门的例子。如果自己有能力,可以自行学习,就不用跟着我们这篇文章学习啦,网址见:https://docs.dgl.ai/tutorials/blitz/index.html

这个库基本是由中国人开发和维护的,我用了之后的感觉就是:还行。API定义得很人性,所以很容易学习。跟一个普通的库没有什么差别。

import dgl
import torch
import torch.nn as nn
import torch.nn.functional as F

但是,要求你有一些pytorch的基础哦。

简单?

内置数据集

内置了一些数据集,例如 cora数据集,读取很快,不但如此,读取之后的对象dataset非常清晰易懂。

import dgl.data

dataset = dgl.data.CoraGraphDataset()
print('Number of categories:', dataset.num_classes)

在这里插入图片描述
其定义为dataset可能由多个图组成,所以熟悉python的你应该知道,像列表一样获取第一个图对吧,这个库也是这么定义的,所以很人性。

g = dataset[0]#获取第一个图,不过其实cora数据集就一个图,[1]将越界。
print('Node features')
print(g.ndata)#所有关于节点的附加信息你都可以放在这里,以字典形式保存,所以说很人性,显然你可以自己加自己的信息。
print('Edge features')
print(g.edata)#所有关于边附加信息你都可以放在这里。以字典形式保存,所以说很人性,显然你可以自己加自己的信息。

在这里插入图片描述

定义模型

一些经典的GNN模型被这个dgl库肢解了,或者你可以认为是内置了,但是又以一种比较灵活的方式内置。我们以GCN模型为例,其定义方式和pytorch特别相似。

from dgl.nn import GraphConv

class GCN(nn.Module):
    def __init__(self, in_feats, h_feats, num_classes):
        super(GCN, self).__init__()
        self.conv1 = GraphConv(in_feats, h_feats)#gcn中的一层卷积已经写好了
        self.conv2 = GraphConv(h_feats, num_classes)

    def forward(self, g, in_feat):
        h = self.conv1(g, in_feat)#g就是这个图,其实用的是邻接矩阵,in_feat就是g.ndata["feat"]即节点的初始特征。
        h = F.relu(h)
        h = self.conv2(g, h)
        return h
# Create the model with given dimensions
model = GCN(g.ndata['feat'].shape[1], 16, dataset.num_classes)#这样就定义完了。

至此,已经复现了GCN模型,注意到,model就是pytorch中的model,所以,下面就是pytorch干的事了,dgl可以退场了。比如设置优化器,训练,测试等,这都不关dgl的事。dgl只是在定义模型的时候提供一些经典的算法供直接调用,更快更准构造好一个GNN。

定义dgl中的一个图

GNN是基于图操作的,显然我们要构造它,上面是用内置数据集,这显然不够,所以我们还得学习dgl的一个地方就在于这,还得学怎么创建一个dgl格式的图,有点像你需要学怎么创建一个networkx格式的图一样。

所以,其实我们可以猜到,由于涉及构造图,这里会有很多api,所以会是容易使用,但是很难记住,印象中,好像和networkx的构造图的api不一样,所以,头大。出于私心,由于学过一点networkx,所以当然希望可以用nextworkx创建图,然后dgl支持转换。然而,应该是不可以。

所以,从这个角度看,这两个库存在竞争关系。我看了一下两者的欢迎程度,截止2021/12/09,nextworkx的github收藏数:10k,dgl的github收藏数:8.6k。我感觉前者偏向于创建图,而后者偏向于对图进行深度学习的处理。

不管怎么样吧,如果忘记了dgl怎么创建图,或者创建好了之后怎么查看多少条边啊,出入度啊之类的,可以翻看官方api就行了。https://docs.dgl.ai/tutorials/blitz/2_dglgraph.html。话说回来,networkx其实我也记不住,也是要翻看官方api的。

这里展示一小部分dgl创建图的大概用法(我没有看错的话,dgl创建的图的基类是DGLGraph):

g = dgl.graph(([0, 0, 0, 0, 0], [1, 2, 3, 4, 5]))
#表示[0,1],[0,2]是有向边。似乎等价于g=dgl.DGLGraph(),官方不推荐使用前者,而不是这个,但是之前看到有人这么用,所以说一下。
print(g.num_nodes())
print(g.num_edges())
# Out degrees of the center node
print(g.out_degrees(0))
# In degrees of the center node - note that the graph is directed so the in degree should be 0.
print(g.in_degrees(0))

在这里插入图片描述

其实,创建图还涉及如何创建无向图,同构图,异构图对吧,这个自己查吧,不管哪个库都是需要这样的。你要的全都在这里了:https://docs.dgl.ai/api/python/dgl.DGLGraph.html?highlight=dglgraph#dgl.DGLGraph

比如,上面我们是初始化就创建好了一个图,但是如果我们需要临时添加一个节点呢?在基类DGLGraph的方法大全里面有:

在这里插入图片描述


完结撒花

这个库做得还不错,大家可以多多支持国人的东西。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-12-10 11:04:02  更:2021-12-10 11:06:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 1:30:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码