【未完】【GNN笔记】EvolveGCN:Evolving Graph Convolutional Networks for Dynamics Graphs

Evolving Graph Convolutional Networks for Dynamics Graphs

视频链接:《图神经网络》
相关系列:

  1. 《Dynamic Graph的分类》
  2. 《动态图网络之Dynamic Self-Attention Network》

文章目录

  • Evolving Graph Convolutional Networks for Dynamics Graphs
    • 一、model
      • <font color=red>Q:在同一层不同时刻如何计算?
      • <font color=red>Q:同一时刻数据在不同层如何计算?
      • EvolveGCN-O
      • EvolveGCN-H
      • Q:两种EvolveGCN该如何选择?
      • Loss
  • 解读代码:EvolveGCN-O
    • 二、`run_exp.py`
      • 2.1 主函数
      • 2.2 设置网络参数
      • 2.3 读取数据集
        • 2.3.1 进入`class sbm_dataset()`
      • 2.4 建立预测任务
        • <font color=red>2.4.2 进入`class Link_Pred_Tasker`
      • 2.5 tran\val\test的分离器
        • 2.5.1 进入
      • 2.6
    • 三、model `egcn-o.py`
      • 3.1 class EGCN()
      • 3.2 class GRCU()
      • 3.3 class mat_GRU_cell()
      • 3.4 class mat_GRU_gate()
      • 3.5 class TopK()
  • 附录、`utlis.py`
    • 导入
    • 数据集
      • `parameters_example.yaml`

区别

  • DySAT,是基于GNN和RNN的组合:在每个快照中使用GNN作为特征提取器聚合节点特征,然后在每个快照中使用RNN聚合时间特征来进一步聚合节点的特征
  • EvolveGCN:也是离散型动态GNN,是集成型的DGNN,将GNN和RNN结合在同一层,从而结合空间和时间信息的建模
    在这里插入图片描述
  • EvolveGCN是采用集成DGNN的方法

一、model

采用快照的方法构图,同DySAT一样。

Q:在前面提到,EvolveGCN在每一层将GNN和RNN结合在同一层。那么是如何结合的呢?
A:普通GCN的公式如下图所示,EvolveGCN的公式与之相同。但区别在于W的更新方式。
在这里插入图片描述

Q:在同一层不同时刻如何计算?

第0层 t 1 t_1 t1时刻的计算

  • input : A A A (邻接矩阵) , H 1 0 H_1^0 H10 (节点特征) → \to 如下图

  • init: W 0 ( 0 ) ∈ R 3 × 2 W_0^{(0)} \in \R^{3\times 2} W0(0)R3×2 (权重参数) → \to 第一次初始化,如下图
    在这里插入图片描述

  • step1: W 0 ( 0 ) ∈ R 3 × 2 W^{(0)}_0 \in \R^{3\times 2} W0(0)R3×2RNN–> W 1 ( 0 ) ∈ R 3 × 2 W^{(0)}_1 \in \R^{3\times 2} W1(0)R3×2
    在这里插入图片描述

  • step2: A 1 ⋅ H 1 ( 0 ) ⋅ W 1 0 A_1 \cdot H_1^{(0)}\cdot W_1^{0} A1H1(0)W10GCN–> H 1 ( 1 ) H_1^{(1)} H1(1)
    在这里插入图片描述

  • 整体过程:如下图所示
    在这里插入图片描述

第0层 t 2 t_2 t2时刻的计算
在这里插入图片描述
model计算公式
在这里插入图片描述

Q:同一时刻数据在不同层如何计算?

第0层 t 1 t_1 t1时刻的过程
在这里插入图片描述
第1层 t 1 t_1 t1时刻的过程
在这里插入图片描述

EvolveGCN-O

在这里插入图片描述
在这里插入图片描述

EvolveGCN-H

在这里插入图片描述
在这里插入图片描述
在上图中,可以看到-H的GRU的输入是 H , W H,W H,W,因此会存在数据维度不同的情况,因此设定了一个降维算法.
在这里插入图片描述

