图神经网络之四:InMemoryDataset基类与节点预测与边预测
2021/6/28 6:21:31
本文主要是介绍图神经网络之四:InMemoryDataset基类与节点预测与边预测,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
图神经网络之四:InMemoryDataset基类与节点预测与边预测
引言
这篇是datawhale组队学习之图神经网络第四篇,本笔记主要梳理课程的关键点,以及简单的代码实现。
InMemoryDataset基类
在PyG中,我们通过继承InMemoryDataset
类来自定义一个数据可全部存储到内存的数据集类。
首先我们给出InMemoryDataset
类表达式:
class InMemoryDataset(
root: Optional[str] = None,
transform: Optional[Callable] = None,
pre_transform: Optional[Callable] = None,
pre_filter: Optional[Callable] = None)
-
root:字符串类型,存储数据集的文件夹的路径 :
raw_dir
和processed_dir
(两个文件夹均为属性方法,自定义文件夹名称)raw_dir
:用于存储未处理的文件,从网络上下载的数据集原始文件会被存放到这里processed_dir
,处理后的数据被保存到这里,以后从此文件夹下加载文件即可获得Data
对象 -
transform
:函数类型,一个数据转换函数,它接收一个Data
对象并返回一个转换后的Data
对象。此函数在每一次数据获取过程中都会被执行。获取数据的函数首先使用此函数对Data
对象做转换,然后才返回数据。此函数应该用于数据增广(Data Augmentation)。该参数默认值为None
,表示不对数据做转换。 -
pre_transform
:函数类型,一个数据转换函数,它接收一个Data
对象并返回一个转换后的Data
对象。此函数在Data
对象被保存到文件前调用。因此它应该用于只执行一次的数据预处理。该参数默认值为None
,表示不做数据预处理。 -
pre_filter
:函数类型,一个检查数据是否要保留的函数,它接收一个Data
对象,返回此Data
对象是否应该被包含在最终的数据集中。此函数也在Data
对象被保存到文件前调用。该参数默认值为None
,表示不做数据检查,保留所有的数据。
通过继承InMemoryDataset
类来构造一个我们自己的数据集类,我们需要**实现
raw_file_names()
:这是一个属性方法,返回一个数据集原始文件的文件名列表,数据集原始文件应该能在raw_dir
文件夹中找到,否则调用process()
函数下载文件到raw_dir
文件夹。processed_file_names()
。这是一个属性方法,返回一个存储处理过的数据的文件的文件名列表,存储处理过的数据的文件应该能在processed_dir
文件夹中找到,否则调用process()
函数对样本做处理,然后保存处理过的数据到processed_dir
文件夹下的文件里。download()
: 下载数据集原始文件到raw_dir
文件夹。process()
: 处理数据,保存处理好的数据到processed_dir
文件夹下的文件。
import os.path as osp import torch from torch_geometric.data import (InMemoryDataset, download_url) from torch_geometric.io import read_planetoid_data class PlanetoidPubMed(InMemoryDataset): r""" 节点代表文章,边代表引用关系。 训练、验证和测试的划分通过二进制掩码给出。 参数: root (string): 存储数据集的文件夹的路径 transform (callable, optional): 数据转换函数,每一次获取数据时被调用。 pre_transform (callable, optional): 数据转换函数,数据保存到文件前被调用。 """ # url = 'https://github.com/kimiyoung/planetoid/raw/master/data' url = 'https://gitee.com/rongqinchen/planetoid/raw/master/data' # 如果github的链接不可用,请使用gitee的链接 def __init__(self, root, transform=None, pre_transform=None): super(PlanetoidPubMed, self).__init__(root, transform, pre_transform) self.data, self.slices = torch.load(self.processed_paths[0]) @property def raw_dir(self): return osp.join(self.root, 'raw') @property def processed_dir(self): return osp.join(self.root, 'processed') @property def raw_file_names(self): names = ['x', 'tx', 'allx', 'y', 'ty', 'ally', 'graph', 'test.index'] return ['ind.pubmed.{}'.format(name) for name in names] @property def processed_file_names(self): return 'data.pt' def download(self): for name in self.raw_file_names: download_url('{}/{}'.format(self.url, name), self.raw_dir) def process(self): data = read_planetoid_data(self.raw_dir, 'pubmed') data = data if self.pre_transform is None else self.pre_transform(data) torch.save(self.collate([data]), self.processed_paths[0]) def __repr__(self): return '{}()'.format(self.name)
dataset = PlanetoidPubMed('dataset/PlanetoidPubMed') print(dataset.num_classes) print(dataset[0].num_nodes) print(dataset[0].num_edges) print(dataset[0].num_features)
参考资料:
- DataWhale开源学习资料
- PyG官方文档
这篇关于图神经网络之四:InMemoryDataset基类与节点预测与边预测的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-24内网穿透资料入门教程
- 2024-12-24微服务资料入门指南
- 2024-12-24微信支付系统资料入门教程
- 2024-12-24微信支付资料详解:新手入门指南
- 2024-12-24Hbase资料:新手入门教程
- 2024-12-24Java部署资料
- 2024-12-24Java订单系统资料:新手入门教程
- 2024-12-24Java分布式资料入门教程
- 2024-12-24Java监控系统资料详解与入门教程
- 2024-12-24Java就业项目资料:新手入门必备教程