【图神经网络——消息传递】

消息传递机制

  • 画图先:
    • 导包:
    • 画图:
  • 实现消息传递:
    • 例子一:
    • 例子二:

画图先:

导包:

import networkx as nx
import matplotlib.pyplot as plt
import torch
from torch_geometric.nn import MessagePassing

画图:

# 创建有向图
G = nx.DiGraph()# 添加四个节点
nodes = [0,1,2,3]
G.add_nodes_from(nodes)# 添加每个节点的属性
node_attributes = {0:'[1,2]', 1:'[2,3]', 2:'[8,3]', 3:'[2,4]'}
nx.set_node_attributes(G,node_attributes,'embeddings')# 添加边(使用edge_index)
edge_index = [(0,0),(0,1),(1,2),(2,1),(2,3),(3,2)]
G.add_edges_from(edge_index)# 获取节点标签
node_labels = nx.get_node_attributes(G,'embeddings')pos = nx.spring_layout(G)# 绘制图
nx.draw(G,pos,with_labels=False,node_size=900,node_color ='skyblue',font_size=15,font_color='black')# 在节点旁边添加节点属性
nx.draw_networkx_labels(G,pos,font_color='black',labels={k:f'{k}:{v} ' for k,v in node_labels.items()})

在这里插入图片描述

实现消息传递:

创建与上面所创建的图一致的数据


x = torch.tensor([[1,2],[2,3],[8,3],[2,4]])
edge_index = torch.tensor([[0,0,1,2,2,3],[0,1,2,1,3,2]
])

举两个不同的消息传递例子,方便理解。

例子一:

class MessagePassingLayer(MessagePassing):def __init__(self):super(MessagePassingLayer,self).__init__(aggr='max')def forward(self,x,edge_index):return self.propagate(edge_index=edge_index,x=x)def message(self,x_i, x_j):# 中心节点特征,也就是向量print(x_i)# 邻居节点特征print(x_j)return x_jmessagePassingLayer = MessagePassingLayer()
output = messagePassingLayer(x,edge_index)
print(output)
plt.show()

输出如下:
tensor([[1, 2], 这个是中心节点的特征
[2, 3],
[8, 3],
[2, 3],
[2, 4],
[8, 3]])
tensor([[1, 2], 这个是邻居节点的特征
[1, 2],
[2, 3],
[8, 3],
[8, 3],
[2, 4]])
tensor([[1, 2], 这个是进行消息传递后的中心节点的特征。
[8, 3],
[2, 4],
[8, 3]])

例子二:

class MessagePassingLayer(MessagePassing):def __init__(self):super(MessagePassingLayer,self).__init__(aggr='add')def forward(self,x,edge_index):return self.propagate(edge_index=edge_index,x=x)def message(self,x_i, x_j):# 中心节点特征,也就是向量print(x_i)# 邻居节点特征print(x_j)return (x_i+x_j)messagePassingLayer = MessagePassingLayer()
output = messagePassingLayer(x,edge_index)
print(output)
plt.show()

输出如下:
tensor([[1, 2],
[2, 3],
[8, 3],
[2, 3],
[2, 4],
[8, 3]])
tensor([[1, 2],
[1, 2],
[2, 3],
[8, 3],
[8, 3],
[2, 4]])
tensor([[ 2, 4],
[13, 11],
[20, 13],
[10, 7]])

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

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

相关文章

tensorrtx-yolov5-v6.0部署在windows系统

