AX和A(T)X的区别是?

目录

1.快速了解的例子: 

(1)假设所有节点的初始特征都是[1, 0, 0]  ,那么AX的结果是:

(2) 的结果是:

(3)  总结:

2.计算结构系数的例子

(1)源代码的计算形式是:

  (2) 正常的AX是:

(3)   A转置以后发现和上面的源代码的 X 是一致的;仅仅展示转换后的结果;

3.总结:


1.快速了解的例子: 

来看这个例子:

目标节点是有向边箭头指向的点。在有向图中,每条有向边都有一个起点和一个终点,起点被称为源节点,终点被称为目标节点。箭头从源节点指向目标节点,表示数据或信息从源节点流向目标节点。

(1)假设所有节点的初始特征都是[1, 0, 0]  ,那么AX的结果是:

可以看到每一行的结果表示的是从目标节点传出的信息的和

(2)A^{T}X 的结果是:

这里每一行的结果才是从源节点(邻居节点)传入目标节点的信息。

(3)  总结:

pytorch geometric中为何要将稀疏邻接矩阵写成转置的形式adj_t?

原因就是

  • 首先 pytorch geometric 的边信息可以有两种存储模式,第一种是edge_index,它的shape是[2, N],其中 是边的数目。第一个N维的元素存储边的原点的信息,称为source,第二个N维的元素存储边的目标点的信息,称为target。 举个例子,如果我们有以下这样一张有向图,那么edge_index是这样的: tensor([[1, 2, 3, 4], [0, 0, 0, 0]]),边是(1,0), (2,0), (3,0), (3,0)
  • 如果以上的图是无向图的话,那么0这个节点也指向1,2,3,4这几个节点,edge_index则应该是这样的: tensor([[1, 2, 3, 4,0, 0, 0, 0], [0, 0, 0, 0, 1, 2, 3, 4]]),边是(1,0), (2,0), (3,0), (3,0), (0,1), (0,2), (0,3), (0,4)。edge_index这么写的原因是,在pytorch geometric中,用scatter一类的方式可以很方便地实现,从source到target,这种默认的边传递方式。(当然传递方式你也可以改成从target传递到source。)
  • pytorch geometric的边信息的第二种存储模式是adj_t,它是一个sparse tensor。这里我们看到作者在adj后面加上了t,说明它是邻接矩阵的转置。为什么要写成转置呢,我们接着上面edge_index
  • edge_index中信息传递是source to target,也就是edge_index[0] to edge_index[1],而adj计算的是将原图的有向边的方向调转以后的新图:然后得到新图上从邻居节点到目标节点聚合的消息。所以在做矩阵计算传递信息的时候,作者将 adj 转换成adj_t ,并且将它作为默认形式,这样计算的也就是从源节点到目标节点的信息和,这样就保持了一致。

2.计算结构系数的例子

节点的度数作为节点的初始特征

传入各节点的消息(不算自己):

  • 0:[0,1,0]*0.5+[0,1,0]*0.5 = [0, 1, 0]
  • 1:   [0,1,0]*0.5+[0,1,0]*0.5 = [0, 1, 0]
  • 2:  [0,1,0]*0.5+[1,0,0]*0,5 =[1/2, 1/2, 0]
  • 3:  [0,1,0]*1/3+[0,1,0]U*1/3+[0,0,1]*1/3=[0, 2/3, 1/3]
  • 4:  [0,1,0]*0.5+[0,1,0]*0.5 = [0, 1, 0]
  • 5:  [1,0,0]*1= [1,0,0]
  • 6: [0,1,0]*0.5+[1,0,0]*0,5 =[1/2, 1/2, 0]

(1)源代码的计算形式是:

这里的A不是标准的A,是weight,在计算的结构系数时候,weight[node][index]表示的是邻居 index 对与目标节点 node的重要程度。结果是:

  (2) 正常的AX是:

计算的将原图的有向边的方向调转以后的新图:然后得到新图上从邻居节点到目标节点聚合的消息。

