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

GNN code Tips

1. 重置label取值范围

 problem: otherwise occurs IndexError: target out of bounds

# reset labels value range, otherwise occurs IndexError: target out of bounds
uni_set = torch.unique(labels)
to_set = torch.tensor(list(range(len(uni_set))))
labels_reset = labels.clone().detach()
for from_val, to_val in zip(uni_set, to_set):labels_reset = torch.where(labels_reset == from_val, to_val, labels_reset)

2. 根据多个labels tensor从整体label数据中提取特定数据。

label_mask = (labels == label)  # numpy array, (100,), ([True, False, True, True])
label_indices = np.where(label_mask)[0]  # 同一标签索引, label_index, (3, ) array([0, 2, 3], dtype=int64)
negative_indices = np.where(np.logical_not(label_mask))[0]  # (97, ), 其他标签索引,作为负样本 ndarray
# anchor_pos_list = list(combinations(label_indices, 2))  # 2个元素的标签索引组合, list: 3, [(23, 66), (23, 79), (66, 79)]
extract_index_data = edge_index_mx[0: label_indices]

3. 构建Geometric GATConv和GCNConv的 edge_index

因为torch geometric 即PyG的edge_index数据shape是二维tensor,shape=[2, n]. 

# relations_ids = ['entity', 'userid', 'word'],分别读取这三个文件
def sparse_trans(datapath = None):relation = sparse.load_npz(datapath)  # (4762, 4762)all_edge_index = torch.tensor([], dtype=int)for node in range(relation.shape[0]):neighbor = torch.IntTensor(relation[node].toarray()).squeeze()  # IntTensor是torch定义的7中cpu tensor类型之一;# squeeze对数据维度进行压缩,删除所有为1的维度# del self_loop in advanceneighbor[node] = 0  # 对角线元素置0neighbor_idx = neighbor.nonzero()  # 返回非零元素的索引, size: (43, 1)neighbor_sum = neighbor_idx.size(0)  # 表示非零元素数据量,43loop = torch.tensor(node).repeat(neighbor_sum, 1)  # repeat表示按列重复node的次数edge_index_i_j = torch.cat((loop, neighbor_idx), dim=1).t()  # cat表示按dim=1按列拼接;t表示对二维矩阵进行转置, node -> neighborself_loop = torch.tensor([[node], [node]])all_edge_index = torch.cat((all_edge_index, edge_index_i_j, self_loop), dim=1)del neighbor, neighbor_idx, loop, self_loop, edge_index_i_jreturn all_edge_index  ## 返回二维矩阵,最后一维是node。 node -> nonzero neighbors

4. 为GCNConv从全部edge index抽取指定的batch edge index

因为GCNConv需要执行卷积操作convolution,index out of the size of batch, 就会报错!

  • step 1: 抽取batch nodes对应的edge index
  • step 2: 将edge index value重置 reset in the range of [0, batch_size]. 
def extract_batch_edge_idx(batch_nodes, edge_index):extract_edge_index = torch.Tensor()for i in batch_nodes:extract_edge_i = torch.Tensor()# extract 1-st row index and 2-nd row indexedge_index_bool_0 = edge_index[0, :]edge_index_bool_0 = (edge_index_bool_0 == i)if edge_index_bool_0 is None:continuebool_indices_0 = np.where(edge_index_bool_0)[0]# extract dataedge_index_0 = edge_index[0:, bool_indices_0]for j in batch_nodes:edge_index_bool_1 = edge_index_0[1, :]edge_index_bool_1 = (edge_index_bool_1 == j)if edge_index_bool_1 is None:continuebool_indices_1 = np.where(edge_index_bool_1)[0]edge_index_1 = edge_index_0[0:, bool_indices_1]extract_edge_i = torch.cat((extract_edge_i, edge_index_1), dim=1)extract_edge_index = torch.cat((extract_edge_index, extract_edge_i), dim=1)# reset index value in a specific rangeuni_set = torch.unique(extract_edge_index)to_set = torch.tensor(list(range(len(uni_set))))labels_reset = extract_edge_index.clone().detach()for from_val, to_val in zip(uni_set, to_set):labels_reset = torch.where(labels_reset == from_val, to_val, labels_reset)return labels_reset.type(torch.long)

