在pyG上定义数据集

使用数据集的一般过程
PyG定义了使用数据的一般过程:从网络上下载数据原始文件;对数据原始文件做处理,为每一个图样本生成一个Data对象;对每一个Data对象执行数据处理,使其转换成新的Data对象;过滤Data对象;保存Data对象到文件;获取Data对象,在每一次获取Data对象时,都先对Data对象做数据变换(于是获取到的是数据变换后的Data对象)。实际中并非需要严格执行每一个步骤,以上步骤在特定的条件下可以被跳过,具体内容在下文里会学到。

创建内存数据集
为了创建torch_geometric.data.InMemoryDataset,需要实现四种基本方法:

torch_geometric.data.InMemoryDataset.raw_file_names():储存源文件的列表。如果这些文件都在raw_dir中找到了,就会跳过下载。
torch_geometric.data.InMemoryDataset.processed_file_names():储存处理后的文件列表,若全部找到就跳过预处理。
torch_geometric.data.InMemoryDataset.download():将raw_file_names中的文件列表,下载到raw_dir
torch_geometric.data.InMemoryDataset.process():处理原始数据,并保存到processed_dir
更详细的可以查看torch_geometric.data.
这四个函数中,最关键的是process(),在这个方法中,我们需要读取并且创建一系列的Data对象,然后将其保存到processed_dir. 由于保存一个巨大的python列表相当耗时,因此在保存之前,一般会将上述列表整理为一个巨大的Data对象,通过torch_geometric.data.InMemoryDataset.collate()来实现,collate()方法,可以理解为用空间换时间。
这个整理后的数据对象将所有的例子连接成一个大的数据对象data,然后返回了slices字典以从该对象中重构单个示例。最后,将构造函数中的这2个对象,加载到属性self.data 和slef.slices。

创建更大的数据集
为了创建不适合内存的数据集,可以使用torch_geometric.data.Dataset,它和torchvision的datasets是相当接近的。只是需要额外实现2个方法:

torch_geometric.data.Dataset.len():返回数据集中的样本数,
torch_geometric.data.Dataset.get():实现加载的单个图的逻辑。
在内部,torch_geometric.data.Dataset.getitem() 从torch_geometric.data.Dataset.get()获取数据对象,并根据transform中规定的转换方法进行转换。

你可能感兴趣的:(笔记)