消息传递神经网络(pyG实现GCN层)

消息传递神经网络

  • 一、引言
  • 二、消息传递范式介绍
  • 三、消息传递的实现(pyG)
    • 1、MessagePassing基类
    • 2、继承MessagePassing实现GCNConv

一、引言

为节点生成节点表征是图计算任务成功的关键,神经网络的生成节点表征的操作叫做节点嵌入(node embeddi ng)

二、消息传递范式介绍

在这里插入图片描述

基于消息传递范式的生成节点表征的过程:
在这里插入图片描述
我们从左往右来看此图。图的左边是我们输入的整张图(INPUT GRAPH),由ABCDEFG六个节点组成,现在目标是得到更新之后A节点(target node)表示。
再看右边,与A相邻的BCD三个点进行变换聚合后就会得到更新后的A节点信息。同理所有的节点都与它相邻节点有关,更新后的信息为相邻节点变换和聚合后的特征信息。消息传递图神经网络是指遵循“消息传递范式”的图神经网络,此类图神经网络实现了上述的节点信息更新过程。

注:未经过训练的图神经网络生成的节点表征还不是好的节点表征,好的节点表征可用于衡量节点之间的相似性。

三、消息传递的实现(pyG)

1、MessagePassing基类

Pytorch Geometric(PyG)提供了 MessagePassing基类,它封装了“消息传递”的运行流程。通过继承 MessagePassing 基类,可以方便地构造消息传递图神经网络,构造一个最简单的消息传递图神经网络类,我们只需定义聚合和更新的方法即可。

  • MessagePassing(aggr=“add”, flow=“source_to_target”,node_dim=-2) :

     aggr :定义要使用的聚合方案("add"、"mean "或 "max");flow :定义消息传递的流向("source_to_target "或"target_to_source");node_dim :定义沿着哪个轴线传播
    
  • MessagePassing.propagate(edge_index, size=None,**kwargs) :

     开始传递消息的起始调用,在此方法中 message 、 update 等方法被调用。它以 edge_index (边的端点的索引)和 flow (消息的流向)以及一些额外的数据为参数。
    
  • MessagePassing.aggregate(…) :

    将从源节点传递过来的消息聚合在目标节点上,一般可选的聚合方式
    有 sum , mean 和 max 。
    
  • MessagePassing.message(…):

     接收传递给MessagePassing.propagate(edge_index, size=None,**kwargs) 方法的所有参数
    
  • MessagePassing.update(aggr_out, …) :

    每个节点更新节点表征。此方法以aggregate 方法的输出为第一个参      
    数,并接收所有传递给propagate() 方法的参数。
    

2、继承MessagePassing实现GCNConv

在这里插入图片描述将上面的公式写成代码

import torch
from torch_geometric.nn import MessagePassing
from torch_geometric.utils import add_self_loops, degree
import warnings
warnings.filterwarnings("ignore")class GCNConv(MessagePassing):def __init__(self, in_channels, out_channels):super(GCNConv, self).__init__(aggr='add', flow='source_to_target')# "Add" aggregation (Step 5).# flow='source_to_target' 表示消息从源节点传播到目标节点self.lin = torch.nn.Linear(in_channels,out_channels)def forward(self, x, edge_index):# x has shape [N, in_channels]# edge_index has shape [2, E]  edge_index (边的端点的索引)# Step 1: 在邻接矩阵中加入自循环的边edge_index, _ = add_self_loops(edge_index,num_nodes=x.size(0))# Step 2: 线性变换节点特征矩阵。x = self.lin(x)# Step 3: 计算归一化系数norm#归一化系数是由每个节点的节点度#return edge_index, edge_weightrow, col = edge_indexdeg = degree(col, x.size(0), dtype=x.dtype)deg_inv_sqrt = deg.pow(-0.5)norm = deg_inv_sqrt[row] * deg_inv_sqrt[col]## Step 4-5: 消息传递return self.propagate(edge_index, x=x, norm=norm)def message(self, x_j, norm):# x_j has shape [E, out_channels]# Step 4: 节点特征归一化.return norm.view(-1, 1) * x_j

GCNConv 继承了 MessagePassing 并以"求和"作为领域节点信息聚合方式。
该层的所有逻辑都发生在其 forward() 方法中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/58502.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为什么神经网络层数越多越好?训练次数与层数的区别与联系

为什么神经网络层数越多越好? 参考资料:https://www.zhihu.com/question/65403482、https://blog.csdn.net/weixin_44023658/article/details/106177580、https://www.bilibili.com/video/BV1bx411M7Zx 一句话回答 神经网络层数越多,对输入…

图神经网络(Graph Neural Networks)概述

论文:A Comprehensive Survey on Graph Neural Networks 一篇关于图神经网络的综述文章,着重介绍了图卷积神经网络(GCN),回顾了近些年的几个主要的图神经网络的的体系:图注意力网络、图自编码机、图生成网…

几种图神经网络方法总结(Graph Neural Network)

