DGL库之dgl.function.u_mul_e(代替dgl.function.src_mul_edge)

devtools/2024/11/7 2:32:27/

DGL库之dgl.function.u_mul_e

  • 语法格式
  • 例子

语法格式

dgl.function.u_mul_e代替了dgl.function.src_mul_edge

dgl.function.u_mul_e(lhs_field, rhs_field, out)

一个用于计算消息传递的内置函数,它通过对源节点(u)和边(e)的特征执行逐元素(element-wise)乘法操作来生成消息。如果源节点和边的特征形状相同,则直接进行逐元素乘法;如果形状不同,它会先广播特征到新的形状,然后再进行逐元素操作。(广播和NumPy规则一致)

参数说明:

  • lhs_field (str):源节点 u 的特征字段名称。
  • rhs_field (str):边 e 的特征字段名称。
  • out (str):输出消息字段的名称。

例子

图结构如下:
在这里插入图片描述

import dgl
import torch
import dgl.function as fn# 创建图,节点和边
g = dgl.graph(([0, 1, 2], [1, 2, 0]))# 给边设置特征 'e_feat',确保它是浮动类型
g.edata['e_feat'] = torch.tensor([2000, 3000, 4000], dtype=torch.float32)# 给节点设置特征 'n_feat',确保它是浮动类型
g.ndata['n_feat'] = torch.tensor([20, 21, 22], dtype=torch.float32)# 使用 dgl.function.u_mul_e 计算消息(逐元素乘法)
g.apply_edges(fn.u_mul_e('n_feat', 'e_feat', 'msg'))# 查看计算出来的消息
print("消息(msg):")
print(g.edata['msg'])# 定义消息聚合函数:对消息求和
def reduce_sum(nodes):# torch.sum目的是将数据转成列表格式return {'n_feat': torch.sum(nodes.mailbox['msg'], dim=1)}# 使用 send_and_recv 发送消息,并在目标节点聚合
g.send_and_recv(g.edges(), fn.u_mul_e('n_feat', 'e_feat', 'msg'), reduce_sum)# 查看目标节点的特征(经过消息聚合更新后的节点特征)
print("目标节点更新后的特征(n_feat):")
print(g.ndata['n_feat'])

代码详解:

  • 使用 dgl.function.u_mul_e 计算消息,在每条边上,使用 u_mul_e 函数计算消息,消息是节点特征和边特征的逐元素乘积。‘n_feat’ 是节点特征字段,‘e_feat’ 是边特征字段,计算结果存储在 msg 字段中,这表示每条边上生成的消息是:

    • 节点0和边1的消息:20 * 2000 = 40000
    • 节点1和边2的消息:21 * 3000 = 63000
    • 节点2和边0的消息:22 * 4000 = 88000
  • reduce_sum 是一个聚合函数,将每个节点收到的消息赋值给节点特征 ‘n_feat’。

    • 节点0 接收到的消息是来自边 (2, 0) 的消息 88000,所以节点0的聚合结果是:88000。
    • 节点1 接收到的消息是来自边 (0, 1) 的消息 40000,所以节点1的聚合结果是:40000。
    • 节点2 接收到的消息是来自边 (1, 2) 的消息 63000,所以节点2的聚合结果是:63000。
  • send_and_recv函数发送和接收消息,每个节点的特征通过其入边上的消息来更新。

    • 节点0的更新值是来自边 (2, 0) 的消息 88000。
    • 节点1的更新值是来自边 (0, 1) 的消息 40000。
    • 节点2的更新值是来自边 (1, 2) 的消息 63000。

最终代码执行结果如下:
在这里插入图片描述


http://www.ppmy.cn/devtools/131898.html

相关文章

软件测试学习笔记丨Flask操作数据库-对象与数据模型

本文转自测试人社区,原文链接:https://ceshiren.com/t/topic/23440 对象与数据模型 数据模型:是数据特征的抽象,抽象层次上描述了系统的静态特征、动态行为和约束条件,为数据库系统的信息表示与操作提供一个抽象的框架…

技术分享 —— JMeter接口与性能测试实战!

前言 在软件开发和运维过程中,接口性能测试是一项至关重要的工作。JMeter作为一款开源的Java应用,被广泛用于进行各种性能测试,包括接口性能测试。本文将详细介绍如何使用JMeter进行接口性能测试的过程和步骤。 JMeter是Apache组织开发的基…

WordPress伪静态设置

为什么要设置WordPress伪静态,搜索引擎优化(SEO)中,静态URL通常被认为更易于搜索引擎爬虫抓取和索引,有助于提高网站的搜索引擎排名。 WordPress伪静态设置方法主要依赖于服务器环境,以下是针对不同服务器…

24年配置CUDA12.4,Pytorch2.5.1,CUDAnn9.5运行环境

没什么好介绍的,直接说了。 下载 首先打开命令行,输入代码查看显卡最高支持的cuda版本,下载的版本不要高于该版本 nvidia-smi PyTorch 插件这个是PyTorch下载地址,就按照我这么选CUDA版本就选最新的,看好绿框里的CU…

OpenDroneMap Webodm

OpenDroneMap & Webodm OpenDroneMap Webodm 开源无人机航拍系列图像及其它系列图像三维重建软件。很棒的开源无人机测绘软件OpenDroneMap,从航拍图像生成精确的地图、高程模型、3D 模型和点云。 应用领域 Mapping & Surveying 测绘和测量 从图像测量获得高精度的可…

JavaScript网页设计案例:打造交互式用户体验

JavaScript网页设计案例:打造交互式用户体验 在当今的Web开发领域,JavaScript无疑是构建动态、交互式网页的核心技术。无论是简单的表单验证,还是复杂的单页应用(SPA),JavaScript都能帮助开发者实现丰富的…

【人工智能】Transformers之Pipeline(二十二):零样本文本分类(zero-shot-classification)

​​​​​​​ 目录 一、引言 二、零样本文本分类(zero-shot-classification) 2.1 概述 2.2 Facebook/bart-large-mnli 2.3 pipeline参数 2.3.1 pipeline对象实例化参数 2.3.2 pipeline对象使用参数 2.3.3 pipeline返回参数 ​​​​​​​​…

cuda常用命令、国内镜像源、项目依赖requirements.txt打包、安装

文章目录 一、conda指令二、镜像源配置三、项目依赖打包四、根据requirements.txt安装项目依赖 milk milk 妙不可言! 一、conda指令 创建虚拟环境指定python版本: conda create --name env_name python3.8 激活/使用/进入某个虚拟环境: a…