如何理解图卷积网络GCN

文章目录

  • 基本概念
    • 度矩阵(degree)
    • 邻接矩阵(Adjacency)
  • 理解GCN
    • 两层GCN
    • 网络层数设置
  • 搭建GCN网络
    • 定义GCN层
    • 定义GCN网络

基本概念

图的一些基本知识:图,邻居,度矩阵,邻接矩阵

度矩阵(degree)

度矩阵是对角矩阵,对角上的元素表示每个顶点的度,也就是该顶点相关联的边的数量。

邻接矩阵(Adjacency)

邻接矩阵表示顶点间的关系,矩阵元素为0或1。无向图邻接矩阵是对称矩阵,有向图的邻接矩阵不一定对称。如下图所示
在这里插入图片描述

理解GCN

如何理解 Graph Convolutional Network(GCN)?

GCN,图卷积神经网络,实际作用和CNN一样,是一个特征提取器。

假设有一批图数据。图中有 N N N个节点,每个节点都有自己的特征( D D D维),设这些节点特征组成 N ∗ D N*D ND维的矩阵 X X X,各个节点之间的关系形成一个 N ∗ N N*N NN维的邻接矩阵 A A A。将 X X X A A A输入图卷积神经网络。其中 X X X代表节点的特征, A A A代表边的特征。

GCN的传播方式为:

在这里插入图片描述

其中,

  1. A ~ = A + I \tilde{A} = A + I A~=A+I(这一步是为了将node自身的特征进行运算,相当于add self loop)
  2. D ~ \tilde{D} D~为度矩阵,可以由 A ~ \tilde{A} A~计算得到。 D ~ \tilde{D} D~的作用是将 A ~ \tilde{A} A~归一化,使每行加起来为1。
  3. σ \sigma σ是激活函数
  4. H H H是当前层的特征,对于输入层的话,相当于 X X X

两层GCN

D ~ − 1 / 2 A ~ D ~ − 1 / 2 \tilde{D}^{-1/2}\tilde{A}\tilde{D}^{-1/2} D~1/2A~D~1/2看作一个整体 A ^ \hat{A} A^,则对于一个两层的GCN,激活函数分别采用ReLU和Softmax,整体的正向传播的公式为:

s o f t m a x ( A ^ R e L U ( A ^ X W 0 ) W 1 ) softmax(\hat{A}ReLU(\hat{A}XW^0)W^1) softmax(A^ReLU(A^XW0)W1)

网络层数设置

在GCN网络深度的对比研究中,2-3层就可以达到比较好的效果。

搭建GCN网络

[图神经网络]PyTorch简单实现一个GCN

定义GCN层

可以调用 torch_geometric.nn 中的 GCNConv 进行实现。
torch_geometric.nn

class GCNConv(MessagePassing):def __init__(self, in_channels, out_channels, add_self_loops=True, bias=True):super(GCNConv, self).__init__()self.add_self_loops = add_self_loopsself.edge_index = Noneself.linear = pyg_nn.dense.linear.Linear(in_channels, out_channels, weight_initializer='glorot')if bias:self.bias = nn.Parameter(torch.Tensor(out_channels, 1))self.bias = pyg_nn.inits.glorot(self.bias)else:self.register_parameter('bias', None)# 1.消息传递def message(self, x, edge_index):# 1.对所有节点进行新的空间映射x = self.linear(x) # [num_nodes, feature_size]# 2.添加偏置if self.bias != None:x += self.bias.flatten()# 3.返回source、target信息,对应边的起点和终点row, col = edge_index # [E]# 4.获得度矩阵deg = degree(col, x.shape[0], x.dtype) # [num_nodes]# 5.度矩阵归一化deg_inv_sqrt = deg.pow(-0.5) # [num_nodes]# 6.计算sqrt(deg(i)) * sqrt(deg(j))norm = deg_inv_sqrt[row] * deg_inv_sqrt[col] # [num_nodes]# 7.返回所有边的映射x_j = x[row] # [E, feature_size]# 8.计算归一化后的节点特征x_j = norm.view(-1, 1) * x_j # [E, feature_size]return x_j# 2.消息聚合def aggregate(self, x_j, edge_index):# 1.返回source、target信息,对应边的起点和终点row, col = edge_index # [E]# 2.聚合邻居特征aggr_out = scatter(x_j, row, dim=0, reduce='sum') # [num_nodes, feature_size]return aggr_out# 3.节点更新def update(self, aggr_out):# 对于GCN没有这个阶段,所以直接返回return aggr_outdef forward(self, x, edge_index):# 2.添加自环信息,考虑自身信息if self.add_self_loops:edge_index, _ = add_self_loops(edge_index, num_nodes=x.shape[0]) # [2, E]return self.propagate(edge_index, x=x)