(3)A^{T}X   A转置以后发现和上面的源代码的 X 是一致的;仅仅展示转换后的结果;

所以源代码的计算结果没错的。我的思路也是对的。

 A^{T}X 算的是正儿八经的原图的从源节点(邻居节点)到目标节点的信息。

3.总结:

  • 对于无向图来说,A默认边上的权重都为1,所以A和A的转置结果一致,其中在PYG中,有向图还是作为有向图去处理了,上边edge_index的例子就是最好的说明。
  • 当遇到有向图,尤其是节点之间互相有边,边上的权重还不一样,那么就要注意将A转换为A的转置进行矩阵乘法。

参考的文章有:

pytorch geometric中为何要将稀疏邻接矩阵写成转置的形式adj_t_pytorch中的稀疏矩阵为什么要转置-CSDN博客

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

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

相关文章

day45-46-Vue+ElementUI实现学生管理

VueElementUI实现学生管理 代码: qiushiju/java2313_vue_elementui_crud (gitee.com) 一、思考 考虑需求(登录,查询全部,基本增删改查,分页,搜索,批量) 设计数据库搭建项目 后端…

2024美赛备战2--模型建立(*****必看****)

建模 美赛涉及的建模知识范围非常广且深,纵观美赛真题不难发现,很多的模型 都是读研或者读博的时候才会真正深入开始研究,因此,对于做建模的同学来说, 是无法在赛前吃透大量模型的。推荐本科生分两个步骤去有效准备比赛…

【S32DS RTD实战】-1.3-S32K3工程生成S19,BIN,Hex文件,以及Post-build steps的妙用

目录 1 方法一:逐个生成Motorola S-record(s19,srec…),Intel HEX,Bin文件 1.1 生成Motorola S-record(s19,srec…)文件 1.2 生成Intel HEX文件 1.3 生成Bin文件 2 …

计算机服务器中了mkp勒索病毒怎么办,mkp勒索病毒解密数据恢复

网络技术的不断发展,也为网络安全带来了威胁,近期云天数据恢复中心的工程师陆续接到很多企业的求助,在本月,很多企业的计算机服务器遭到了mkp勒索病毒攻击,导致企业计算机系统瘫痪,无法正常工作&#xff0c…

《深入理解计算机系统》学习笔记 - 第四课 - 机器级别的程序

Lecture 05 Machine Level Programming I Basics 机器级别的程序 文章目录 Lecture 05 Machine Level Programming I Basics 机器级别的程序intel 处理器的历史和体系结构芯片的构成AMD 公司(Advanced Micro Devices,先进的微型设备) C, 汇编, 机器代码定义汇编/机器…

2024美赛备战1--数据处理(数据预处理,异常值处理,预测模型,插值拟合 *****必看****)

1.数据预处理 所谓数据预处理,就是指在正式做题之前对数据进行的一些处理。在有些情 况下,出题方提供的数据或者网上查找的数据并不能直接使用,比如缺少数据甚 至是异常数据,如果直接忽略缺失值,或者没发现异常数据&am…

数字图像处理(实践篇)二十一 人脸识别

目录 1 安装face_recognition 2 涉及的函数 3 人脸识别方案 4 实践 使用face_recognition进行人脸识别。 1 安装face_recognition pip install face_recognition 或者 pip --default-timeout100 install face_recognition -i http://pypi.douban.com/simple --trusted-…

川崎ZX-6R确定引进,636它真的来了,3C认证已过。

最新消息,兄弟们,你们期待已久的川崎ZX6R(636)基本已经确定引进了,官方的3C认证已经通过,那么从3C里面我们可以看到哪几个信息?产品代号ZX636J就是心心念念的ZX-6R了。 有些小伙伴不太清楚3C认…

t-SNE完整笔记 (附Python代码)

t-SNE(t-distributed stochastic neighbor embedding)是用于降维的一种机器学习算法,是由 Laurens van der Maaten 和 Geoffrey Hinton在08年提出来。此外,t-SNE 是一种非线性降维算法,非常适用于高维数据降维到2维或者3维,进行可…