5. 将edge index 二维tensor 向量转换为 tensor matrix格式

def relations_to_adj(filtered_multi_r_data, nb_nodes=None):relations_mx_list = []for r_data in filtered_multi_r_data:data = np.ones(r_data.shape[1])relation_mx = sp.coo_matrix((data, (r_data[0], r_data[1])), shape=(nb_nodes, nb_nodes), dtype=int)relations_mx_list.append(torch.tensor(relation_mx.todense()))return relations_mx_list

相关文章:

GNN code Tips

1. 重置label取值范围 problem: otherwise occurs IndexError: target out of bounds # reset labels value range, otherwise occurs IndexError: target out of bounds uni_set torch.unique(labels) to_set torch.tensor(list(range(len(uni_set)))) labels_reset label…...

物联网|按键实验---学习I/O的输入及中断的编程|函数说明的格式|如何使用CMSIS的延时|读取通过外部中断实现按键捕获代码的实现及分析-学习笔记(14)

文章目录 通过外部中断实现按键捕获代码的实现及分析Tip1:函数说明的格式Tip2:如何使用CMSIS的延时GetTick函数原型stm32f407_intr_handle.c解析中断处理函数:void EXTI4_IRQHandler 调试流程软件模拟调试 两种代码的比较课后作业: 通过外部中断实现按键捕获代码的实…...

Java对象的前世今生

文章目录 一、创建对象的步骤二、类加载机制三、内存分配指针碰撞 (内存连续)空闲列表 (内存不连续) 四、创建对象的5种方法五、浅拷贝与深拷贝 以下一行代码内部发生了什么? Person person new Person();一、创建对象的步骤 根据JLS中的规定,Java对象…...

Qt中JSON的使用

一.前言: JSON是一种轻量级数据交换格式,常用于客户端和服务端的数据交互,不依赖于编程语言,在很多编程语言中都可以使用JSON,比如C,C,Java,Android,Qt。除了JSON&#x…...

linux安装Tomcat部署jpress教程

yum在线安装: 查看tomcat相关的安装包: [rootRHCE ~]# yum list | grep -i tomcat tomcat.noarch 7.0.76-16.el7_9 updates tomcat-el-2.2-api.noarch 7.0.76-16.el7_9 updat…...

高并发负载均衡---LVS

目录 前言 一:负载均衡概述 二:为啥负载均衡服务器这么快呢? ​编辑 2.1 七层应用程序慢的原因 2.2 四层负载均衡器LVS快的原因 三:LVS负载均衡器的三种模式 3.1 NAT模式 3.1.1 什么是NAT模式 3.1.2 NAT模式实现LVS的缺点…...

微前端中的 CSS

本文为翻译 本文译者为 360 奇舞团前端开发工程师原文标题:CSS in Micro Frontends 原文作者:Florian Rappl 原文地址:https://dev.to/florianrappl/css-in-micro-frontends-4jai 我被问得最多的问题之一是如何在微前端中处理 CSS。毕竟&…...

在CSDN学Golang场景化解决方案(分布式日志系统)

一,传统 elk 解决方案及其弊端 传统ELK(Elasticsearch Logstash Kibana)方案是一种流行的分布式日志系统解决方案,但也存在一些弊端: 依赖性:ELK使用Java编写,需要安装JVM,并且还…...

电脑第一次使用屏幕键盘

操作流程 1.在键盘上同时按WinR打开运行; 2.输入control 3.找到设置中心 4.点击屏幕键盘 效果 具体怎么使用 我不咋清除 简单 测试了一下 可以用鼠标点击屏幕键盘的按键 用键盘 按字母键和数字键 是和屏幕键盘不同步的 其他 tab、shift、后退、enter好像同步...

