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 …

python的Streamlit库的text_input组件

text_input 常用的输入组件,这里注意记录一下具体的参数,方便使用 函数签名 st.text_input(label, value"", max_charsNone, keyNone, type"default", helpNone, autocompleteNone, on_changeNone, argsNone, kwargsNone, *, pla…

【LeetCode】414. 第三大的数

414. 第三大的数 难度:简单 题目 给你一个非空数组,返回此数组中 第三大的数 。如果不存在,则返回数组中最大的数。 示例 1: 输入:[3, 2, 1] 输出:1 解释:第三大的数是 1 。示例 2&#xf…

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

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

vue生命周期和路由

Vue.js 生命周期是Vue.js实例从创建到销毁的整个过程中所经过的一系列事件,可以理解为Vue.js的生命周期钩子函数。在这些生命周期钩子函数中,你可以添加自定义的逻辑代码,以便在组件生命周期的不同阶段进行不同的操作。Vue.js生命周期共分为八…

Linux的ps简单实现

原理&#xff1a;遍历下的/proc/%s/task/%s/status所有文件&#xff0c;两个%s都为pid号。 注&#xff1a;多线程下&#xff0c;只打印一个pid/task下的所有目录&#xff0c;即可收集各个线程对应的信息。 $ cat ps.c #include <stdio.h> #include <stdlib.h> #in…

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

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

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

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

angular material mat-error 失效不展示

1.你命名了控制mat-error显示与否的变量&#xff0c;却没有在html里使用 2.mat-error是放在mat-form-field里才生效的&#xff0c;如果 <input matInput required formControlName"phoneNumber" /> 中的phoneNumber其实是valid&#xff0c;通过验证的&#x…

【KALI】设置静态IP地址

ip: 192.168.1.10/24 网关&#xff1a;192.168.1.1 DNS&#xff1a;192.168.1.254/etc/network/interfaces原始文件内容为&#xff1a; # This file describes the network interfaces available on your system # and how to activate them. For more information, see inter…

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

目录 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认证已过。

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

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

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

laravel定时任务配置手册

任务调度在 app/Console/Kernel.php 的 schedule 方法中进行定义&#xff1b; 分配多种调度计划&#xff1a;结合其他一些特定条件&#xff0c;我们可以生成在一周中特定时间运行的任务。举个例子&#xff0c;在每周一执行命令&#xff1a; 方法 描述 ->cron(* * * * *); …

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

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

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

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

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

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

Ubuntu22.04使能root用户

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