【PYG】定义数据集并使用DenseDataLoader进行加载

DenseDataLoaderDataLoader 在处理数据的方式上有所不同。DenseDataLoader 是专门用于处理稠密图数据的,而 DataLoader 通常用于处理稀疏图数据。在你的案例中,如果所有图的节点数和边数是固定的,可以使用 DenseDataLoader 进行更高效的批处理。

目前发现不同之处在于,Dense输入是一个邻接矩阵,打印出来向量是展开格式(batch_size, num_nodes, num_node_features),直接使用dataloader是(batch_size*num_nodes, num_node_features),这两种方式返回一个包含图数据的 Data 对象,包含特征矩阵和邻接矩 return Data(x=x, adj=self.adj_matrix, y=y)和return Data(x=x, edge_index=edge_index, y=y)

使用 DenseDataLoader

以下是如何使用 DenseDataLoader 来加载数据的完整代码示例:

1. 导入必要的库
import torch
from torch_geometric.data import Data
from torch_geometric.loader import DenseDataLoader
2. 定义 MyDataset
class MyDataset(torch.utils.data.Dataset):def __init__(self, num_samples, num_nodes, num_node_features):super(MyDataset, self).__init__()self.num_samples = num_samplesself.num_nodes = num_nodesself.num_node_features = num_node_features# 创建固定的邻接矩阵,这里简单使用环形图的邻接矩阵self.adj_matrix = torch.zeros((num_nodes, num_nodes), dtype=torch.float)for i in range(num_nodes):self.adj_matrix[i, (i + 1) % num_nodes] = 1self.adj_matrix[(i + 1) % num_nodes, i] = 1def __len__(self):return self.num_samplesdef __getitem__(self, idx):# 创建随机特征和标签,这里仅作示例x = torch.randn((self.num_nodes, self.num_node_features))y = torch.randn((self.num_nodes, 1))  # 每个节点一个标签# 返回一个包含图数据的 Data 对象,包含特征矩阵和邻接矩阵return Data(x=x, adj=self.adj_matrix, y=y)
3. 创建数据集和封装数据
# 参数设置
num_samples = 100  # 样本数
num_nodes = 10  # 每个图中的节点数
num_node_features = 8  # 每个节点的特征数# 创建数据集
dataset = MyDataset(num_samples, num_nodes, num_node_features)# 封装数据
data_list = [dataset[i] for i in range(num_samples)]
4. 使用 DenseDataLoader

使用 DenseDataLoader 加载数据集,并检查批次数据的形状。

# 创建 DenseDataLoader
loader = DenseDataLoader(data_list, batch_size=32, shuffle=True)# 从 DenseDataLoader 中获取一个批次的数据并查看其形状
for batch in loader:x = batch.x  # 形状为 (batch_size, num_nodes, num_node_features)adj = batch.adj  # 形状为 (batch_size, num_nodes, num_nodes)y = batch.y  # 形状为 (batch_size, num_nodes, 1)print("Batch node features shape:", x.shape)  # 期望输出形状为 (32, 10, 8)print("Batch adjacency matrix shape:", adj.shape)  # 期望输出形状为 (32, 10, 10)print("Batch labels shape:", y.shape)  # 期望输出形状为 (32, 10, 1)break  # 仅查看第一个批次的形状

解释

  1. 导入库

    • 导入 torchtorch_geometric.data 中的 Data
    • 导入 DenseDataLoader
  2. 定义 MyDataset

    • __init__ 方法初始化数据集参数,创建固定的邻接矩阵。
    • __len__ 方法返回数据集的样本数量。
    • __getitem__ 方法生成每个样本的随机节点特征和标签,并返回一个 Data 对象。
  3. 创建数据集和封装数据

    • 使用 MyDataset 类创建一个包含 100 个样本的数据集,每个样本包含 10 个节点,每个节点有 8 个特征。
    • 使用 data_list = [dataset[i] for i in range(num_samples)] 封装数据。
  4. 使用 DenseDataLoader

    • 使用 DenseDataLoader 加载 data_list,设置批次大小为 32,并进行随机打乱。
    • 在获取一个批次的数据时,检查 batch.xbatch.adjbatch.y 的形状,以确保其符合期望的三维形状。

通过这个完整的示例代码,你可以生成、封装和加载稠密图数据,并确保每个批次的数据形状保持正确。

  • 使用 data_list = [dataset[i] for i in range(num_samples)] 封装数据这一步其实不需要

完整代码

