DGL学习笔记03-消息传递机制

2023-11-03

DGL学习笔记03-消息传递机制

1 什么是消息传递?

什么是消息传递机制?首先来看下官方的解释(也可以去看论文)
在这里插入图片描述

对于这一节的话,我感觉如果没接触过Message Passing的人可能看了官方文档也不太容易理解它是什么东西,其实它的核心思想就是每个节点给它相邻的节点发消息。
如下图所示,我们先看下红色结点,它将自己的特征发送给相邻的两个蓝色结点,这个发送其实就是对应着官方文档的消息函数。而对于蓝色结点,它接收到红色结点的消息后进行聚合,比如可以进行sum, max, min, mean 等聚合操作。这些聚合操作就是对应官方文档的聚合函数。而蓝色结点得到邻居结点的发过来的消息后就可以更新自己的特征了,比如将所有的消息进行某种方式的聚合后再经过一层ReLu激活函数,结果作为自己的新特征,这就是更新函数的功能了。(需要注意的是,每个节点都具有发送消息、聚合消息、更新消息的功能,不要以为蓝色节点只能聚合消息)
在这里插入图片描述
在这里插入图片描述

举个简单的例子

在这里插入图片描述

我们有上面这样一张简单的图:三个结点,三条有向边,结点的特征是三维的,边的特征也是三维的。先尝试把图创建出来

import torch
import dgl
import dgl.function as fn


graph = dgl.graph(([0, 2, 2],
                   [1, 0, 1]))

node_feats = torch.tensor([[0, 1, 0],
                           [1, 1, 0],
                           [0, 1, 1]], dtype=torch.float)

edge_feats = torch.tensor([[1, 1, 0],
                           [0, 1, 0],
                           [1, 1, 0]
                           ], dtype=torch.float)
graph.ndata['h'] = node_feats

graph.edata['e'] = edge_feats

print(graph)

在这里插入图片描述
接着我们在每个结点上使用消息函数和聚合函数,然后再输出每个结点的特征,看看它们是如何改变的。其中消息函数是将源节点的特征h乘上边的特征e,然后发送到目标结点的mailbox里面,也就是m。聚合函数就是取出mailbox里面的所有消息,然后进行累加,用来更新自己的h

print(graph.ndata['h'])
graph.update_all(fn.u_mul_e('h', 'e', 'm'), fn.sum('m', 'h'))
print(graph.ndata['h'])

在这里插入图片描述
可以看到,原来结点的特征h确实发生了改变,来仔细看看它是怎么改变的。上面那张图再拿下来看看。
在这里插入图片描述
我们看看0节点,只有2号节点给它发消息。2号节点将其特征[0,1,1]乘上边<2, 0>上的特征[0,1,0]得到[0,1,0],然后作为消息发给节点0。因为节点0只有一个节点2给它发消息,所以它的mailbox里只有一条消息[0,1,0],因此使用sum聚合后还是[0,1,0]。同样地,可以算出节点1和节点2更新后的结果为[0,2,0]和[0,0,0]