概要 近年来图神经网络受到大家越来越多的关注,在文本分类(Text classification),序列标注(Sequence labeling), 神经机器翻译(Neural machine translation),关系抽取(Relation extraction&…

CNN神经网络层次分析

一. CNN简介 CNN(卷积神经网络)是传统神经网络的变种,CNN在传统神经网络的基础上,引入了卷积和pooling。与传统的神经网络相比,CNN更适合用于图像中,卷积和图像的局部特征相对应,pooling使得通过…

图神经网络(Graph neural networks)综述

论文链接:Graph Neural Networks: A Review of Methods and Applications Abstract:图(Graph)数据包含着十分丰富的关系型信息。从文本、图像这些非结构化数据中进行推理学习,例如句子的依赖树、图像的场景图等&#…

神经网络训练数据集大小,神经网络输入图片大小

卷积神经网络 测试图像和 训练图像 大小要一样吗 这取决于你的卷积神经网络中是否存在全连接层,因为不同于全连接层,卷积神经网络中的参数是卷积核的权重,与输入大小无关。 如果是全卷积网络,那么对于输入的图像分辨率要求不高&…

神经网络层数越多越好吗,神经网络的层数怎么看

神经网络的隐含层节点数怎么设置啊?比如要设置18层隐含节点数!跪求,工作急用! 隐层一般是一层或两层,很少会采用三层以上,至少隐层的节点数确定,一般有以下几种方法:1、有经验的人员…

华为最新大模型来了!盘古3.0问世,千亿参数规模3万亿tokens,放话「不作诗只做事」

来源 | 量子位 | 公众号 QbitAI 终于,华为的大模型动向来了! 盘古大模型3.0,今天正式发布。 最底层的基础大模型包括100亿参数、380亿参数、710亿参数和1000亿参数四个版本,预训练使用了超3万亿tokens。 但和早先的传言不同&am…

Nat Biotechnol -- 生成式AI进军更高效价抗体

类似于ChatGPT的语言模型已被应用于改进针对COVID-19、埃博拉和其他病毒的抗体疗法。 代码看不懂?ChatGPT 帮你解释,详细到爆! 单克隆抗体(Y形)与SARS-CoV-2病毒纤突蛋白(红色)上的结合位点&…

什么是科技大爆炸?2023年星云虚境绝对是AI人工智能行业大拿

什么是科技大爆炸?2023年绝对是AI人工智能发展最爆发那一年,自从315chatgpt发布,你看看一夜之间市面上出来了多少的AI工具,在普通人还在嘲笑现在的AI是个智障的时候,聪明的人已经使用这些工具极大的提高自己的生产力了…

华为最新大模型来了!盘古3.0问世,千亿参数规模3万亿tokens,放话「不作诗只做事」...

明敏 发自 东莞量子位 | 公众号 QbitAI 终于,华为的大模型动向来了! 盘古大模型3.0,今天正式发布。 最底层的基础大模型包括100亿参数、380亿参数、710亿参数和1000亿参数四个版本,预训练使用了超3万亿tokens。 但和早先的传言不同…

Unity实现简单卡牌游戏框架

Unity卡牌游戏教程(一)简单框架 前言 项目的初衷是以项目形式串起unity各种零散知识,语言风格较详细(啰嗦) 需求 先来看需要实现什么东西 构建卡牌对象 简单的UI系统 UI和场景的简单交互 前期准备 打开unity&…

卡牌游戏算法原理、代码

1、原理 卡片游戏算法桌上有一叠牌,从第一张牌(即位于顶面的牌)开始从上往下依次编号为1~n。当至少还剩两张牌时进行一下操作:把第一张牌扔掉,然后把第二张牌放到整叠牌的最后,以此往复。输入卡牌数量n&am…

Unity制作卡牌游戏

我的第一个unity项目是卡牌游戏,是看着慕课网以及用同学分享的项目资源跟着老师做的。慕课网课程的链接,希望老师允许我把课程的链接放在这里,宁静方致远 分享的项目,内含素材,希望他们可以同意把他们的链接放在这里。…

百度搜索框搜索时显示或者隐藏历史搜索记录

1.首先进入百度首页 2.找到设置下的搜索设置,如下图所示 3.点击“搜索设置”会出现如下图的弹框,有搜索历史记录的设置,“显示”或者“不显示”。

在谷歌搜索框内不显示搜索记录

在谷歌搜索框内不显示搜索记录 在不删除谷歌历史浏览记录的前提下,不主动显示浏览记录。 操作步骤如上图所示,在数据与个性化中找到网络与应用活动记录,点进去,然后关闭 推荐用edge,可以轻松切换用户,管理…

google 输入栏不显示历史搜索记录方法

网上看了很多回答,试了都不起作用。这里记录一下我的方法,供大家参考。 第一步:在google输入栏输入:chrome://version 查看浏览器信息。其中有个个人资料路径 第二步:在文件夹中找到该路径,路径下有个His…

企业数据分析分四步走:描述、诊断、预测、指导

谈到数据,大家都喜欢拿大数据说事儿,精准营销、客户管理、企业洞察,但事实上,对于大部分中小型企业来说,把创立至今多少年来各个渠道积攒下来的数据统合到一起,也仅仅只是小数据而已。 这些数据,选用合适的工具,可以非常轻松的管好。不过,在选工具之前可以先问自己这…

什么是RLHF

什么是RLHF? **字面翻译:**RLHF (Reinforcement Learning from Human Feedback) ,即以强化学习方式依据人类反馈优化语言模型。 强化学习从人类反馈(RLHF)是一种先进的AI系统训练方法,它将强化学习与人类…

ChatGPT,我跟不动了,你呢?

周末扒出来一个 10 多年前的老系统,搁现在绝对得老破旧一个,如果要升级改造,绝对不如重写速度快。打开编辑器,从 JSP 翻到 XML 配置文件,基本还算看得懂,不过还是太久远了,把玩起来难度比较大。…