Q:两种EvolveGCN该如何选择?

如果节点有信息,-H效果要好,因为考虑了节点的特征变化
如果节点信息⽐较少,-O效果好,因为他更关系图结构的变化

Loss

在这里插入图片描述

解读代码:EvolveGCN-O

二、run_exp.py

2.1 主函数

  1. argparser参数
    在这里插入图片描述
  2. 设置随机数
    在这里插入图片描述
  3. 调用相关函数
    在这里插入图片描述
  4. 建立损失函数和训练器
    在这里插入图片描述

2.2 设置网络参数

在这里插入图片描述
当下默认args.model=‘egcn_o’,查看其他变量

变量含义备注
args.num_hist_steps5hist_steps
args.gcn_parameters[‘feats_per_node’]100
args.gcn_parameters[‘layer_1_feats’]100
args.gcn_parameters[‘layer_2_feats’]100
args.gcn_parameters[‘lstm_l1_feats’]100
args.gcn_parameters[‘lstm_l2_feats’]100
args.gcn_parameters[‘cls_feats’]100

2.3 读取数据集

函数调用流程

  1. 主函数中的调用语句dataset = build_dataset(args) # 构建数据集
  2. 在build_dataset中调用sbm.sbm_dataset(args) 读取数据集
    在这里插入图片描述在这里插入图片描述
2.3.1 进入class sbm_dataset()
  1. sbm_dataset中的Namespace的作用
    在这里插入图片描述
    在这里插入图片描述
  2. args.sbm_args中的dict内容为
    在这里插入图片描述
  3. 建立边的数据结构
    在这里插入图片描述
  4. 随机产生节点特征
    在这里插入图片描述
  5. 总结class.attribute
变量keyvalue含义
self.ecols‘FromNodeId’0
‘ToNodeId’1
‘Weight’2
‘TimeStep’3
self.max_time49时间序列中最大值
self.min_time0时间序列中最小值
self.num_classes1类别数
self.edges{‘idx’:tensor.shape(4870863,3), ‘vals’:tensor.shape(4870863)}self.edges[‘idx’][0]=tensor([0, 2, 0])
self.num_nodes1000节点个数
self.feats_per_node3节点特征个数
self.nodes_featsrandn((1000,3))节点随机特征
self.num_non_existing-38708631000**2 -4870863

2.4 建立预测任务

# build the taskertasker = build_tasker(args,dataset)  # 预测任务link_pred
  1. 调用build_tasker()函数,这里的dataset见2.3节
    在这里插入图片描述
2.4.2 进入class Link_Pred_Tasker

在这里插入图片描述
注释:
在这里插入图片描述

2.5 tran\val\test的分离器

  1. 调用函数splitter = sp.splitter(args,tasker) # 训练,测试,验证集
2.5.1 进入

在这里插入图片描述

2.6

三、model egcn-o.py

3.1 class EGCN()

3.2 class GRCU()

3.3 class mat_GRU_cell()

3.4 class mat_GRU_gate()

3.5 class TopK()

附录、utlis.py

导入

def create_parser():parser = argparse.ArgumentParser(formatter_class=argparse.RawTextHelpFormatter)parser.add_argument('--config_file',default='experiments/parameters_example.yaml', type=argparse.FileType(mode='r'), help='optional, yaml file containing parameters to be used, overrides command line parameters')return parser

注释:

  1. 《ArgumentParser()用法解析》
  2. 《argparse之参数formatter_class》,
  3. 《yaml文件格式说明及编写教程》
  4. 《argparse.FileType实例讲解》, 用argparse.FileType,除了可以实现输入参数为文件外(遇到不存在的文件,会提示错误,这样就不用自己去判断文件是否存在了),还可以很好的实现通过命令行管道来接收数据。

class Namespace(object):'''helps referencing object in a dictionary as dict.key instead of dict['key']'''def __init__(self, adict):self.__dict__.update(adict)

注释: 1. 《 dict 详解》, 《__dict__的用法》

