PyG学习笔记1-INTRODUCTION BY EXAMPLE(二)

简介: PyG学习笔记1-INTRODUCTION BY EXAMPLE(二)

自定义 Dataset


尽管 PyG 已经包含许多有用的数据集,我们也可以通过继承torch_geometric.data.Dataset使用自己的数据集。提供 2 种不同的Dataset:


InMemoryDataset:使用这个Dataset会一次性把数据全部加载到内存中。

Dataset: 使用这个Dataset每次加载一个数据到内存中,比较常用。

我们需要在自定义的Dataset的初始化方法中传入数据存放的路径,然后 PyG 会在这个路径下再划分 2 个文件夹:


raw_dir: 存放原始数据的路径,一般是 csv、mat 等格式

processed_dir: 存放处理后的数据,一般是 pt 格式 ( 由我们重写process()方法实现)。


Transforms


transforms在计算机视觉领域是一种很常见的数据增强。PyG 有自己的transforms,输出是Data类型,输出也是Data类型。可以使用torch_geometric.transforms.Compose封装一系列的transforms。我们以 ShapeNet 数据集 (包含 17000 个 point clouds,每个 point 分类为 16 个类别的其中一个) 为例,我们可以使用transforms从 point clouds 生成最近邻图:

import torch_geometric.transforms as T
from torch_geometric.datasets import ShapeNet
dataset = ShapeNet(root='/tmp/ShapeNet', categories=['Airplane'],
                    pre_transform=T.KNNGraph(k=6))
# dataset[0]: Data(edge_index=[2, 15108], pos=[2518, 3], y=[2518])


还可以通过transform在一定范围内随机平移每个点,增加坐标上的扰动,做数据增强:

import torch_geometric.transforms as T
from torch_geometric.datasets import ShapeNet
dataset = ShapeNet(root='/tmp/ShapeNet', categories=['Airplane'],
                    pre_transform=T.KNNGraph(k=6),
                    transform=T.RandomTranslate(0.01))
# dataset[0]: Data(edge_index=[2, 15108], pos=[2518, 3], y=[2518])


模型训练


这里只是展示一个简单的 GCN 模型构造和训练过程,没有用到Dataset和DataLoader。


我们将使用一个简单的 GCN 层,并在 Cora 数据集上实验。有关 GCN 的更多内容,请查看**这篇博客**。


我们首先加载数据集:

from torch_geometric.datasets import Planetoid
dataset = Planetoid(root='/tmp/Cora', name='Cora')


然后定义 2 层的 GCN:

