当前位置: 首页 > news >正文

【未完】【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

在这里插入图片描述

相关文章:

  • 测试:TestCafe - 判断按钮是否活性化
  • 【Elasticsearch】flattened`类型在查询嵌套数组时可能返回不准确结果的情况
  • 电子电路仿真实验教学平台重磅上线!——深圳航天科技创新研究院倾力打造,助力高校教学数字化转型
  • 产品经理如何做好需求管理
  • 国产三维CAD皇冠CAD(CrownCAD)建模教程:插接箱
  • 安科瑞AcrelEMS3.0企业微电网智慧能源平台-安科瑞 蒋静
  • ZYNQ Overlay硬件库使用指南:用Python玩转FPGA加速
  • OpenCV 级联分类器目标检测
  • 第五部分:第五节 - Express 路由与中间件进阶:厨房的分工与异常处理
  • Linux 系统切换国内镜像源教程
  • 2025年上软考 考试时间+准考证打印全攻略
  • Redis(三) - 使用Java操作Redis详解
  • 昇腾NPU环境搭建
  • 深度学习推理引擎---TensorRT
  • EWOMAIL
  • Debiased Multimodal Understanding for Human Language Sequences
  • STM32外设AD/DA-基础及CubeMX配置
  • 单例模式(Singleton Pattern)详解
  • 学习日志08 java
  • 中大型水闸安全监测系统解决方案
  • 首次带人形机器人走科技节红毯,傅利叶顾捷:没太多包袱,很多事都能从零开始
  • 博物馆日|为一个展奔赴一座城!上海171家博物馆等你来
  • 阿里上财年营收增6%,蒋凡:会积极投资,把更多淘宝用户转变成即时零售用户
  • 侵害孩子者,必严惩不贷!3名性侵害未成年人罪犯被执行死刑
  • 国防部:中方愿与俄方不断增强两军关系良好发展势头
  • 美将解除对叙利亚制裁,外交部:中方一贯反对非法单边制裁