import torch
from torch_geometric.data import Data
from torch_geometric.loader import DenseDataLoaderclass MyDataset(torch.utils.data.Dataset):def __init__(self, num_samples, num_nodes, num_node_features):super(MyDataset, self).__init__()self.num_samples = num_samplesself.num_nodes = num_nodesself.num_node_features = num_node_features# 创建固定的邻接矩阵,这里简单使用环形图的邻接矩阵self.adj_matrix = torch.zeros((num_nodes, num_nodes), dtype=torch.float)for i in range(num_nodes):self.adj_matrix[i, (i + 1) % num_nodes] = 1self.adj_matrix[(i + 1) % num_nodes, i] = 1def __len__(self):return self.num_samplesdef __getitem__(self, idx):# 创建随机特征和标签,这里仅作示例x = torch.randn((self.num_nodes, self.num_node_features))y = torch.randn((self.num_nodes, 1))  # 每个节点一个标签# 返回一个包含图数据的 Data 对象,包含特征矩阵和邻接矩阵return Data(x=x, adj=self.adj_matrix, y=y)# 参数设置
num_samples = 100  # 样本数
num_nodes = 10  # 每个图中的节点数
num_node_features = 8  # 每个节点的特征数# 创建数据集
dataset = MyDataset(num_samples, num_nodes, num_node_features)# 创建 DenseDataLoader
loader = DenseDataLoader(dataset, batch_size=32, shuffle=True)# 从 DenseDataLoader 中获取一个批次的数据并查看其形状
for batch in loader:x = batch.x  # 形状为 (batch_size, num_nodes, num_node_features)adj = batch.adj  # 形状为 (batch_size, num_nodes, num_nodes)y = batch.y  # 形状为 (batch_size, num_nodes, 1)print("Batch node features shape:", x.shape)  # 期望输出形状为 (32, 10, 8)print("Batch adjacency matrix shape:", adj.shape)  # 期望输出形状为 (32, 10, 10)print("Batch labels shape:", y.shape)  # 期望输出形状为 (32, 10, 1)break  # 仅查看第一个批次的形状

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

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

相关文章

柯桥法语学习|学点黑话!法语中的「钱」可不止“argent”

法语中有哪些关于钱的“黑话”?一起来和法语君看一下吧! bl 之所以繁杂,是因为这些词在诞生之初,不止涉及一个故事,而是一大堆小轶事,以“bl”指钱的起源如迷宫般复杂。 根据Trsor de la langue frana15857…

VMware17安装Ubuntu20版本-保姆级别

首先需要安装好VMware和Ubuntu20的镜像,在网上搜索Ubuntu镜像下载即可,最后选择国内镜像站下载,这样更快点,然后打开VMware。 1.创建虚拟机: 2.选择自定义: 3.默认,继续下一步: 4.选…

kubuadm 方式部署 k8s 集群

准备三台机器 主机名IP地址CPU/内存角色K8S版本Docker版本k8s231192.168.99.2312C4Gmaster1.23.1720.10.24k8s232192.168.99.2322C4Gwoker1.23.1720.10.24k8s233192.168.99.2332C4Gwoker1.23.1720.10.24 需要在K8S集群各节点上面安装docker,如未安装则参考 …

江协科技51单片机学习- p21 LED点阵屏(8*8)

🚀write in front🚀 🔎大家好,我是黄桃罐头,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝​…

ASP.NET CORE应用针对IIS有哪两种部署模式?

一、ASP.NET CORE Core Module IIS其实也是按照管道的方式来处理请求的,但是IIS管道和ASP.NET CORE中间件管道有本质的不同。对于部署在IIS中的Web应用来说,从最初接收到请求到最终将响应发出去,这段处理流程被细分为一系列固定的步骤&#x…

Python pip install模块时C++编译环境问题

pip install模块时C编译环境问题 在接触和使用python后,常常会通过pip install命令安装第三方模块,大多数模块可以直接安装,但许多新同学仍会遇见某些模块需要实时编译后才能安装,如报错信息大概是缺乏C编译环境,本文则…

MTK7628+MT7612 加PA定频数据