self.propagate 会依次调用message, aggregate, update,完成消息的传递、聚合、更新。

定义GCN网络

class GCN(nn.Module):def __init__(self, num_node_features, num_classes):super(GCN, self).__init__()self.conv1 = GCNConv(num_node_features, 16)self.conv2 = GCNConv(16, num_classes)def forward(self, data):x, edge_index = data.x, data.edge_indexx = self.conv1(x, edge_index)x = F.relu(x)x = F.dropout(x, training=self.training)x = self.conv2(x, edge_index)return F.log_softmax(x, dim=1)

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

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

相关文章

【力扣100】22.括号生成 || 为什么搜索几乎都是用深度优先遍历?

添加链接描述 class Solution:def generateParenthesis(self, n: int) -> List[str]:# 思路是根据左右括号剩余数量进行生成# 剩余左括号小于剩余右括号时,可以加左或者加右# 剩余左括号大于剩余右括号时,舍弃def backtrack(cur,left,right,res):if …

.NET DevOps 接入指南 | 1. GitLab 安装

引言 容器、DevOps和微服务被称为驱动云原生快速发展的三架马车。而DevOps是其中非常重要的一环,DevOps 是由Developers(Dev)和Operations(Ops)两个单词简称组成,中文直译就是“开发运维一体化”。 DevOps…

Spring-AOP综述

文章迁移自语雀。 今天下雪了, 完成了spring aop的应用学习, 学到了以前很多忽略的知识点,也写完了各种试验. 今天给程程分享了很多了随州下雪的场景,写了一二三, ♡程程, i miss u 等字体,在雪地上写给程程看, 还拍摄了照片和视频给她, 上午的时候,还做了一个雪人, 哈哈哈, 她…

zlib.decompressFile报错 【Bug已解决-鸿蒙开发】

文章目录 项目场景:问题描述原因分析:解决方案:方案1方案2此Bug解决方案总结寄语项目场景: 最近也是遇到了这个问题,看到网上也有人在询问这个问题,本文总结了自己和其他人的解决经验,解决了zlib.decompressFile报错 的问题。 问题: zlib.decompressFile报错,怎么解…

Find My帽子|苹果Find My技术与帽子结合,智能防丢,全球定位

帽子是戴在头部的服饰,多数可以覆盖头的整个顶部。主要用于保护头部,部分帽子会有突出的边缘,可以遮盖阳光。帽子亦可作打扮之用,也可以用来保护发型、遮盖秃头。可不同种类,例如贝雷帽、鸭舌帽等等。戴帽子在不同的地…

Java 8 中的 Stream 轻松遍历树形结构!

可能平常会遇到一些需求,比如构建菜单,构建树形结构,数据库一般就使用父id来表示,为了降低数据库的查询压力,我们可以使用Java8中的Stream流一次性把数据查出来,然后通过流式处理,我们一起来看看…

Cypress安装与使用教程(3)—— 软测大玩家

😏作者简介:博主是一位测试管理者,同时也是一名对外企业兼职讲师。 📡主页地址:【Austin_zhai】 🙆目的与景愿:旨在于能帮助更多的测试行业人员提升软硬技能,分享行业相关最新信息。…

SQL常见面试题

今天刷了一遍牛客里的必知必会题,一共50道题,大部分都比较基础,下面汇总一下易错题。 SQL81 顾客登录名 本题几个关键点: 登录名是其名称和所在城市的组合,因此需要使用substring()和concat()截取和拼接字段。得到登…

FL Studio 21最新版本for mac 21.2.2.3740中文解锁版2024最新图文安装教程

