解释multi_update_all函数

import dgl
import dgl.function as fn
import torch

# 实例化一个异构图
g = dgl.heterograph({
    ('user', 'follows', 'user'): ([0, 1], [1, 1]),
    ('game', 'attracts', 'user'): ([0], [1])
})
g.nodes['user'].data['h'] = torch.tensor([[1.], [2.]])
g.nodes['game'].data['h'] = torch.tensor([[1.]])

# 更新所有节点
g.multi_update_all(
    {'follows': (fn.copy_u('h', 'm'), fn.sum('m', 'h')),
     'attracts': (fn.copy_u('h', 'm'), fn.sum('m', 'h'))},
    "sum")
print(g.nodes['user'].data['h'])  # 输出: tensor([[0.], [4.]])

# 用户定义的跨类型归约函数,等效于"sum"
def cross_sum(flist):
    return torch.sum(torch.stack(flist, dim=0), dim=0) if len(flist) > 1 else flist[0]

# 使用用户定义的跨类型归约函数
g.multi_update_all(
    {'follows': (fn.copy_u('h', 'm'), fn.sum('m', 'h')),
     'attracts': (fn.copy_u('h', 'm'), fn.sum('m', 'h'))},
    cross_sum)

在这段代码中,我们创建了一个包含用户和游戏两种类型节点以及关注和吸引两种类型边的异构图。节点数据通过 multi_update_all 方法更新,使用了两种聚合方法:内置的 “sum” 和用户自定义的 cross_sum 函数。用户自定义的 cross_sum 函数设计为在这种情况下与内置的 “sum” 聚合方法等效。