数据集

parameters_example.yaml

在这里插入图片描述

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

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

相关文章

Go语言之路————并发

Go语言之路————并发 前言协程管道SelectsyncWaitGroup锁 前言 我是一名多年Java开发人员&#xff0c;因为工作需要现在要学习go语言&#xff0c;Go语言之路是一个系列&#xff0c;记录着我从0开始接触Go&#xff0c;到后面能正常完成工作上的业务开发的过程&#xff0c;如…

Gmsh划分网格|四点矩形

先看下面这段官方自带脚本 /*********************************************************************** Gmsh tutorial 1** Variables, elementary entities (points, curves, surfaces), physical* entities (points, curves, surfaces)********************************…

leetcode0215. 数组中的第K个最大元素-medium

1 题目&#xff1a;数组中的第K个最大元素 官方标定难度&#xff1a;中 给定整数数组 nums 和整数 k&#xff0c;请返回数组中第 k 个最大的元素。 请注意&#xff0c;你需要找的是数组排序后的第 k 个最大的元素&#xff0c;而不是第 k 个不同的元素。 你必须设计并实现时…

rocketmq 环境配置[python]

因本人是 python 开发&#xff0c;macbook 开发。windows 可以采取配置远程 linux 解释器或者 pycharm 专业版的 docker 解释器进行开发 M1 芯片 本地运行 rocketmq rocketmq Python 开源地址&#xff1a; https://github.com/apache/rocketmq-client-python 因为需要 linu…

OCCT知识笔记之OCAF框架详解

OCAF框架在OCCT项目中的构建与使用指南 Open CASCADE Application Framework (OCAF)是Open CASCADE Technology (OCCT)中用于管理CAD数据的核心框架&#xff0c;它提供了一种结构化方式来组织和管理复杂的CAD数据&#xff0c;如装配体、形状、属性(颜色、材料)和元数据等。本文…

go-数据库基本操作

1. 配置数据库 package mainimport ("gorm.io/driver/mysql""gorm.io/gorm" ) #配置表结构 type User struct {ID int64 json:"id" gorm:"primary_key" // 主键ID自增长Username stringPassword string } #配置连接接信息 func…

【含文档+PPT+源码】基于大数据的交通流量预测系统

技术栈说明 技术栈&#xff1a; 后端&#xff1a;Django&#xff08;后端是前后端分离的&#xff09; 前端&#xff1a;Vue.js ElementUI 开发工具&#xff1a; Python3.9以上 Pycharm MySQL5.7/MySQL8 VSCode 项目演示视频 基于大数据的交通流量预测系统

海盗王3.0的数据库3合1并库处理方案

原版的海盗王数据库有3个accountserver&#xff0c;gamedb&#xff0c;tradedb&#xff0c;对应到是账号数据库&#xff0c;游戏数据库&#xff0c;商城数据库。 一直都有个想法&#xff0c;如何把这3个库合并到一起&#xff0c;这样可以实现一些功能。 涉及到sqlserver的数据库…

Apollo Client 1.6.0 + @RefreshScope + @Value 刷新问题解析

问题描述 在使用 Apollo Client 1.6.0 结合 Spring Cloud 的 RefreshScope 和 Value 注解时&#xff0c;遇到以下问题&#xff1a; 项目启动时第一次属性注入成功后续配置变更时&#xff0c;Value 属性会刷新&#xff0c;但总是刷新为第一次的旧值&#xff0c;而不是最新的配…

LearnOpenGL --- 你好三角形

你好&#xff0c;三角形的课后练习题 文章目录 你好&#xff0c;三角形的课后练习题一、创建相同的两个三角形&#xff0c;但对它们的数据使用不同的VAO和VBO 一、创建相同的两个三角形&#xff0c;但对它们的数据使用不同的VAO和VBO #include <glad/glad.h> #include &…

STM32F407VET6实战:CRC校验

CRC校验在数据传输快&#xff0c;且量大的时候使用。下面是STM32F407VET6HAL库使用CRC校验的思路。 步骤实现&#xff1a; CubeMX配置 c // 在CubeMX中启用CRC模块 // AHB总线时钟自动启用 HAL库代码 c // 初始化&#xff08;main函数中&#xff09; CRC_HandleTypeDef …

Vue3中实现轮播图

目录 1. 轮播图介绍 2. 实现轮播图 2.1 准备工作 1、准备至少三张图片&#xff0c;并将图片文件名改为数字123 2、搭好HTML的标签 3、写好按钮和图片标签 ​编辑 2.2 单向绑定图片 2.3 在按钮里使用方法 2.4 运行代码 3. 完整代码 1. 轮播图介绍 首先&#xff0c;什么是…

Linux远程连接服务

远程连接服务器简介 远程连接服务器通过文字或图形接口方式来远程登录系统&#xff0c;让你在远程终端前登录linux主机以取得可操作主机接口&#xff08;shell&#xff09;&#xff0c;而登录后的操作感觉就像是坐在系统前面一样。 远程连接服务器的功能 分享主机的运算能力 远…

MySQL面试知识点详解

一、MySQL基础架构 1. MySQL逻辑架构 MySQL采用分层架构设计&#xff0c;主要分为&#xff1a; 连接层&#xff1a;处理客户端连接、授权认证等 服务层&#xff1a;包含查询解析、分析、优化、缓存等 引擎层&#xff1a;负责数据存储和提取&#xff08;InnoDB、MyISAM等&am…

牛客网NC22000:数字反转之-三位数

牛客网NC22000:数字反转之-三位数 &#x1f50d; 题目描述 时间限制&#xff1a;C/C/Rust/Pascal 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C/Rust/Pascal 32M&#xff0c;其他语言64M &#x1f4dd; 输入输出说明 输入描述: 输入一个3位整数n (100 ≤ n ≤ 999)…

C++跨平台开发:突破不同平台的技术密码

Windows 平台开发经验 开发环境搭建 在 Windows 平台进行 C 开发&#xff0c;最常用的集成开发环境&#xff08;IDE&#xff09;是 Visual Studio。你可以从Visual Studio 官网下载安装包&#xff0c;根据安装向导进行安装。安装时&#xff0c;在 “工作负载” 界面中&#xff…

[250516] OpenAI 升级 ChatGPT:GPT-4.1 及 Mini 版上线!

目录 ChatGPT 迎来重要更新&#xff1a;GPT-4.1 和 GPT-4.1 mini 正式上线用户如何访问新模型&#xff1f;技术亮点与用户体验优化 ChatGPT 迎来重要更新&#xff1a;GPT-4.1 和 GPT-4.1 mini 正式上线 OpenAI 宣布在 ChatGPT 平台正式推出其最新的 AI 模型 GPT-4.1 和 GPT-4.…

计算机指令分类和具体的表示的方式

1.关于计算机的指令系统 下面的这个就是我们的一个简单的计算机里面涉及到的指令&#xff1a; m就是我们的存储器里面的地址&#xff0c;可以理解为memory这个意思&#xff0c;r可以理解为rom这样的单词的首字母&#xff0c;帮助我们去进行这个相关的指令的记忆&#xff0c;不…

前端脚手架开发指南:提高开发效率的核心操作

前端脚手架通过自动化的方式可以提高开发效率并减少重复工作&#xff0c;而最强大的脚手架并不是现成的那些工具而是属于你自己团队量身定制的脚手架&#xff01;本篇文章将带你了解脚手架开发的基本技巧&#xff0c;帮助你掌握如何构建适合自己需求的工具&#xff0c;并带着你…

SpringBoot常用注解详解

文章目录 1. 前言2. 核心注解2.1 SpringBootApplication2.2 Configuration2.3 EnableAutoConfiguration2.4 ComponentScan2.5 Bean2.6 Autowired2.7 Qualifier2.8 Primary2.9 Value2.10 PropertySource2.11 ConfigurationProperties2.12 Profile 3. Web开发相关注解3.1 Control…