更多消息函数、聚合函数的使用请参考官方文档dgl.function

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DGL学习笔记03-消息传递机制 的相关文章

  • OpenGL教程(五)

    前言 正如之前章节所提到的 着色器就是运行在GPU上的小程序 简单来说 着色器就是仅仅是一个将输入数据经过一定转换然后输出的过程 着色器之间是非常独立的 彼此之间除了输入输出之外没有其他交流 这篇文章将会详细介绍着色器以及编写着色器的语言G
  • 上下div之间有间距的问题

    我写了4个div 上下分布 均存在间距 代码以及效果如下 div1 height 100px background color blue position relative div2 height 100px background colo
  • HTTP请求方式中8种请求方法(简单介绍)

    HTTP请求方式中8种请求方法 简单介绍 简单介绍 HTTP是超文本传输协议 其定义了客户端与服务器端之间文本传输的规范 HTTP默认使用80端口 这个端口指的是服务端的端口 而客户端使用的端口是动态分配的 当我们没有指定端口访问时 浏览器
  • [Unity2D/3D]实用的血条制作(第一期)

    Unity2D 3D 实用的血条制作 第一期 在多数的游戏制作中 都会涉及到血条的制作 不论是在2D游戏中还是3D游戏中都非常常见 如何制作一款简易的血条呢 这里我给结合自己自学过程中用到的血条制作方法给大家分享一下我是如何制作血条的 效果
  • atoi函数(c语言)

    目录 atoi函数的说明 函数改编以及思路 代码 代码注释 atoi函数的说明 该函数的作用是将一字符串变为一整型类型的数字输出出来 若字符串内无数字则输出0 此处输出按十进制输出 字符串开头的空格会自动扫描为空 函数改编以及思路 对该函数
  • iframe无边框(隐藏边框)

    用css的border none来去掉iframe的边框在IE下起不了作用 将iframe的frameborder属性的值设为no就可以
  • Java--==与equals()的区别

    一 使用的对象 基本数据类型 equals 引用数据类型 二 比较内容 是否为同一地址 equals 未重写 是否为同一地址 已重写 引用数据类型内容 三 重写 public boolean equals Objeat obj if thi
  • Python接单一个月,副业居然比主业收入要多?

    python爬虫肯定是可以当副业的 我身边一个伙伴就靠会python爬虫这一项技能一个月差不多能有一万多收入 他截图给我看的他的收入图是这样的 人家一个月就靠接单这个副业都比很多人主业收入要多 每个月除主业外还有一万多收入 财务就相对自由的
  • 学习笔记二:IBIS模型编辑报错纠正

    新建IBIS文件后 写好了相应的IBIS模型文件 写好文件后 最好要检查下是否符合ibis语法 注意 第一点 IBIS头文件的 File name 此处名称需要和文件名称相同 同时名称字符数需在12个字符之内 否则会报错 File name
  • 一个javaer面试Python

    Python初面 一 初面缘由 今天是2022年的6月18日 广州 中雨转阴 非天气预报 我怀揣着紧张而有激动的心情趁着周末悄悄去面试了一次 说是去面试 其实也和玩差不多 公司的工作氛围很不错 空调很凉 零食很多 但是我没有心情享用 附上一
  • HFSS 3D LAOUT PCB 裁剪,差分线,过孔仿真和优化

    我本身不是做天线设计的 所以HFSS这个软件给我主要还是做PCB级别的高速信号完整性仿真 一般2 5D的仿真软件无法对过孔和跨平面进行仿真 所以要借助三维电磁软件进行 今天就针对PCB进行裁剪 为什么要裁剪 以为如果把整个PCB一起仿真的话
  • 移动APP专项测试

    什么是移动端测试 移动端测试是指对移动应用进行的测试 即实体的特性满足需求的特性 简言之就是针对移动平台的软件进行的测试 比如针对手机 ipad等平台上的各种app功能和性能展开的测试 相较于传统的web端的测试 移动端的测试受手机屏幕大小
  • 127.0.0.1和localhost的区别

    要比较两个东西有什么不同 首先要弄清两者的概念 所以 我们从概念开始 localhost 也叫local 正确的解释是 本地服务器 127 0 0 1 在windows等系统的正确解释是 本机地址 本机服务器 我们再看看他们的工作原理 lo
  • 关于块元素和行元素之间的转换

    如何让块元素变成行元素 将块级元素设置为行内元素 inline 可以通过以下几种方式 1 display inline 这个是最直接的方式 通过设置display样式为inline 可以将块级元素变为行内元素 例如 css div disp
  • element的日期组件-两个的和单个的组件

    dateOne vue
  • 云计算技术基础第1章 云的概念以及类型

    章节安排 第一章 云的概念及类型 第二章 虚拟化技术 第三章 云计算的架构和国内外研究现状 第四章 云计算与大数据 第五章 海量数据存储技术 第六章 云平台应用 本章内容 计算模式的回顾 云计算概念与特征 云计算的分类 云计算的发展动因 云
  • Spring Cloud Alibaba 大型微服务项目实战

    作者介绍 程序员十三 多年一线开发经验 历任高级开发工程师 后端主程 技术部门主管等职位 同时也是开源项目的爱好者和贡献者 掘金优秀作者 CSDN 博客专家 实体图书作者 专栏作者 视频讲师 小册介绍 Spring Cloud Alibab
  • 利用Python通过频谱分析和KNN完成iphone拨号的语音识别

    最近这段时间 学校里的事情实在太多了 从七月下旬一直到八月底实验室里基本天天十二点或者通宵 实在是没有精力和时间来写博客 这周老师出国开会 也算有了一个短暂的休息机会 刚好写点有意思的东西 上周在天津的会议上碰到一个北交的姐们儿 她想利用小