解释下为什么是print(g.nodes['user'].data['h']) # 输出: tensor([[0.], [4.]])
如下图:
在这里插入图片描述
首先'follows': (fn.copy_u('h', 'm'), fn.sum('m', 'h')user0的给到user1,user1的也给到自己user1,那就已经是1.0 + 2.0 = 3.0了,
接着 'attracts': (fn.copy_u('h', 'm'), fn.sum('m', 'h'))game0的也给到user1,那但看这条边’attracts’,user1获得了1.0。

最后g.multi_update_all( {'follows': (fn.copy_u('h', 'm'), fn.sum('m', 'h')), 'attracts': (fn.copy_u('h', 'm'), fn.sum('m', 'h'))}, "sum")的那个"sum",合并了边类型’follows’和’attracts’,那对user1来说,就是’follows’的3.0 + 'attracts’上获得的1.0,3.0 + 1.0 = 4.0。

user0都没有入边,一眼为0,因为没有源节点也就是入边。甭管虽然他原来的1.0。


下面是官方对此函数的解释(直接看example,毕竟我们是工科,实践为主我觉得)

### multi_update_all(self, etype_dict, cross_reducer, apply_node_func=None)

沿所有边发送消息,首先按类型归约,然后跨不同类型归约,接着更新所有节点的节点特征。

#### 参数
- **etype_dict** : dict
    针对每种边类型的消息传递参数。键是边的类型,值是消息传递的参数。

    允许的键格式有:

    - **(str, str, str)** 表示源节点类型,边类型和目标节点类型。
    - 或者一个可以唯一确定图中三元组格式的 **str** 边类型名称。

    值必须是一个元组 **(message_func, reduce_func, [apply_node_func])**,其中:

    - **message_func** : dgl.function.BuiltinFunction 或 callable
        用于沿边生成消息的消息函数。
        必须是一个 :ref:`api-built-in` 或 :ref:`apiudf`。
    - **reduce_func** : dgl.function.BuiltinFunction 或 callable
        用于聚合消息的聚合函数。
        必须是一个 :ref:`api-built-in` 或 :ref:`apiudf`。
    - **apply_node_func** : callable, 可选
        在消息归约后,进一步更新节点特征的可选应用函数。
        必须是一个 :ref:`apiudf`。

- **cross_reducer** : str 或 callable function
    跨类型归约器。可以是 ``"sum"``, ``"min"``, ``"max"``, ``"mean"``, ``"stack"`` 之一,或者是一个可调用的函数。如果提供了可调用的函数,输入参数必须是一个包含来自每种边类型的聚合结果的张量列表,而函数的输出必须是一个单一的张量。

- **apply_node_func** : callable, 可选
    在消息按类型归约和跨不同类型归约之后的可选应用函数。
    必须是一个 :ref:`apiudf`。

#### 注意
DGL推荐在类型化消息传递参数中使用DGL的内置函数作为 message_func 和 reduce_func,因为在这种情况下,DGL将调用高效的内核,避免将节点特征复制到边特征。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

springboot整合最新版minio和minio的安装(完整教程,新人必看)

概述:这种东西,多写点,方便以后自己使用 目录 第一步:docker安装配置minio 第一步:拉取镜像 第二步:创建用于存储MinIO数据的卷 如果是最新版minio直接就使用最后的那个命令创建容器 第三步&#xff…

coreldraw是什么软件 矢量图设计软件推荐 CDR学习入门 CDR2024发布 cdr2024免费激活下载

CDR是一款平面设计软件,全称为CorelDRAW,是由Corel公司开发的矢量图形编辑工具套件。这款软件结合了矢量图形设计和页面布局的全功能,被广泛应用于商标设计、标志制作、模型绘制、插图描画、排版及分色输出等诸多领域。 2024年3月&#xff0…

力扣思路题:重复的子字符串

注意比较j与j-i是否相同 bool repeatedSubstringPattern(char* s) {int i;int nstrlen(s);bool flag;for(int i1;i<n/2;i){if(n%i0){flagtrue;}for(int ji;j<n;j){if(s[j]!s[j-i]){flagfalse;break;}}if(flagtrue){return true;}}return false; }

力扣106 从中序与后续遍历序列构造二叉树

文章目录 题目描述解题思路代码 题目描述 给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵树的后序遍历&#xff0c;请你构造并返回这颗 二叉树 。 示例 1: 输入&#xff1a;inorder [9,3,15,20,7], …

有来团队后台项目-解析8

UnoCss 介绍 UnoCss 官网UnoCss 官网 安装 pnpm add -D unocss引入 vite.config.ts import UnoCSS from unocss/vite // plugins 中引入 UnoCSS({/* options */ }),创建uno.config.ts // uno.config.ts import {defineConfig,presetAttributify,presetIcons,presetTyp…

NLP深入学习:结合源码详解 BERT 模型(二)

文章目录 1. 前言2. 先从数据准备看起2.1 create_training_instances2.2 vocab_words list(tokenizer.vocab.keys())2.3 create_instances_from_document2.4 create_masked_lm_predictions2.5 几个关键变量2.6 write_instance_to_example_files 3. 参考 1. 前言 《NLP深入学习…

使用Java自带的VisualVM监控远程服务器部署在Docker容器中的Java项目并使用Mat在线工具排查服务器内存泄露或内存溢出的原因

事情是这样的&#xff0c;我们项目最近应业主的要求迁移到了新的服务器&#xff0c;起初一切正常&#xff0c;部署、上线、测试都没有问题&#xff0c;项目大概运行了一周的工作日时间都没出现问题&#xff0c;直到周六那天&#xff0c;项目经理打电话过来说服务器崩了&#xf…

BigDL-LLM 安装指南——在iGPU集成显卡下使用BigDL-LLM大模型库加速LLM

文章目录 iGPU是什么&#xff1f;一、环境准备1.1 Visual Studio 2022 Community 安装1.2 安装或更新最新版本的GPU驱动程序1.3 安装英特尔oneAPI工具包2024.0版本1.4 安装Anaconda 二、BigDL -LLM 安装2.1 创建虚拟环境2.2 激活虚拟环境2.3 安装bigdl-llm[xpu] 三、运行环境配…

Airtest-Selenium升级兼容Selenium 4.0,给你全新体验!

一、前言 在上期更新推文中提到&#xff0c;我们Airtest-Selenium更新到了1.0.6版本&#xff0c;新增支持Selenium4.0的语法&#xff0c;那么我们来看一下Airtest-Selenium更新后有什么新的内容吧~ 二、selenium 4.0有什么新功能 selenium4.0最主要的还是定位元素方法的更新…

Kubernetes(k8s第四部分之servers)

1&#xff0c;为什么不使用round-robin DNS&#xff1f; 因为DNS有缓存&#xff0c;不会清理&#xff0c;无法负载均衡 ipvs代理模式&#xff0c;这种模式&#xff0c;kube-proxy会监视Kubernetes Service 对象和Endpoints&#xff0c;调用netlink接口以相应地创建ipvs规则并…

从自媒体小白到优质KOL,你只差这些个人IP提效神器了!

在数字化浪潮的推动下&#xff0c;社交媒体已成为连接品牌与消费者的重要桥梁。然而&#xff0c;面对众多的社交平台、复杂的数据分析和日益增长的用户需求&#xff0c;社媒运营者常常感到力不从心。高效的社交媒体运营不仅可以提升品牌形象&#xff0c;还能促进产品销售&#…

【网站项目】109网上手机商城

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

VUE3内置组件Transition的学习使用

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 更多nbcio-boot功能请看演示系统RuoYi-Nbcio亿事达企业管理平台 gitee源代码地址 后端代码&#xff1a;…

地理数据 vs. 3D数据

在表示我们周围的物理世界时&#xff0c;地理空间数据和 3D 建筑数据是两个最常见的选择。 他们在各个行业和项目中发挥着至关重要的作用。 从构建数字孪生到可视化城市景观和创建沉浸式应用程序。 尽管地理空间和 3D 建筑数据有相似之处&#xff0c;但它们不可互换。 虽然地…

wifi的5G和3GPP的5G

wifi 5G 跑的是802.11的协议。 wifi的5G指的就是频率&#xff0c;例如wifi2.4G&#xff0c;其频段处于2.400GHz~2.4835GHz之间&#xff0c;wifi5G的频率范围为5.15GHz到5.875GHz&#xff0c;其中包括多个频道。 这里有个误区&#xff0c;并不是运行在5GHz频段的WI-FI就是5G …

python单例模式应用之pymongo连接

文章目录 单例模式介绍模块简介安装简单的连接使用单例模式的连接单例类的实现配置的使用单例模式的测试 单例连接的调用 单例模式介绍 适用场景&#xff1a; 单例模式只允许创建一个对象&#xff0c;因此节省内存&#xff0c;加快对象访问速度&#xff0c;因此对象需要被公用…

面经(三)

auto类型推导 1. 基本类型推导: - auto i 42; 推导为 int&#xff0c;因为42是整数字面量&#xff0c;默认类型为int。 - auto l 42LL; 推导为 long long&#xff0c;因为42LL是长整型字面量&#xff0c;LL后缀指定类型为long long。 - auto f 3.14f; 推导为 floa…

移动端研发技术的进化历程

移动端研发技术 移动端研发技术主要分为原生开发和跨平台开发。本章主要介绍一下移动开发技术的过去、当下和未来&#xff0c;一步一步介绍移动技术的进化历程。 原生开发 原生应用程序是指某一个移动平台&#xff08;比如iOS或Android&#xff09;所特有的应用&#xff0c;使…

阿里云服务器安全狗免费使用多引擎智能查杀引擎

云服务器具有按量付费、降低综合成本等诸多优势&#xff0c;受到很多企业的欢迎。 因此&#xff0c;目前使用的云服务器越来越多。 阿里云是目前云服务器中最具影响力的品牌&#xff0c;因此选择阿里云服务器的用户数量也是最多的。 那么阿里云服务器需要安装杀毒软件吗&#x…

图像处理与图像分析—图像统计特性的计算(纯C语言实现灰度值显示)

根据输入的灰度图像&#xff0c;分别计算图像的均值、方差等统计特征&#xff0c;并计算图像的直方图特征并以图形方式显示图像的直方图&#xff08;用C或C语言实现&#xff09;。 学习将会依据教材图像处理与图像分析基础&#xff08;C/C&#xff09;版内容展开 在上个笔记中&…