深度学习

GCN学习实例(dgl)

2020-10-20  本文已影响0人  Howyi

前言:

结合阿里算法工程师写的关于DGL库文章中的例子和DGL的文档,写了这篇关于DGL的笔记(代码可以跑通)。

安装图神经网络库DGL:

通过pip install dgl==0.4.1

1问题描述:

空手道俱乐部(Zachary's karate club)一共包含34个成员,成员之间有交互的关系。俱乐部后来分类成以指导员(节点0)和俱乐部主席(节点33)为首两个团队。任务是预测每个节点会加入哪一边。

空手道俱乐部网络的可视化图

2 代码实现

1构建karate_club图。

代码解释-1

注释:

对于无向图而言,需要构建一个双向图。另一种双向图的构建方法可以使用dgl.to_bidirected()。

构建图神经网络

图卷积审计网络框架

在第l层,每个节点v_{i}^{l}用一个节点向量h_i^l表示

GCN的每一层目的是聚合每一个节点v_i的邻居节点们u_i^l用来生成下一层的向量表示h_i^{l+1},然后接一个非线性的仿射变换。上面整个可以看成message-passing:每个节点会接受邻居节点表示。

代码解释-2

注释:

message function的输入是DGL中的edges,每个的edges有三个元素src(开始节点的特征),dst(终止节点的特征)和data(边的特征);reduce function的输入是nodes。点通过mailbox收集它邻居的信息并且发送给它。reduce 的基本运算包括sum,max,min等。update function的输入是nodes,这步结合从reduce function的结果,在最后一步结合了点的特征。

数据初始化:使用one-hot向量初始化节点。因为一个半监督的设定,仅有指导员(节点0)和俱乐部主席(节点33)被分为0和1.

训练:使用adam优化器,然后输入input数据,计算loss,最后反向传导

代码解释-3

展示最终结果:从训练中得到每个节点的压缩后的两维的向量,然后可视化最终结果。

代码解释-4 代码解释-5 29 轮的展示

Reference:

DGL文档:https://docs.dgl.ai/guide/graph.html

秦蓁的机器学习笔记:https://www.zhihu.com/column/c_1173319214768201728

上一篇下一篇

猜你喜欢

热点阅读