FL Studio 21最新版本for mac 21.2.0.3740中文解锁版是最新强大的音乐制作工具。它可以与所有类型的音乐一起创作出令人惊叹的音乐。它提供了一个非常简单且用户友好的集成开发环境(IDE)来工作。这个完整的音乐工作站是由比利时公司 Image-Line 开发的。…

不知道怎么使用IDEA,一篇文章带你快速上手

前言 IDEA 是由 JetBrains 公司开发的软件产品,全称为 IntelliJ IDEA,一个 Java 语言的集成开发环境。它 —— 在业界被公认为是最好的 Java 开发工具之一,尤其在智能代码助手、代码自动提示、重构、J2EE 支持、Ant、JUnit、CVS 整合、代码审…

经典目标检测YOLO系列(一)复现YOLOV1(3)正样本的匹配及损失函数的实现

经典目标检测YOLO系列(一)复现YOLOV1(3)正样本的匹配及损失函数的实现 之前,我们依据《YOLO目标检测》(ISBN:9787115627094)一书,提出了新的YOLOV1架构,并解决前向推理过程中的两个问题,继续按照此书进行YOLOV1的复现。 经典目标…

5个用于构建Web应用程序的Go Web框架

探索高效Web开发的顶级Go框架 Go(或称为Golang)以其简洁性、高效性和出色的标准库而闻名。然而,有几个流行的Go Web框架和库为构建Web应用程序提供了额外的功能。以下是五个最值得注意的Go框架: 1. Gin: Gin是一个高…

Tinker 环境下数据表的用法

如果我们要自己手动创建一个模型文件,最简单的方式是通过 make:model 来创建。 php artisan make:model Article 删除模型文件 rm app/Models/Article.php 创建模型的同时顺便创建数据库迁移 php artisan make:model Article -m Eloquent 表命名约定 在该文件中&am…

SIC产业链简述

同第一代硅半导体产业链类似,SiC产业链也分为以下几个环节: 设备和材料环节,包括晶体生长炉、MOCVD、切割设备、碳粉/硅粉/SiC粉体、石墨件等耗材; SiC衬底合外延环节,包括导SiC晶体生长、衬底晶片、外延片等制造&am…

MyBatis学习一:快速入门

前言 公司要求没办法,前端也要了解一下后端知识,这里记录一下自己的学习 学习教程:黑马mybatis教程全套视频教程,2天Mybatis框架从入门到精通 文档: https://mybatis.net.cn/index.html MyBatis 快速入门&#xf…

Python内置库os和sys的常用方法汇总

更多Python学习内容:ipengtao.com Python是一门强大的编程语言,具有丰富的标准库,其中包括os和sys两个常用模块。os模块用于与操作系统交互,提供了许多文件和目录操作的方法,而sys模块用于与Python解释器进行交互&…

buildadmin实现多级关联下拉效果

文章目录 最终效果开始重新渲染组件编辑渲染完结 最终效果 开始 popupForm.vue代码 <FormItem :label"t(interior.interiorApply.interior_index_id)" type"remoteSelect"v-model"baTable.form.items!.interior_index_id" prop"interi…

GreenPlum-数据世界的绿洲

GreenPlum的介绍 Greenplum是一个基于开源PostgreSQL数据库系统的高性能、可扩展的大数据处理平台。它是由Pivotal Software&#xff08;现在是VMware的一部分&#xff09;开发并维护的。Greenplum的设计目标是处理大规模的数据集&#xff0c;提供高并发、高吞吐量的查询和分析…

云计算:OpenStack 分布式架构部署(单控制节点与多计算节点)

目录 一、实验 1.环境 2. 计算服务安装(计算节点2) 3. 网络服务安装(计算节点2) 一、实验 1.环境 (1) 主机 表1 主机 主机架构IP备注controller控制节点192.168.204.210已部署compute01计算节点1192.168.204.211 已部署compute02计算节点2192.168.204.212 &#xff08;…

产品经理学习-从0-1搭建策略产品

从0-1搭建策略产品 目录&#xff1a; 回顾策略产品 如何从0-1搭建策略产品 回顾策略产品 之前也了解过从产品实施的角度来看&#xff0c;策略就是针对问题的解决方案&#xff0c;在互联网时代更集中体现在2个维度&#xff1a;业务场景和数据应用 如何从0-1搭建策略产品 我们…