1、硬件型号TR726A5G121-DPA PC9.02.0017。如下所示: 2、WIFI5.8 AC模式 42(5120MHz)信道,80带宽 3、WIFI5.8 AC模式 38(5190MHz)信道,40带宽 4、WIFI5.8 AC模式 36(5180 MHz&…

双指针-移动 0(easy)

目录 一、问题描述 二、解题思路 三、代码实现 四、刷题链接 一、问题描述 二、解题思路 1.开辟一个新数组,初始时元素都为0 2.设置两个指针,指针p1遍历旧数组,指针p2指向新数组的待修改位置 3.当p1指向非零元素时,将该元素…

Ubuntu20.04离线安装Docker

链接:https://pan.baidu.com/s/10OLClTHSIJY-_nbldcoFFQ 提取码:x4nt --来自百度网盘超级会员V4的分享 1.下载3个docker离线安装包,下载网址: https://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/amd64/ 2.把…

【阅读论文】-- IDmvis:面向1型糖尿病治疗决策支持的时序事件序列可视化

IDMVis: Temporal Event Sequence Visualization for Type 1 Diabetes Treatment Decision Support 摘要1 引言2 1 型糖尿病的背景3 相关工作3.1 时间事件序列可视化3.2 电子健康记录可视化3.3 1 型糖尿病可视化3.4 任务分析与抽象 4 数据抽象5 层次化任务抽象5.1 临床医生工作…

Python逻辑控制语句 之 判断语句--if else结构

1.if else 的介绍 if else :如果 ... 否则 .... 2.if else 的语法 if 判断条件: 判断条件成立,执行的代码 else: 判断条件不成立,执行的代码 (1)else 是关键字, 后⾯需要 冒号 (2)存在冒号…

Unity扩展编辑器功能的特性

1.添加分组标题 用于在Unity的Inspector视图中为属性或变量组创建一个自定义的标题或头部,有助于在Inspector中组织和分类不同的属性,使其更易于阅读和管理。 [Header("Common Properties")] public float MouseSensitivity 5; public float…

15 个适用于企业的生成式 AI 用例

作者:来自 Elastic Jennifer Klinger 关于生成式人工智能及其能做什么(和不能做什么)有很多讨论。生成式人工智能(例如大型语言模型 - LLMs)利用从大量训练数据中学习到的模式和结构来创建原创内容,而无需存…

解决“Duplicate keys detected: ‘ ‘.This may cause an update error.”问题

问题原因 出现“Duplicate keys detected”的错误,通常表示在v-for指令中使的:key绑定值有重复。 如果前端是静态数据,一般能自我避免:key绑定值有重复。如果前端是绑定的动态数据,那么需要另外提供一个唯一的键。 在这个例子中&#xff0c…

Spring+Vue项目部署

目录 一、需要的资源 二、步骤 1.首先要拥有一个服务器 2.项目准备 vue: 打包: 3.服务器装环境 文件上传 设置application.yml覆盖 添加启动和停止脚本 ​编辑 安装jdk1.8 安装nginx 安装mysql 报错:「ERR」1273-Unknown collation: utf8m…

2024年【广东省安全员A证第四批(主要负责人)】新版试题及广东省安全员A证第四批(主要负责人)考试试卷

题库来源:安全生产模拟考试一点通公众号小程序 2024年【广东省安全员A证第四批(主要负责人)】新版试题及广东省安全员A证第四批(主要负责人)考试试卷,包含广东省安全员A证第四批(主要负责人&am…

岗位实习最终篇(汇总)——人力资源管理系统(包含DDL,DML,视图,简单/复杂查询,触发器语句和存储过程语句)

DDL CREATE TABLE users (user_id INT AUTO_INCREMENT PRIMARY KEY COMMENT 员工ID,username VARCHAR(50) NOT NULL UNIQUE COMMENT 用户名,password VARCHAR(255) NOT NULL COMMENT 密码,first_name VARCHAR(50) NOT NULL COMMENT 名,last_name VARCHAR(50) NOT NULL COMMENT…

聊聊如何制定互联网产品测试策略

提起互联网产品测试,给人的第一感觉那就是一个字“快”,相比于传统行业的软件,更新周期快的一个多月一个版本,慢的半年或一年一个大版本,从测试的角度出发,制定产品的测试策略侧重点有所不一样,…

OVS:网桥的状态:fail_mode模式

目录 1.创建一个普通的ovs网桥不做任何配置 2.检测fail_mode值,默认为空 3.创建netns并配置sto网桥的两个普通端口并配置IP信息 4.默认情况下的两个端口下挂两个虚拟机v3,v4天然通信-ping-ok 5.修改网桥的fail_mode为standalone,原来的通信没有影响 6.修改了…

LLM端侧部署系列 | 手机上运行47B大模型?上交推理框架PowerInfer-2助力AI手机端侧部署

0. 引言 黄梅时节家家雨,青草池塘处处蛙。 有约不来过夜半,闲敲棋子落灯花。 当下,在移动设备上部署大型模型的趋势是愈演愈烈。Google推出了AI Core,使得Gemini Nano可以在智能手机上部署。此外,近期传闻苹果在iOS …