分配栈空间的三种方式(基于适配qemu的FreeRTOS分析)

1、定义全局的数组 定义的全局数组属于bss段,相当于把bss段的一部分作为栈空间,栈空间的大小就是数组的大小如果把栈空间放在bss段,则在bss段清零时会多清零一段地址空间 2、在链接脚本中指定 用链接脚本在所有段的后面增加stack段&#xff…

15:00面试,15:06就出来了,问的问题真变态。。。

刚从小厂出来,没想到在另一家公司我又寄了。 在这家公司上班,每天都要加班,但看在钱给的比较多的份上,也就不太计较了。但万万没想到5月一纸通知,所有人不准加班了,不仅加班费没有了,薪资还要降…

基于springboot的大学生兼职信息管理系统(源码+数据库+文档)

摘要 基于Spring Boot的大学生兼职信息管理系统是一个为大学生和兼职公司提供服务的平台。通过该系统,大学生可以方便地寻找兼职工作机会,而兼职公司可以发布、管理和筛选合适的兼职信息。首先,系统采用了Spring Boot作为开发框架&#xff0…

Ubuntu22.04使能root用户

一、背景 安装Ubuntu22.04系统的时候,会要求创建一个用户,并设置密码。为方便后续行文,将此用户称为user_normal,此密码称为normal_pd 安装Ubuntu22.04系统的时候,没有出现任何和root有关的设置 Ubuntu22.04安装完成…

[陇剑杯 2021]日志分析

[陇剑杯 2021]日志分析 题目做法及思路解析(个人分享) 问一:单位某应用程序被攻击,请分析日志,进行作答: 网络存在源码泄漏,源码文件名是_____________。(请提交带有文件后缀的文件名&…

前端mp3文件转wav文件的实现

一、音频文件格式转换 1)安装fluent-ffmpeg和ffmpeg插件 npm install fluent-ffmpeg; npm install ffmpeg;2)mp3转wav test.js文件: const ffmpeg require(fluent-ffmpeg);ffmpeg(./test.mp3) .format(wav) .audioBitrate(16k) .audioFre…

(纯原创) 基于SSM 的商城购物系统(完整源代码以及开发文档)

摘要 本网上商城系统以SSM架构、使用Mybatis,数据库使用MySQL,这些技术目前相对比较成熟,方便系统的维护与扩展。网上商城系统前台包括了用户注册、用户登录、商品查询、商品添加到购物车、删除商品等几大功能;后台管理功能则包…

Android VpnService 使用(一)

Android VpnService 使用(一) 本篇算是VpnService 使用的第一篇文章,主要讲述service创建,intent调用. 1: 申请权限 <service android:name".MyVpnService" android:permission"android.permission.BIND_VPN_SERVICE"><intent-filter><ac…

LeetCode力扣每日一题(Java):27、移除元素

一、题目 二、解题思路 1、我的思路 因为题目中说“元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。”也就是说&#xff1a; 输入&#xff1a;nums [3,2,2,3], val 3 输出&#xff1a;2, nums [2,2] 解释&#xff1a;函数应该返回新的长度 2并且 nums 中的…

JVM性能调优

遇到以下情况&#xff0c;就需要考虑进行JVM调优了&#xff1a; Heap内存&#xff08;老年代&#xff09;持续上涨达到设置的最大内存值&#xff1b; Full GC 次数频繁&#xff1b; GC 停顿时间过长&#xff08;超过1秒&#xff09;&#xff1b; 应用出现OutOfMemory 等内存异常…

xtts和ogg不选择?

不选择ogg的理由&#xff1a; 1.需要在源端创建用户赋权&#xff0c;启用数据库最小日志&#xff0c;附加日志等操作--对生产影响较大 2.外键约束过多&#xff0c;割接启用可能很慢https://www.modb.pro/db/201126--割接停机时间影响 3.初始化配置expdp导出可能快照过旧&#x…