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

news2024/11/28 0:35:40

目录

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.coloradmin.cn/o/1300513.html

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

相关文章

Spring IoC和DI

目录 一. Spring是什么 IoC DI 二. IoC&DI的使用 IoC 1.Controller(控制器存储) 2.Service(服务存储) 3.Repository(仓库存储) 4.Componemt(组件存储) 5.Configuratio…

【网络安全】网络设备可能面临哪些攻击?

网络设备通常是网络基础设施的核心,并控制着整个网络的通信和安全,同样面临着各种各样的攻击威胁。 对网络设备的攻击一旦成功,并进行暴力破坏,将会导致网络服务不可用,且可以对网络流量进行控制,利用被攻陷…

找不到WMVCORE.dll怎么办?一键解决WMVCORE.dll缺失的详细方法分享

当打开软件时提示wmvcore.dll丢失,这可能是由于以下几个原因导致的: 系统文件损坏:wmvcore.dll是系统文件,可能会因为各种原因(如病毒感染、系统错误、软件卸载等)而损坏。 软件依赖问题:某些…

Nginx性能调优实战 1

Nginx性能调优实战指南 1 Nginx作为一款高性能的Web服务器和反向代理服务器,在处理大量请求和并发连接时表现出色。然而,在实际应用中,为了更好地适应不同的负载和提高系统性能,进行Nginx性能调优是至关重要的。深入探讨Nginx性能…

mysql数据库文件丢失恢复---惜分飞

客户服务器重启,mysql相关数据文件丢失 通过底层工具进行分析,无法正确恢复数据库名字,一个个单个ibd文件(而且很多本身是错误的) 对于这种情况,通过mysql block扫描恢复出来page文件 恢复出来客户需要数据 这个客户出现该故障的原因大概率是由于文件系统损坏导致.最终…

SSD基础架构与NAND IO并发问题探讨

在我们的日常生活中,我们经常会遇到一些“快如闪电”的事物:比如那场突如其来的雨、那个突然出现在你眼前的前任、还有就是今天我们要聊的——固态硬盘(SSD)。 如果你是一个技术宅,或者对速度有着近乎偏执的追求&…

程序的机器代码表示--函数调用

call和ret指令 如何访问栈帧、如何切换栈帧、如何传递参数和返回值 call、ret指令作用: call:1)将IP(即PC)旧值压栈保存(保存在函数的栈帧顶部);2)设置IP新值&#xff0…

Module build failed : Error : Vue packages version mismatch:

Vue packages version mismatch: - vue2.7.15 (E:\Workspace_ce\erp\erp-web\node_modules\vue\dist\vue.runtime.common.js) - vue-template-compiler2.6.11 (E:\Workspace_ce\erp\erp-web\node_modules\vue-template-compiler\package.json) 【问题解决了,我很不…

MyBatis 四大核心组件之 ParameterHandler 源码解析

🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall 🍃 vue3-element-admin 🍃 youlai-boot 🌺 仓库主页: Gitee 💫 Github 💫 GitCode 💖 欢迎点赞…

55.手写实现grpc连接池以及gin和grpc交互

文章目录 一、简介前置说明 二、敏感词过滤服务1、定义sensitive.proto文件2、protoc生成pb.go文件3、sensitive服务端实现 三、关键词匹配服务1、编写keywords.proto文件2、生成pb.go文件3、keywords服务端实现 四、gin web 路由服务1、新建grpcpool服务作为gin web服务2、根据…

.net core提示The xx field is required,One or more validation errors occurred

访问接口时缺少model中的参数时,会提示: The xx field is required One or more validation errors occurred原因是.net core webapi默认参数为不可空,因此会验证并报错。 解决方案: 在项目的.csproj中,修改Nullable…

2023团体程序设计天梯赛——模拟赛和总决赛题

M-L1-1 嫑废话上代码 Linux 之父 Linus Torvalds 的名言是:“Talk is cheap. Show me the code.”(嫑废话,上代码)。本题就请你直接在屏幕上输出这句话。 输入格式: 本题没有输入。 输出格式: 在一行中输出…

华为新款笔记本搭载5nm麒麟芯片,来源成谜,可能让大家失望了~

近日,华为公司悄悄推出了一款基于国产技术打造的全新商用笔记本——华为擎云L540。目前,华为擎云L540在京东平台悄然上线的,尚未在华为官方渠道公开售卖。华为擎云L540搭载了麒麟9006C处理器,采用先进的5nm制程工艺,8 …

大数据HCIE成神之路之数据预处理(1)——缺失值处理

缺失值处理 1.1 删除1.1.1 实验任务1.1.1.1 实验背景1.1.1.2 实验目标1.1.1.3 实验数据解析 1.1.2 实验思路1.1.3 实验操作步骤1.1.4 结果验证 1.2 填充1.2.1 实验任务1.2.1.1 实验背景1.2.1.2 实验目标1.2.1.3 实验数据解析 1.2.2 实验思路1.2.3 实验操作步骤1.2.4 结果验证 1…

JAVA高级(后端需深入移步)

单元测试:使用Junit单元测试框架 使用Junit单元测试: 通过左侧的对❌来进行提示 Junit框架的常见注解: 反射(用于框架,也是最重要):展示框架的成员信息 由于是用于对象,即使在获取…

PHP基础 - 类型比较

在 PHP 中,作为一种弱类型语言,它提供了松散比较和严格比较两种方式来比较变量的值和类型。 松散比较: 使用两个等号(==)进行比较,只会比较变量的值,而不会考虑它们的数据类型。例如: $a = 5; // 整数 $b = 5; // 字符串if ($a == $b) {echo "相等"; // 输…

Go性能分析工具

前言 作为后端研发,性能分析是我们在研发过程中必然会会遇到的环节,接口耗时、堆栈溢出、内存泄露等等。所谓工欲善其事必先利其器,之前在java中我们是使用arthas这一大神器,不得不说确实好用,想了解arthas的可以看下…

Zookeeper单机模式搭建

1、下载 ​wget https://dlcdn.apache.org/zookeeper/zookeeper-3.6.3/apache-zookeeper-3.6.3-bin.tar.gz 2、解压 tar -zxvf apache-zookeeper-3.6.3-bin.tar.gz 3、进入 apache-zookeeper-3.6.3-bin目录下,创建data cd apache-zookeeper-3.6.3-bin mkdir da…

面试官:性能测试瓶颈调优你是真的会吗?

引言:性能瓶颈调优 在实际的性能测试中,会遇到各种各样的问题,比如 TPS 压不上去等,导致这种现象的原因有很多,测试人员应配合开发人员进行分析,尽快找出瓶颈所在。 理想的性能测试指标结果可能不是很高&…

CGAL的2D符合规定的三角剖分和网格

1、符合规定的三角剖分 1.1、定义 如果三角形的任何面的外接圆在其内部不包含顶点,则该三角形是 Delaunay 三角形。 约束 Delaunay 三角形是一种尽可能接近 Delaunay 的约束三角形。 约束 Delaunay 三角形的任何面的外接圆在其内部不包含从该面可见的数据点。 如果…