GCN实现3
参考 :
首先看两篇论文,大概了解一下原理性的东西:
GRAPH CONVOLUTIONAL NETWORKS THOMAS KIPF, 30 SEPTEMBER 2016
http://tkipf.github.io/graph-convolutional-networks/
Multi-layer Graph Convolutional Network (GCN) with first-order filters.
Overview综述
许多重要的现实世界数据集以图表或网络的形式出现:社交网络、知识图表、蛋白质交互网络、万维网等等(仅举几例)。然而,直到最近,很少有人关注神经网络模型泛化到这样的结构化数据集。在过去的几年里,许多论文重新探讨了将神经网络推广到任意结构图上的问题(Bruna等,ICLR 2014;Henaff等,2015;Duvenaud等,NIPS 2015;Li等人,ICLR 2016;Defferrard等,NIPS 2016;Kipf和Welling, ICLR 2017),他们中的一些人现在在一些以前由基于内核的方法、基于图的正则化技术等领域取得了非常有前途的结果。
在这篇文章中,我将简要概述这一领域的最新发展,并指出各种方法的优缺点。这里的讨论主要集中在最近的两篇论文上:
1) Kipf & Welling (ICLR 2017), Semi-Supervised Classification with Graph Convolutional Networks
2) Defferrard et al. (NIPS 2016), Convolutional Neural Networks on Graphs with Fast Localized Spectral Filtering
Ferenc Huszar的评论:图卷积有多强大?(https://www.inference.vc/how-powerful-are-graph-convolutions-review-of-kipf-welling-2016-2/)讨论了这类模型的一些局限性。
在这里(在这篇文章的最后)对Ferenc的评论写了一个简短的评论。
Outline
Short introduction to neural network models on graphs 简要介绍图上的神经网络模型
Spectral graph convolutions and Graph Convolutional Networks (GCNs) 谱图卷积和图卷积网络
Demo: Graph embeddings with a simple 1st-order GCN model 演示:图嵌入与一个简单的一阶GCN模型
GCNs as differentiable generalization of the Weisfeiler-Lehman algorithm GCNs作为weisfeler - lehman算法的可微推广
图卷积网络有多强大?
最近的文献概括了像RNNs或CNNs这样已经建立的神经模型来处理任意结构的图是一个具有挑战性的问题。最近的一些论文介绍了特定问题的专用体系结构(如Duvenaud等人,NIPS 2015;Li等人,ICLR 2016;Jain et al., CVPR 2016),其他人则利用光谱图理论中已知的图卷积(Bruna et al., ICLR 2014;定义多层神经网络模型中使用的参数化过滤器,类似于我们所知道和喜爱的“经典”CNNs。最近的工作重点是弥合快速启发法和较慢但更有原则的光谱方法之间的差距。Defferrard等人(NIPS 2016)使用Chebyshev多项式在光谱域近似平滑滤波器,使用在类神经网络模型中学习的自由参数。它们在常规域(如MNIST)上取得了令人信服的结果,与简单的2D CNN模型非常接近。Kipf &威灵电机(ICLR 2017),我们采取类似的方法,从框架通过卷积谱图,然而介绍简化(稍后我们将得到这些post),在很多情况下允许显著更快的训练时间和更高的预测精度,达到最先进的基准图的数据集的分类结果。
GCNs第一部分:定义
目前,大多数图神经网络模型都有一个通用的体系结构。我将这些模型称为图卷积网络(GCNs);卷积,因为过滤器参数通常在图中的所有位置共享(或其中的一个子集,如Duvenaud等人,NIPS 2015)。
对于这些模型,目标是学习图上信号/特征的函数
让我们来看看我们的简单GCN模型(见前一节或Kipf & Welling, ICLR 2017)是如何在一个著名的图形数据集上工作的:Zachary的空手道俱乐部网络(见上图)。我们取一个3层的GCN,它的权值是随机初始化的。现在,甚至在训练权值之前,我们只需将图的邻接矩阵和X=IX=I(即单位矩阵,因为我们没有任何节点特征)插入到模型中。3层的GCN现在在前向传递中执行三个传播步骤,并有效地对每个节点的3阶邻域进行卷积(所有节点到3“跳”远)。值得注意的是,该模型生成了这些节点的嵌入,它们与图中的社区结构非常相似(见下图)。请记住,我们已经完全随机地初始化了权值,并且还没有执行任何训练更新(到目前为止)!
这似乎有点令人惊讶。最近一篇关于DeepWalk模型的论文(Perozzi et al., KDD 2014)表明,他们可以在复杂的无监督训练过程中学习非常类似的嵌入。怎么可能得到这样一个嵌入或多或少“免费”使用我们简单的未经训练的GCN模型?通过将GCN模型解释为众所周知的图上的weisfeler - lehman算法的广义可微版本,我们可以对此提供一些启发。(1维)weisfeler - lehman算法如下:
实际上,weisfeler - lehman算法为大多数图分配了一组独特的特征。这意味着每个节点都被分配了一个唯一描述其在图中的角色的特性。例外情况是高度规则的图形,如网格、链等。对于大多数不规则图,这种特征分配可以用来检查图的同构性(即两个图是否相同,直到节点的排列)。
回到我们的Graph Convolutional layer -wise propagation rule (now in vector form):
GCNs Part IV:半监督学习
由于我们的模型中的所有东西都是可微分和参数化的,我们可以添加一些标签,训练模型并观察嵌入的反应。我们可以使用Kipf & Welling (ICLR 2017)中引入的GCNs半监督学习算法。我们只是为每个类/社区标记一个节点(在下面的视频中突出显示的节点),并开始进行一些迭代训练5:
http://tkipf.github.io/graph-convolutional-networks/images/video.mp4
注意,该模型直接产生了一个二维的潜在空间,我们可以立即可视化。我们观察到,3层的GCN模型能够线性地分离社区,每个类只给出一个标记的示例。考虑到模型没有收到节点的特征描述,这是一个有点值得注意的结果。同时,可以提供初始的节点特征,这正是我们在论文(Kipf & Welling, ICLR 2017)中描述的实验中所做的,以实现对大量图数据集的最新分类结果。
关于这一课题的研究才刚刚开始。过去几个月出现了令人兴奋的发展,但迄今为止,我们可能只触及了这些类型模型的皮毛。如何将图上的神经网络进一步应用于特定类型的问题,如在有向图或关系图上的学习,以及如何将学习过的图嵌入用于未来的任务,这些都有待观察。这个列表绝不是详尽的,我期望在不久的将来会出现更多有趣的应用程序和扩展。
We have released the code for Graph Convolutional Networks on GitHub: https://github.com/tkipf/gcn.
【GCN+AE代码逐行学习】参考资料记录:
https://www.baidu.com/link?url=0VitAaCEOfc60eW_bXCRmiuYV7SV5O7cuElOGJaoGk1D-QZHlckKtwv8YXoLYrfB7TONrsN-y46R6702byd7o9ecz1eW3-3SdNOBgnS44BG&wd=&eqid=9d04d9070008d75a000000065d9eae5a
keras版本:https://codeload.github.com/tkipf/keras-gcn/zip/master
tensorflow版本:https://github.com/tkipf/gcn.
pytorch框架下实现的GCN代码:https://github.com/tkipf/pygcn
接下来分析tensorflow版本的:
首先下载相关文件:
然后准备数据:
为了使用您自己的数据,您必须提供:
一个N×N的邻接矩阵(N是节点的数量),
一个N×D的特征矩阵(D是每个节点的特征数量),
一个N×E的二进制标签矩阵(E是类的数量)。
以utils.py中的load_data()函数为例。
Have a look at the load_data() function in utils.py for an example. In this example, we load citation network data (Cora, Citeseer or Pubmed). The original datasets can be found here: http://linqs.cs.umd.edu/projects/projects/lbc/. In our version (see data folder) we use dataset splits provided by https://github.com/kimiyoung/planetoid (Zhilin Yang, William W. Cohen, Ruslan Salakhutdinov, Revisiting Semi-Supervised Learning with Graph Embeddings, ICML 2016). You can specify a dataset as follows: python train.py --dataset citeseer (or by editing train.py)
模型选择:
You can choose between the following models: gcn: Graph convolutional network (Thomas N. Kipf, Max Welling, Semi-Supervised Classification with Graph Convolutional Networks, 2016) gcn_cheby: Chebyshev polynomial version of graph convolutional network as described in (Michaël Defferrard, Xavier Bresson, Pierre Vandergheynst, Convolutional Neural Networks on Graphs with Fast Localized Spectral Filtering, NIPS 2016) dense: Basic multi-layer perceptron that supports sparse inputs
图分类Graph classification:
我们的框架还支持使用每个邻接矩阵对多个图实例(可能大小不同)进行分批分类。最好是将各自的特征矩阵串联起来,构建一个(稀疏的)块对角矩阵,其中每个块对应一个图实例的邻接矩阵。对于池(在图级输出而不是节点级输出的情况下),最好指定一个简单的池矩阵,从各自的图实例中收集特性,如下图所示:
代码结构:
.── data // 图数据
├── inits // 初始化的一些公用函数
├── layers // GCN层的定义
├── metrics // 评测指标的计算
├── models // 模型结构定义
├── train // 训练
└── utils // 工具函数的定义
训练结果:
GCN实现3的更多相关文章
- GCN code parsing
GCN code parsing 2018-07-18 20:39:11 utils.py --- load data def load_data(path="../data/cora/ ...
- 【语义分割】large kernel matters中GCN模块的pytorch实现
GCN模块的实现比较简单,在giuhub上看到两种实现,轻微不同 实现一:https://github.com/ycszen/pytorch-segmentation/blob/master/gcn. ...
- GCN和GCN在文本分类中应用
1.GCN的概念 传统CNN卷积可以处理图片等欧式结构的数据,却很难处理社交网络.信息网络等非欧式结构的数据.一般图片是由c个通道h行w列的矩阵组成的,结构非常规整.而社交网络.信息网络 ...
- GNN 相关资料记录;GCN 与 graph embedding 相关调研
最近做了一些和gnn相关的工作,经常听到GCN 和 embedding 相关技术,感觉很是困惑,所以写下此博客,对相关知识进行索引和记录: 参考链接: https://www.toutiao.com/ ...
- GCN 实现3 :代码解析
1.代码结构 ├── data // 图数据 ├── inits // 初始化的一些公用函数 ├── layers // GCN层的定义 ├── metrics // 评测指标的计算 ├── mode ...
- GCN 简单numpy实现
`#参考:https://blog.csdn.net/weixin_42052081/article/details/89108966 import numpy as np import networ ...
- GCN python 实现2:利用GCN进行节点分类
参考:https://www.baidu.com/link?url=5oU-O_YQV8DdSTtRkgzsQ_vuwjJHyUOxqeAKhq98ZA5XtvKW8PNQwXgSlr5GpESRqh ...
- GCN
REFERENCE: https://www.jianshu.com/p/ad528c40a08f https://www.zhihu.com/question/54504471 图有两个基本的特性: ...
- GCN总结
一.GCN简介 GNN模型主要研究图节点的表示(Graph Embedding),图边结构预测任务和图的分类问题,后两个任务也是基于Graph Embedding展开的.目前论文重点研究网络的可扩展性 ...
随机推荐
- 抓包工具Fiddler的简单使用
HTTP代理 http代理,就是代理客户机的http访问,主要代理浏览器访问页面 代理服务器是介于浏览器和web服务器之间的一台服务器,有了它之后,浏览器不是直接到Web服务器去取回网页而是向代理服务 ...
- nginx 安装 lua_nginx_module 模块(nginx——lua 学习笔记1)
插入两个网站: nginx + lua 的OpenResty 开发 跟我学OpenResty(Nginx+Lua)开发目录贴 两个都是 可以根据目录一步步学习的. 1. 版本下载 nginx版本为 n ...
- 15.Java基础_初探对象
package pack1; public class Phone { //成员变量 String brand; int price; //成员方法 public void call(){ Syste ...
- 【转】Redis相关
1. 什么是redis? Redis 是一个使用 C 语言写成的,开源的基于内存的高性能key-value数据库. Redis的值可以是由string(字符串).hash(哈希).list(列表) ...
- [C2W2] Improving Deep Neural Networks : Optimization algorithms
第二周:优化算法(Optimization algorithms) Mini-batch 梯度下降(Mini-batch gradient descent) 本周将学习优化算法,这能让你的神经网络运行 ...
- [C2P2] Andrew Ng - Machine Learning
##Linear Regression with One Variable Linear regression predicts a real-valued output based on an in ...
- jquery和bootstrap:
事件:绑定bind和解绑unbind: $('选择器').bind('事件',function(){ // 操作 }) $('选择器').unbind('事件') $('选择器').c ...
- 《从HBase offheap到Netty的内存管理》
JVM中的堆外内存(off-heap memory)与堆内内存(on-heap memory) 1. 堆内内存(on-heap memory) 1.1 什么是堆内内存 Java 虚拟机在执行Jav ...
- arduino (3) 控制sim900A发送短信
狗屎佳世通旗舰店,卖的什么破玩意sim900a芯片,不支持联通卡,还生明模块支持双卡的 之前买的esp8266-07都是内存偷工减料 买的液体浊度传感器给的原理图也不给基本接线. 差评垃圾店,你敢卖就 ...
- Manthan, Codefest 18 (rated, Div. 1 + Div. 2) F 单调栈 + 贡献 + 计数
https://codeforces.com/contest/1037/problem/F 题意 function z(array a, integer k): if length(a) < k ...