将 PyG 数据对象列表转换为 PyG 数据集?

问题描述 投票:0回答:1

我有一个 torch_geometric.data.Data 对象的 python 列表(每个对象代表一个图形)。我没有简单的方法来访问这些数据的原始文件:我只有列表。我需要将此数据对象列表转换为 torch_geometric.data.InMemoryDataset 或 torch_geometric.data.Dataset 对象,以便将其与我没有编写的更大的代码库集成。我该怎么做?

需要明确的是,我知道可以使用一系列 Data 对象来创建 torch_geometric.data.DataLoader 对象。但是,我特别需要一个 Dataset 对象,而不是 DataLoader 对象,因为较大的代码库在将 Dataset 对象转换为加载器之前会对它们执行一些额外的处理步骤。 我不明白为什么 PyG 让这变得如此困难。难道没有一个非常简单的方法可以做到这一点吗?

我尝试使用简单的 CustomDataset 类

class CustomDataset(InMemoryDataset): def __init__(self, data): super().__init__() self.data = data def __len__(self): return len(self.data) def __getitem__(self, idx): sample = self.data[idx] return sample

当尝试获取索引 0 处的 Data 对象时,它给了我一个 KeyIndex 错误。我还尝试了上述代码的一个版本,其中超类是 Dataset 而不是 InMemoryDataset,但我不知道如何进行整理方法工作。

machine-learning pytorch pytorch-geometric graphml
1个回答
0
投票

class CustomDataset(InMemoryDataset): def __init__(self, listOfDataObjects): super().__init__() self.data, self.slices = self.collate(listOfDataObjects) def __len__(self): return len(self.slices) def __getitem__(self, idx): sample = self.get(idx) return sample

数据对象列表的存储效率很低。这就是为什么大部分时间在初始化结束时进行排序的原因。要从数据中检索项目,您无法对整理后的 Data 对象建立索引,这将导致像您遇到的那样出现 KeyIndexError 。然而,Pytorch Geometric 
InMemoryDataset

实现了一个 get 方法,可以为您建立索引!他们使用

separate
方法来处理整理对象,并使用提供的切片将索引对象与整理对象分开。
    

© www.soinside.com 2019 - 2024. All rights reserved.