import torch
import torch.nn.functional as F
from torch_geometric.nn import GCNConv
class Net(torch.nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.conv1 = GCNConv(dataset.num_node_features, 16)
        self.conv2 = GCNConv(16, dataset.num_classes)
    def forward(self, data):
        x, edge_index = data.x, data.edge_index
        x = self.conv1(x, edge_index)
        x = F.relu(x)
        x = F.dropout(x, training=self.training)
        x = self.conv2(x, edge_index)
        return F.log_softmax(x, dim=1)


然后训练 200 个 epochs:

device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
model = Net().to(device)
data = dataset[0].to(device)
optimizer = torch.optim.Adam(model.parameters(), lr=0.01, weight_decay=5e-4)
model.train()
for epoch in range(200):
    optimizer.zero_grad()
    out = model(data)
    loss = F.nll_loss(out[data.train_mask], data.y[data.train_mask])
    loss.backward()
    optimizer.step()


最后在测试集上验证了模型的准确率:

model.eval()
_, pred = model(data).max(dim=1)
correct = float (pred[data.test_mask].eq(data.y[data.test_mask]).sum().item())
acc = correct / data.test_mask.sum().item()
print('Accuracy: {:.4f}'.format(acc))


参考链接


PyG Documentation — pytorch_geometric 2.0.2 documentation (pytorch-geometric.readthedocs.io)

目录
相关文章
|
机器学习/深度学习 数据可视化 数据挖掘
PyTorch Geometric (PyG) 入门教程
PyTorch Geometric是PyTorch1的几何图形学深度学习扩展库。本文旨在通过介绍PyTorch Geometric(PyG)中常用的方法等内容,为新手提供一个PyG的入门教程。
PyTorch Geometric (PyG) 入门教程
|
存储 机器学习/深度学习 PyTorch
PyG学习笔记1-INTRODUCTION BY EXAMPLE(一)
PyG学习笔记1-INTRODUCTION BY EXAMPLE(一)
308 0
PyG学习笔记1-INTRODUCTION BY EXAMPLE(一)
|
机器学习/深度学习 传感器 自然语言处理
论文笔记:SpectralFormer Rethinking Hyperspectral Image Classification With Transformers_外文翻译
 高光谱(HS)图像具有近似连续的光谱信息,能够通过捕获细微的光谱差异来精确识别物质。卷积神经网络(CNNs)由于具有良好的局部上下文建模能力,在HS图像分类中是一种强有力的特征提取器。然而,由于其固有的网络骨干网的限制,CNN不能很好地挖掘和表示谱特征的序列属性。
169 0
|
机器学习/深度学习 运维 算法
an introduction|学习笔记
快速学习 an introduction
an introduction|学习笔记
|
算法 数据挖掘 TensorFlow
Re3:读论文 PGE A Representation Learning Framework for Property Graphs
Re3:读论文 PGE A Representation Learning Framework for Property Graphs
Re3:读论文 PGE A Representation Learning Framework for Property Graphs
|
机器学习/深度学习 人工智能 搜索推荐
【推荐系统论文精读系列】(十五)--Examples-Rules Guided Deep Neural Network for Makeup Recommendation
在本文中,我们考虑了一个全自动补妆推荐系统,并提出了一种新的例子-规则引导的深度神经网络方法。该框架由三个阶段组成。首先,将与化妆相关的面部特征进行结构化编码。其次,这些面部特征被输入到示例中——规则引导的深度神经推荐模型,该模型将Before-After图像和化妆师知识两两结合使用。
162 0
【推荐系统论文精读系列】(十五)--Examples-Rules Guided Deep Neural Network for Makeup Recommendation
|
机器学习/深度学习 存储 自然语言处理
【推荐系统论文精读系列】(八)--Deep Crossing:Web-Scale Modeling without Manually Crafted Combinatorial Features
人工制作的组合特征是许多成功模型背后的 "秘诀"。然而,对于网络规模的应用来说,特征的种类和数量使得这些手工制作的特征在创建、维护和部署时成本高昂。本文提出了Deep Crossing模型,它是一个深度神经网络,可以自动结合特征来产生卓越的模型。Deep Crossing的输入是一组单独的特征,可以是密集的也可以是稀疏的。重要的交叉特征是由网络隐含地发现的,网络由嵌入和堆叠层以及残余单元的级联组成。
261 0
|
机器学习/深度学习 人工智能 搜索推荐
【推荐系统论文精读系列】(十二)--Neural Factorization Machines for Sparse Predictive Analytics
现在很多基于网站应用的预测任务都需要对类别进行建模,例如用户的ID、性别和职业等。为了使用通常的机器学习预测算法,需要将这些类别变量通过one-hot将其转化成二值特征,这就会导致合成的特征向量是高度稀疏的。为了有效学习这些稀疏数据,关键就是要解释不同特征之间的影响。
385 0
|
机器学习/深度学习 负载均衡 搜索推荐
【推荐系统论文精读系列】(十六)--Locally Connected Deep Learning Framework for Industrial-scale Recommender Systems
在这项工作中,我们提出了一个局部连接的深度学习框架推荐系统,该框架将DNN的模型复杂性降低了几个数量级。我们利用Wide& Deep模型的思想进一步扩展了框架。实验表明,该方法能在较短的运行时间内取得较好的效果。
137 0
【推荐系统论文精读系列】(十六)--Locally Connected Deep Learning Framework for Industrial-scale Recommender Systems
|
机器学习/深度学习 搜索推荐
【推荐系统论文精读系列】(十七)--Content-Aware Collaborative Music Recommendation Using Pre-trained Neural Networks
虽然内容是我们音乐收听喜好的基础,但音乐推荐的领先性能是通过基于协作过滤的方法实现的,这种方法利用了用户收听历史中的相似模式,而不是歌曲的音频内容。与此同时,协同过滤有一个众所周知的“冷启动”问题,也就是说,它无法处理没有人听过的新歌。将内容信息整合到协作过滤方法的努力在许多非音乐应用中都取得了成功,比如科学文章推荐。受相关工作的启发,我们将语义标签信息训练成一个神经网络作为内容模型,并将其作为协作过滤模型的先决条件。这样的系统仍然允许用户监听数据“为自己说话”。在百万歌曲数据集上进行了测试,结果表明该系统比协同过滤方法有更好的效果,并且在冷启动情况下具有良好的性能。
251 0
【推荐系统论文精读系列】(十七)--Content-Aware Collaborative Music Recommendation Using Pre-trained Neural Networks