前言:最近几天一直在搞这个东西,现在跑通了,为了以后自己看和帮助他人,就记录一下。虽然是跑通了但是觉得怪怪的,感觉不是自己想要的效果,另外这个只能检测图片,不能摄像头实时监测(我暂时没找到…

震撼发布!GPT-4o 上线!

5 月 14日凌晨一点,OpenAI 发布了 GPT-4o! 新模型的功能简单概括就是:更快、更智能、更像人类。 秉承着持续更新的态度,Hulu AI 快速接入 GPT-4o 啦! 继 5 月份上线 Suno 之后,这次是 Hulu AI 的又一重大…

Linux---编辑器vim的认识与简单配置

前言 我们在自己的电脑上所用的编译软件,就拿vs2022来说,我们可以在上面写C/C语言、python、甚至java也可以在上面进行编译,这种既可以用来编辑、运行编译,又可以支持很多种语言的编译器是一种集成式开发环境,集众多于…

MP3解码入门(基于libhelix)

主要参考资料: 【Arduino Linux】基于 Helix 解码库实现 MP3 音频播放: https://blog.csdn.net/weixin_42258222/article/details/122640413 libhelix-mp3: https://github.com/ultraembedded/libhelix-mp3/tree/master 目录 一、MP3文件二、MP3 解码库三、libhelix-mp3库3.1 …

如何去除字符串两侧的空白字符?

TRIM函数会去掉字符串左侧和右侧的空格,语法是:TRIM(字符串) excel中,TRIM函数能去掉字符串左侧和右侧的空格,它的ASCII码是32。 以下设定一个字符串组合,它的第一个字符中空格,最后一个字符是换行符 &q…

Pathlib,一个不怕迷路的 Python 向导

大家好!我是爱摸鱼的小鸿,关注我,收看每期的编程干货。 一个简单的库,也许能够开启我们的智慧之门, 一个普通的方法,也许能在危急时刻挽救我们于水深火热, 一个新颖的思维方式,也许能…

年度更新!统信UOS服务器版V20(1070)超越期待

不负广大客户期待! 统信UOS服务器版V20(1070)年度首更 功能更强大、性能更卓越、生态更丰富 助您畅享安全、便捷、高效的产品和服务 新平台,新生态 统信UOS服务器版始终坚持进行生态适配,目前已支持超过百万种兼容…

Python 全栈体系【四阶】(四十四)

第五章 深度学习 九、图像分割 3. 常用模型 3.4 DeepLab 系列 3.4.3 DeepLab v3(2017) 在DeepLab v3中,主要进行了以下改进: 使用更深的网络结构,以及串联不同膨胀率的空洞卷积,来获取更多的上下文信…

使用TerraScan静态扫描KubernetsIaC文件

terrascan https://github.com/tenable/terrascan Terrascan 是基础架构即代码的静态代码分析器。Terrascan 允许: 将基础架构作为代码无缝扫描,以查找错误配置。监控已配置的云基础架构,以查找引入终端安全评估漂移的配置更改&#xff0…

Java面试八股之Collection和Collections的区别

Java中Collection和Collections的区别 Collection 是一个接口,位于 java.util 包中,它是 Java 集合框架的顶层接口之一,代表了一组对象的集合。Collection 接口定义了所有集合类型(如 List、Set、Queue 等)所共有的基…

每周一算法:恰好经过K条边的最短路

题目描述 牛站 给定一张由 M M M 条边构成的无向图,点的编号为 1 ∼ 1000 1\sim 1000 1∼1000 之间的整数。 求从起点 S S S 到终点 E E E 恰好经过 K K K 条边(可以重复经过)的最短路。 注意: 数据保证一定有解。 输入格式 第 1 …

AquaCrop模型运行及结果分析、代码解析;气象、土壤、作物和管理措施等数据的准备和输入;农业水资源管理

目录 专题一 模型原理与数据要求 专题二 模型数据准备 专题三 模型运行及结果分析 专题四 参数分析 专题五 源代码分析 更多应用 AquaCrop是由世界粮食及农业组织(FAO)开发的一个先进模型,旨在研究和优化农作物的水分生产效率。这个模型…

海外住宅IP适用场景

海外住宅IP是指海外互联网服务提供商分配给海外家庭的IP地址,通常长期部署在特定区域的公网中,网络连接稳定,能够快速浏览指定网页内容,请求响应成功。它的适用场景十分广泛,接下来将详细介绍哪些领域会使用海外住宅IP…

错误: 找不到或无法加载主类问题(已解决)

今天在虚拟机中安装了idea2023.2的版本,运行代码时发现错误找不到主类! 直接说结论: 我先clean了一下target,然后重新build,发现maven报错了,idea2023.2默认使用了内置的maven,然后我切换了一下…

垃圾分类管理系统java项目

文章目录 垃圾分类管理系统一、项目演示二、项目介绍三、系统部分功能截图四、部分代码展示五、底部获取项目(9.9¥带走) 垃圾分类管理系统 一、项目演示 垃圾分类管理系统 二、项目介绍 系统角色:管理员、用户 1、登录、注册功能…

单位个人如何向期刊投稿发表文章?

在单位担任信息宣传员一职以来,我深感肩上的责任重大。每月的对外信息宣传投稿不仅是工作的核心,更是衡量我们部门成效的重要指标。起初,我满腔热血,以为只要勤勉努力,将精心撰写的稿件投至各大报社、报纸期刊的官方邮箱,就能顺利登上版面,赢得读者的青睐。然而,现实远比理想骨…

谷歌全力反击 OpenAI:Google I/O 2024 揭晓 AI 新篇章,一场激动人心的技术盛宴

🚀 谷歌全力反击 OpenAI:Google I/O 2024 揭晓 AI 新篇章,一场激动人心的技术盛宴! 在这个人工智能的全新时代,只有谷歌能让你眼前一亮!来自全球瞩目的 Google I/O 2024 开发者大会,谷歌用一场…

54.指针

目录 一.什么是指针? 二.定义一个指针变量 三.指针变量类型 四.取地址运算符& 五.取值运算符* 六.视频教程 一.什么是指针? 口语中的指针一般指指针变量,指针变量存放的是一个地址。普通变量存放…

Nacos+GateWay 搭建微服务架构

文章目录 1.当前项目架构分析1.请求多个模块的方式1.请求renren-fast模块开发环境生产环境 2.请求sunliving-commodity模块1.使用环境变量资源路径的方式2.开发环境 dev.env.js3.生产环境 prod.env.js 3.文件上传请求 sunliving-service模块1.请求后端接口(开发环境…