【C#学习笔记】类型转换

文章目录 类型转换字符转数字GetNumericValueConvert.ToInt32隐式转换计算 字符串转数字Parse 或 TryParse 方法 字节数组转整数 as,is强制类型转换isas 用户定义的转换 类型转换 我们简单地将值类型分为5种:整数型,浮点型,布尔型…...

SpringBoot+SSM实战<一>:打造高效便捷的企业级Java外卖订购系统

文章目录 项目简介项目架构功能模块管理端用户端 技术选型用户层网关层应用层数据层工具 项目优缺点结语 黑马程序员最新Java项目实战《苍穹外卖》:让你轻松掌握SpringBootSSM的企业级开发技巧项目简介 《苍穹外卖》是一款为餐饮企业(餐厅、饭店&#x…...

笙默考试管理系统-MyExamTest--calculagraph

笙默考试管理系统-MyExamTest--calculagra(1) 目录 一、 笙默考试管理系统-MyExamTest--calculagra 二、 笙默考试管理系统-MyExamTest--calculagra 三、 笙默考试管理系统-MyExamTest--calculagra 四、 笙默考试管理系统-MyExamTest--calculagra …...

Mysql面试突击班索引,事务与锁

Mysql面试突击班索引,事务与锁 1.为什么Mysql要使用B树做为索引而不用B树 B树能显著减少IO次数,提高效率B树的查询效率更加稳定,因为数据放在叶子节点B树能提高范围查询的效率,因为叶子节点指向下一个叶子节点B树采取顺序读 2.…...

数据结构——AVL树

文章目录 一.AVL树的定义二.AVL树的插入三.插入后更新平衡因子四.AVL树的旋转1.左单旋2.右单旋3.先左单旋再右单旋4.先右单旋再左单旋 五.AVL树的性能分析六.检查是否满足AVL树七.源码 一.AVL树的定义 二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉…...

AI写作宝有哪些,分享两种AI写作工具

AI写作宝是一种基于人工智能技术的写作辅助工具。它可以根据用户输入的关键词和主题快速生成文章。AI写作宝可以为用户节省大量的时间和精力,帮助用户快速生成高质量的文章。今天就为大家推荐两款AI写作宝: 一、AI创作家 AI创作家是一款基于人工智能技…...

【uniapp 控制页面滑动速度】

可以使用 uni-app 提供的 onTouchMove 事件来控制页面滑动速度。 可以在 onTouchMove 事件方法中使用 event.deltaY 计算页面滑动的速度,然后根据需要来调整速度值,最后通过 event.preventDefault() 阻止默认的滑动行为,从而实现控制页面滑动…...

7-24 整数的分类处理 (20 分)

7-24 整数的分类处理 (20 分) 给定 N 个正整数,要求你从中得到下列三种计算结果: A1 能被 3 整除的最大整数 A2 存在整数 K 使之可以表示为 3K1 的整数的个数 A3 存在整数 K 使之可以表示为 3K2 的所有整数的平均值(精确到小数…...

MYSQL事务同时修改单条记录

疑问:Mysql多事务默认情况下,同时修改同一条记录运行修改吗?是否要手动加上for update行锁。 猜想:MySQL 会自动对涉及的数据行加上写锁(排他锁),以确保数据的一致性和隔离性。这是在默认的事务…...

安装skywalking并集成到微服务项目

文章目录 一、前言二、介绍1. 架构 三、安装skywalking服务端四、启动skywalking服务端五、微服务项目开发注册中心网关服务商品服务订单服务支付服务测试 六、下载java客户端七、微服务集成skywalking客户端1. idea启动2. 命令行启动3. 集成效果4. 服务实例5. 修改服务实例名称…...

一支笔,一双手,一道力扣(Leetcode)做一宿

文章目录 一、分享自己相关的经历二、分析可能存在的问题三、根据问题进行分解或建立思维导图四、分享好用的刷题网站并进行介绍 一、分享自己相关的经历 我是一名计算机专业的学生,之前在学习算法和数据结构时,对于简单题目还算能够顺利地刷过去。但是…...

今天开始学爬虫1

1.1:import urllib错误 module urllib has no attribute request应该import urllib.requestimport urllib.requesturlhttp://www.baidu.com/ responseurllib.request.urlopen(url) contentresponse.read().decode(utf-8) print(content)2.1#返回字节 contentrespons…...

告别数据壁垒:用ArcGIS Editor for OSM插件,5分钟搞定OSM数据下载与本地编辑

告别数据壁垒:用ArcGIS Editor for OSM插件,5分钟搞定OSM数据下载与本地编辑 在空间数据分析领域,OpenStreetMap(OSM)作为开放的全球地理数据库,已成为许多GIS从业者的重要数据来源。然而,传统O…...

主从结合,安全互联:Anybus工业通信解决方案全栈升级

HMS亮相2026 PROFINET技术路演杭州站,展出全新Anybus SoM及全栈PROFINET方案,助力设备商应对CRA与机械法规双重合规挑战。 5月14日,由PI China主办的2026 PROFINET技术路演(杭州站)在西玥酒店圆满举行。HMS华东区OEM销…...

AArch64虚拟内存系统架构与硬件自动更新机制详解

1. AArch64虚拟内存系统架构概述AArch64是ARMv8及ARMv9架构的64位执行状态,其虚拟内存系统架构(Virtual Memory System Architecture)是现代ARM处理器的核心组成部分。这套系统通过多级页表机制实现虚拟地址到物理地址的转换,为操…...

压接 vs 焊接:高速连接器组装工艺的选型指南与实战对比

摘要/前言在通信设备、工业控制及数据中心硬件设计中,连接器的组装工艺选择直接影响产品的可靠性、可维护性与生产良率。压接(Press-Fit)与焊接(Soldering)是当前通孔连接器最主要的两种电气互连方式。压接依靠过盈配合…...

C++中函数对象之重载 operator()

如大家所熟悉的,‌重载 operator()‌ 是 C 中一种特殊机制,允许类的对象像函数一样被调用。这种对象被称为 ‌函数对象(functor)‌ 或 ‌仿函数‌。核心要点‌语法形式‌:在类中定义名为 operator() 的成员函数。‌调用…...

诺丽果汁终极选购指南——五大品牌全维度对比

我们聊过挑选诺丽果汁需要“看出身、看真材、看底牌”三大原则。今天,我们把这套标准真正落到实处,对市场上最具代表性的五个品牌——艾多美、美商大溪地、可可椰、美乐家、合百诺丽进行全维度对比,帮你看清每家的真实水平。快速结论放在最前…...

知网维普万方 AIGC 算法差异详解!TOP5 降 AI 软件帮你 3 个平台一次合格

知网维普万方 AIGC 算法差异详解!TOP5 降 AI 软件帮你 3 个平台一次合格 很多同学不知道——同一篇论文送知网、维普、万方测出来的 AI 率可能差 20-30 个点。3 个检测平台的算法逻辑完全不一样。 这篇文章把 3 个平台的算法差异拆给你看 TOP5 工具对位推荐——TOP…...

Arm Ethos-U65 NPU性能监控单元(PMU)架构与应用解析

1. Arm Ethos-U65 NPU性能监控单元架构解析 性能监控单元(PMU)是现代处理器架构中不可或缺的调试与分析模块,尤其在AI加速器领域更是性能调优的关键工具。Arm Ethos-U65 NPU作为面向嵌入式设备的神经网络处理器,其PMU设计充分考虑…...

2026年制造业员工入转调离全流程自动化趋势?——从“系统孤岛”到“Agent全闭环”的效能革命

2026年,全球制造业正处于从“设备自动化”向“组织智能化”跨越的关键拐点。 随着人口红利消退与用工结构性矛盾加剧,工厂对于人力资源的精准配置已不仅是行政命题,而是直接影响产线柔性与交付周期的核心生产力命题。 传统的HR管理模式在面对…...