欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 文化 > 【PYG】使用data_list和dataset创建数据集有什么不同

【PYG】使用data_list和dataset创建数据集有什么不同

2025/3/19 13:45:24 来源:https://blog.csdn.net/xiong_xin/article/details/140081410  浏览:    关键词:【PYG】使用data_list和dataset创建数据集有什么不同
  • 观前提醒:包含chatgpt辅助创作

data_listdataset 在图数据处理中的区别主要在于数据的存储和加载方式,以及它们如何与数据加载器(如 DataLoaderDenseDataLoader)交互。

data_list

  • 定义data_list 是一个包含多个 Data 对象的列表,每个 Data 对象表示一个图数据。
  • 适用场景:适合处理小型数据集或在内存中可以完全加载的数据集。
  • 使用方式:直接将列表传递给数据加载器。每个 Data 对象独立存储,可以在数据加载时进行随机访问。

dataset

  • 定义dataset 是一个继承自 torch.utils.data.Dataset 的类,通常用来表示大型数据集,包含数据集的长度和获取数据项的方法。
  • 适用场景:适合处理大型数据集或需要动态生成数据项的数据集。
  • 使用方式:通过实现 __len____getitem__ 方法,使其与 DataLoader 等加载器兼容,支持批量加载和数据增强。

详细解释和示例

使用 data_list
import torch
from torch_geometric.data import Data
from torch_geometric.loader import DataLoader  # 更新导入路径# 创建一些示例图数据
data1 = Data(x=torch.randn(10, 8), edge_index=torch.tensor([[0, 1, 2, 3], [1, 2, 3, 4]], dtype=torch.long))
data2 = Data(x=torch.randn(10, 8), edge_index=torch.tensor([[0, 1, 2, 3], [1, 2, 3, 4]], dtype=torch.long))
data_list = [data1, data2]# 使用 DataLoader 加载数据
loader = DataLoader(data_list, batch_size=2, shuffle=True)# 迭代加载数据
for batch in loader:print("Batch node features shape:", batch.x.shape)print("Batch edge index shape:", batch.edge_index.shape)
使用 dataset
import torch
from torch_geometric.data import Data
from torch_geometric.loader import DataLoader  # 更新导入路径class MyDataset(torch.utils.data.Dataset):def __init__(self, num_samples, num_nodes, num_node_features):self.num_samples = num_samplesself.num_nodes = num_nodesself.num_node_features = num_node_featuresdef __len__(self):return self.num_samplesdef __getitem__(self, idx):x = torch.randn(self.num_nodes, self.num_node_features)edge_index = torch.tensor([[i, (i + 1) % self.num_nodes] for i in range(self.num_nodes)], dtype=torch.long).t().contiguous()y = torch.randn(self.num_nodes, 1)return Data(x=x, edge_index=edge_index, y=y)# 创建数据集
dataset = MyDataset(num_samples=100, num_nodes=10, num_node_features=8)# 使用 DataLoader 加载数据
loader = DataLoader(dataset, batch_size=32, shuffle=True)# 迭代加载数据
for batch in loader:print("Batch node features shape:", batch.x.shape)print("Batch edge index shape:", batch.edge_index.shape)

总结

  • data_list:适合处理内存中可以完全加载的小型数据集,直接将包含 Data 对象的列表传递给数据加载器。
  • dataset:适合处理大型数据集或需要动态生成数据项的数据集,通过继承 Dataset 类并实现 __len____getitem__ 方法,使其与数据加载器兼容。

在实际使用中,根据数据集的大小和特性选择合适的存储和加载方式。如果数据集较小且可以完全加载到内存中,使用 data_list 可能更简单直接。如果数据集较大或需要动态生成,使用 dataset 则更加灵活高效。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词