随机推荐

  • IDEA集成Git操作

    IDEA集成Git操作 IDEA绑定Git仓库 在需要的工程目录下创建Git仓库并完成仓库基本设置 此时IDEA界面出现的变化 若出现此变化 说明IDEA绑定Git仓库成功 IDEA集成的Git操作 右上角选项为Git基本操作 懒人操作 文
  • EMQX v4 安装及组建集群、设置负载均衡

    准备工作 操作系统ubuntu 16 04 虚拟机VMware Workstation 12 Pro 一 安装EMQX 1 打开EMQ首页 https www emqx io cn 2 选择产品 gt EMQ X Broker 3 在ubu
  • 机试复试准备中--梦校(华科)真题

    一 矩阵转置 二 统计单词 写法一 读取一整行 写法二 依次读入每一个单词 三 二叉排序树 DFS 四 IP地址 五 特殊排序 六 a b 高精度加法 七 奇偶校验 八 最大的两个数 九 二叉树遍历 DFS 十 成绩排序 十一 守形数 十二
  • vue:webpack打包过程中的常见错误-加载CSS文件

    问题1 ReferenceError dirname is not defined 解决方法 将 dirname写为 dirname 注意是两条 问题2 npm ERR code ERESOLVE npm ERR ERESOLVE unab
  • C# 任意开次方,次幂, 开平方,开三次方,平方根, 三次方根

    double a 0 开任意次方的关键是 1 0 2 必须写 0 点零 如果不写 就永远等于1 具体原因不清楚 可以测试代码 a Math Pow 2 1 2 可以跟开平方对比一下 开平方 平方根 a Math Pow 2 1 0 2 开任
  • c# yield 用法

    返回类型必须为 IEnumerable IEnumerable
  • 洛谷 P3374 【模板】树状数组 1

    题目链接 https www luogu com cn problem P3374 include
  • 标签平滑(label smoothing)

    目录 1 标签平滑主要解决什么问题 2 标签平滑是怎么操作的 3 标签平滑公式 4 代码实现 标签平滑 label smoothing 出自GoogleNet v3 关于one hot编码的详细知识请见 One hot编码 1 标签平滑主要
  • HDMI与TMDS接口

    目录 0 Xilinx的HDMI 1 4 2 0 Transmitter Subsystem Product Guide 1 HDMI是新一代的多媒体接口标准 2 HDMI向下兼容DVI 3 TMDS 最小化传输差分信号 4 TMDS编码算
  • DB2多行转一行【XML方式】

    分组然后合并 然后去除XML标签 SELECT replace replace replace xml2clob xmlagg xmlelement name A 字段 a 分隔符 a a from 表 group by 分组字段 如 SE
  • python通信仿真_通信协议TLV的介绍及在python下的代码实现及仿真

    TLV协议是一种通讯协议 一般将数据封装成TLV的形式 即Tag Length Value 协议就是指通信双方对数据传输控制的一种规定 规定了数据格式 同步方式 传送速度 传送步骤的问题作出统一的规定 可以理解为两个节点之间为了协同工作 协
  • Elasticsearch实战(十五)---查询query,filter过滤,结合aggs 进行局部/全局聚合统计

    Elasticsearch实战 查询query filter过滤 结合aggs 进行局部 全局聚合统计 文章目录 Elasticsearch实战 查询query filter过滤 结合aggs 进行局部 全局聚合统计 1 准备数据 2 ES
  • C++调用Python Win10 Miniconda虚拟环境配置

    目录 前言 1 Win10 安装 Miniconda 2 创建虚拟环境 3 配置C 调用python环境 4 C 调用Python带参函数 5 遇到的问题 6 总结 前言 本文记录了Win10 系统下Qt 应用程序调用Python时配置Mi
  • (译) 如何使用 React hooks 获取 api 接口数据

    点击上方 蓝字 带你每天阅读全栈前端精选好文 原文地址 robinwieruch 在本教程中 我想向你展示如何使用 state 和 effect 钩子在React中获取数据 你还将实现自定义的 hooks 来获取数据 可以在应用程序的任何位
  • t1服务器显示演示版,T1与T3经常找不到加密狗,及提示演示版本到期,同一个加密狗,WIN2008R2 64位系统。T1工贸版V11.5,T3是普及版本10.8,都已注册。服务器与用户都是同一网络。请...

    经济责任审计结果运用中存在的问题及对策经济责任审计结果运用中存在的问题及对策 近年来 各级高度重视经济责任审计结果运用工作 采取完善机制 健全制度 加强配合等有效措施不断加大结果运用力度 通过将审计结果进行科学合理的转化利用 在加强干部监管
  • mnist

    mnist是什么 它是在机器学习和计算机视觉领域相当于hello world的一个最基础的数据集 内容是手写的数字 从0到9 我们想通过这个数据集来让计算机进行图像识别和手写识别 from matplotlib import pyplot
  • 超详细

    本教程讲述在论文编写中使用ChatGPT进行辅助 提供思路 提升效率 祝看到本教程的小伙伴们都完成论文 顺利毕业 可以加QQ群交流 一群 123589938 第一章 论文框架搭建 1 1 明确论文题目 1 1 1 适合的研究方向 首先赋予它
  • shell-read读取控制台输入

    基本语法 read 选项 参数 选项 p 指定读取值时的提示符 t 指定读取值时等待的时间 秒 如果没有在指定的时间内输入 就不再等待了 参数 变量 指定读取值的变量名 编写一个shell 1 读取控制台输入一个NUM1值 2 读取控制台输
  • android设备外接多个usb摄像头

    转自 https youshaohua com post android device external multiple USB camera 代码访问 OTG USB camera https github com quantum6 A
  • DGL学习笔记03-消息传递机制

    DGL学习笔记03 消息传递机制 1 什么是消息传递 举个简单的例子 1 什么是消息传递 什么是消息传递机制 首先来看下官方的解释 也可以去看论文 对于这一节的话 我感觉如果没接触过Message Passing的人可能看了官方文档也不太容