转g代码教程_图深度学习入门教程(九)——图滤波神经网络模型
本教程是一个系列免费教程,争取每月更新2到4篇。(由于精力有限,近期停止了一段时间,在此向大家道个歉)。
主要是基于图深度学习的入门内容。讲述最基本的基础知识,其中包括深度学习、数学、图神经网络等相关内容。该教程由代码医生工作室出版的全部书籍混编节选而成。偏重完整的知识体系和学习指南。在实践方面不会涉及太多基础内容 (实践和经验方面的内容,请参看原书)。
文章涉及使用到的框架以PyTorch和TensorFlow为主。默认读者已经掌握Python和TensorFlow基础。如有涉及到PyTorch的部分,会顺带介绍相关的入门使用。
本教程主要针对的人群:
已经掌握TensorFlow基础应用,并想系统学习的学者。
PyTorch学习者
正在从TensorFlow转型到PyTroch的学习者
已经掌握Python,并开始学习人工智能的学者。
在上一篇的结尾出介绍了GfNN模型可以SGC网络可以弥补SGC模型无法拟合非线性数据的不足。本篇就来介绍下GfNN模型的结构、原理以及在DGL中的实现。
1 了解GfNN的网络结构
图滤波神经网络 (Graph filter Neural Network, GfNN)模型的主要思想就是在SGC模型后面加入深度学习中的非线性拟合功能。通过这种方式来弥补SGC网络无法拟合非线性数据的不足。
在掌握了SGC和深度神经网络的基础上,会很容易理解GfNN的结构。GfNN的结构只是在SGC后面加了1层全连接网络而已。如图10-17所示。
从图中,可以看到GfNN和GCN具有相似的高性能。由于GfNN在学习阶段不需要邻接矩阵的乘法,因此它比GCN要快得多。此外,GfNN对噪声的容忍度也更高。
GfNN模型更像是一个框架。框架中包含了两部分:
(1)通过多跳的方式,将图信息融合到图解点特征中。
(2)用深度学习的方法,对融合后的图节点特征进行拟合。
基于这个框架,可以不仅仅限于图10-17中的全连接神经网络结构。在实际应用中,可以像普通的深度学习任务一样,根据数据的特征和任务的特点,选用适合的神经网络来搭建模型。
有关GfNN的更多详细信息可以参考论文(arXiv: 1905.09550,2019)
2 了解DGL库中GfNN的实现方式
在SGConv代码的基础稍加修改就可以实现一个带有全连接的GfNN模型。
2.1. DGL库中GfNN的代码实现
实现SGConv类的主要代码如下:
代码文件: dglGfNN.py(片段)
01 class GfNN(nn.Module): #定义GfNN类02 def __init__(self,in_feats, n_hidden, n_classes,03 k, activation, dropout, cached=True,bias=False):04 super(GfNN, self).__init__()05 self.activation = activation #激活函数06 self.sgc = SGConv(in_feats, n_hidden, k,cached, bias)07 self.fc = nn.Linear(n_hidden, n_classes)08 self.dropout = nn.Dropout(p=dropout)09 def forward(self, g,features):10 x = self.activation(self.sgc(g,features))#对SGC结果进行非线性变换11 x = self.dropout(x)12 return self.fc(x) #对变换后的特征进行全连接处理13 14 model = GfNN(feats_dim,n_hidden=512,n_classes=n_classes, #实例化GfNN模型15 k=2,activation= nn.PReLU(512) ,dropout = 0.2)
代码第14行演示了实例化GfNN模型的过程。一般使用激活函数PReLU效果会更好一些。
2.2. 技术细节:什么是PReLU激活函数
PReLU:是一个ReLU激活函数的变种,其数学公式如下。
其中, a是一个调节参数,该参数可以通过自学习得来。
在PyTorch中,PReLU的原形定义如下:
torch.nn.PReLU(num_parameters=1, init=0.25)
其中参数num_parameters代表可学习参数的个数,init代表可学习参数的初始值。
2.3. GfNN模型的思想
GfNN模型的思想会比模型本身的意义更大。该模型提供了一个非常好的思路,可以使非欧数据与深度学习技术更好的结合到一起。
推荐阅读
图深度学习入门教程(一)——基础类型
图深度学习入门教程(二)——模型基础与实现框架
图深度学习入门教程(三)——全连接神经网络与图卷积
图深度学习入门教程(四)——训练模型的原理
图深度学习入门教程(五)——模型的优化器
图深度学习入门教程(六)——注意力机制与图注意力
图深度学习入门教程(七)——残差多层图注意力模型
图深度学习入门教程(八)——简化图卷积模型
思考:用图神经中的空间域解密谱域中的拉普拉斯
思考sobel算子的原理
思考BN算法与激活函数的前后位置
转g代码教程_图深度学习入门教程(九)——图滤波神经网络模型相关推荐
- 图深度学习入门教程(六)——注意力机制与图注意力
深度学习还没学完,怎么图深度学习又来了?别怕,这里有份系统教程,可以将0基础的你直接送到图深度学习.还会定期更新哦. 主要是基于图深度学习的入门内容.讲述最基本的基础知识,其中包括深度学习.数学.图神 ...
- caffe linux 教程,Caffe 深度学习入门教程 - 安装配置Ubuntu14.04+CUDA7.5+Caffe+cuDNN_Linux教程_Linux公社-Linux系统门户网站...
安装配置Ubuntu14.04+CUDA7.5+Caffe+cuDNN 一.版本 Linux系统:Ubuntu 14.04 (64位) 显卡:Nvidia K20c cuda: cuda_7.5.18 ...
- 深度学习入门教程UFLDL学习实验笔记一:稀疏自编码器
深度学习入门教程UFLDL学习实验笔记一:稀疏自编码器 UFLDL即(unsupervised feature learning & deep learning).这是斯坦福网站上的一篇 ...
- 深度学习入门教程UFLDL学习实验笔记三:主成分分析PCA与白化whitening
深度学习入门教程UFLDL学习实验笔记三:主成分分析PCA与白化whitening 主成分分析与白化是在做深度学习训练时最常见的两种预处理的方法,主成分分析是一种我们用的很多的降维的一种手段,通 ...
- Michael Nielsen的神经网络与深度学习入门教程
Michael Nielsen的神经网络与深度学习入门教程 作者:Michael Nielsen 这是我个人以为目前最好的神经网络与机器学习入门资料.作者以MNIST为例详细介绍了神经网络中的基本 ...
- [TensorFlow深度学习入门]实战九·用CNN做科赛网TibetanMNIST藏文手写数字数据集准确率98%+
[TensorFlow深度学习入门]实战九·用CNN做科赛网TibetanMNIST藏文手写数字数据集准确率98.8%+ 我们在博文,使用CNN做Kaggle比赛手写数字识别准确率99%+,在此基础之 ...
- 官方推荐!用TensorFlow 2.0做深度学习入门教程
最近,TensorFlow 2.0版的开发者预览版发布没多久,这不,又有一篇优质教程来了. 最近,前Youtube视频分类的产品经理.Hands-On MachineLearning with Sci ...
- TensorFlow和深度学习入门教程(TensorFlow and deep learning without a P
前言 上月导师在组会上交我们用tensorflow写深度学习和卷积神经网络,并把其PPT的参考学习资料给了我们, 这是codelabs上的教程:<TensorFlow and deep lear ...
- 【科普】一份 8 岁小朋友都能理解的深度学习入门教程
作者 Jean-Louis Queguine 郭一璞 编译 量子位 出品 | 公众号 QbitAI 原标题:看懂这十步,8岁的小朋友都能理解深度学习 编辑 / 昱良 <流浪地球>里的A ...
最新文章
- Java学习总结:33(System类)
- Go Reflect
- 【Hibernate】Hibrenate POJO 类在序列化时遇到的问题
- 【深度学习】初识tensorflow之分布式训练
- html高德地图api使用教程,高德地图API如何使用?
- jzoj6305-最小值【线段树,dp,双端链表】
- 直面Java第45期
- POJ1789-Truck History .
- Java Web项目在Linux服务器自动化部署续-整合Bamboo
- python求两组同学的平均成绩_Python学习心得2:求平均值
- OpenCV-利用其它widthStep方法把interest——img的所有像素值增加200
- 灰色系统理论概论(个人总结)
- mysql启动6002错误_Oracle ORA-00600 6002错误的解决方法
- J2me实现的wap浏览器
- XTU OJ 湘潭大学
- 优秀博士生和普通博士生差距能有多大?
- QTP自动化测试培训大纲
- 会声会影应该如何制作电影开幕效果
- java代码如何运行?
- 看门狗的喂法(独立看门狗和窗口看门狗的区别)!
热门文章
- 压缩与解压缩 与多个安装文件的合并问题
- webstorm如何自定义代码模板
- nodeName,nodeValue,nodeType,typeof,instanceof 的区别
- 查linux服务器CPU多少C,在linux 下怎么查看服务器的cpu和内存的硬件信息
- vs2013 没有ef mysql_vs2013 EF Mysql
- linux多进程spawn,【Linux Shell脚本编程】expect解决脚本交互 + Shell的多进程处理
- bzoj2763 [JLOI2011]飞行路线
- 【iOS】彩虹渐变色 的 Swift 实现
- VS2013开发Windows服务项目
- PAT-BASIC-1001-害死人不偿命的(3n+1)猜想