【PYG】Planetoid()加载数据集中的预定义的属性和数据归一化

文章目录

    • Planetoid数据集属性
      • 访问这些属性
      • 示例输出
      • 解释
      • 使用数据集属性在模型中
    • NormalizeFeatures
      • 为什么要归一化特征
      • `NormalizeFeatures` 变换
      • 示例代码
      • 整体示例
      • 总结

在 PyTorch Geometric 中, Planetoid 类加载的数据集具有一些预定义的属性,用于访问有关数据集的信息。这些属性包含了节点数、边数、特征数和类别数等信息。

Planetoid数据集属性

以下是一些常用的 Planetoid 数据集属性:

  • num_classes:类别的数量(即分类任务中的类别数)。
  • num_features:每个节点的特征数。
  • num_nodes:节点的数量。
  • num_edges:边的数量。

访问这些属性

加载数据集之后,可以直接通过数据集对象访问这些属性。例如:

from torch_geometric.datasets import Planetoid
from torch_geometric.transforms import NormalizeFeatures# 加载Cora数据集,并应用NormalizeFeatures变换
dataset = Planetoid(root='/tmp/Cora', name='Cora', transform=NormalizeFeatures())
data = dataset[0]# 访问数据集属性
num_classes = dataset.num_classes
num_features = dataset.num_features
num_nodes = data.num_nodes
num_edges = data.num_edgesprint(f'Number of classes: {num_classes}')
print(f'Number of features: {num_features}')
print(f'Number of nodes: {num_nodes}')
print(f'Number of edges: {num_edges}')

示例输出

Number of classes: 7
Number of features: 1433
Number of nodes: 2708
Number of edges: 10556

解释

  • num_classes:在Cora数据集中,节点属于7个不同的类别。
  • num_features:每个节点有1433个特征。
  • num_nodes:图中总共有2708个节点。
  • num_edges:图中总共有10556条边。

这些属性帮助你了解数据集的基本结构和规模,从而更好地设计和调整模型。

使用数据集属性在模型中

这些属性在定义模型时非常有用,例如在GCN模型中:

from torch_geometric.nn import GCNConvclass GCN(torch.nn.Module):def __init__(self):super(GCN, self).__init__()self.conv1 = GCNConv(dataset.num_features, 16)self.conv2 = GCNConv(16, dataset.num_classes)def forward(self, data):x, edge_index = data.x, data.edge_indexx = self.conv1(x, edge_index)x = F.relu(x)x = F.dropout(x, training=self.training)x = self.conv2(x, edge_index)return x

这里,dataset.num_featuresdataset.num_classes 分别用作输入特征数和输出类别数,从而定义GCN层的输入和输出大小。


NormalizeFeatures

transform=NormalizeFeatures() 是在加载数据集时对数据进行特征归一化的一种方式。在 PyTorch Geometric 中,NormalizeFeatures 是一个常见的变换,用于将节点特征矩阵的每一行归一化。

为什么要归一化特征

归一化特征有助于提升图神经网络(GNN)的训练效果和收敛速度。归一化可以确保不同特征的数值范围相同,从而避免某些特征对模型训练产生过大的影响。

NormalizeFeatures 变换

NormalizeFeatures 变换的主要功能是将每个节点特征向量归一化,使得每个节点的特征向量的 L2 范数为 1。具体来说,如果节点 i i i的特征向量为 x i \mathbf{x}_i xi,则归一化后的特征向量为 x i / ∥ x i ∥ \mathbf{x}_i / \|\mathbf{x}_i\| xi/∥xi

示例代码

以下是如何在加载数据集时使用 NormalizeFeatures 进行特征归一化的示例代码:

import torch
from torch_geometric.datasets import Planetoid
from torch_geometric.transforms import NormalizeFeatures# 加载Cora数据集,并应用NormalizeFeatures变换
dataset = Planetoid(root='/tmp/Cora', name='Cora', transform=NormalizeFeatures())
data = dataset[0]# 打印归一化后的特征
print(data.x)

整体示例

结合之前的代码,这里是一个完整的示例,展示如何加载 Cora 数据集并对其进行特征归一化,然后训练和评估图神经网络模型:

import torch
import torch.nn.functional as F
from torch_geometric.nn import GCNConv
from torch_geometric.datasets import Planetoid
from torch_geometric.transforms import NormalizeFeatures# 加载Cora数据集,并应用NormalizeFeatures变换
dataset = Planetoid(root='/tmp/Cora', name='Cora', transform=NormalizeFeatures())
data = dataset[0]# 计算训练、验证和测试集的大小
num_train = data.train_mask.sum().item()
num_val = data.val_mask.sum().item()
num_test = data.test_mask.sum().item()print(f'Number of training nodes: {num_train}')
print(f'Number of validation nodes: {num_val}')
print(f'Number of test nodes: {num_test}')# 定义GCN模型
class GCN(torch.nn.Module):def __init__(self):super(GCN, 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_indexx = self.conv1(x, edge_index)x = F.relu(x)x = F.dropout(x, training=self.training)x = self.conv2(x, edge_index)return x  # 返回未归一化的logits# 初始化模型和优化器
model = GCN()
optimizer = torch.optim.Adam(model.parameters(), lr=0.01, weight_decay=5e-4)
data = data.to('cuda')
model = model.to('cuda')# 训练模型
def train():model.train()optimizer.zero_grad()out = model(data)  # out 的形状是 [num_nodes, num_classes]train_out = out[data.train_mask]  # 选择训练集节点的输出train_labels = data.y[data.train_mask]  # 选择训练集节点的标签loss = F.cross_entropy(train_out, train_labels)  # 计算交叉熵损失loss.backward()optimizer.step()return loss.item()# 评估模型
def test():model.eval()out = model(data)pred = out.argmax(dim=1)  # 提取预测类别correct = (pred[data.test_mask] == data.y[data.test_mask]).sum()acc = int(correct) / int(data.test_mask.sum())return accfor epoch in range(200):loss = train()acc = test()print(f'Epoch {epoch+1}, Loss: {loss:.4f}, Accuracy: {acc:.4f}')

总结

通过在加载数据集时应用 NormalizeFeatures 变换,你可以确保每个节点的特征向量被归一化,从而提高模型的训练效果和收敛速度。这在处理图神经网络任务时是一个很常见且有用的预处理步骤。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/39398.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java中的服务注册与发现原理与实现

Java中的服务注册与发现原理与实现 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将深入探讨Java中的服务注册与发现的原理及其实现方式。在现代分布式…

ESP32CAM物联网教学01

ESP32CAM物联网教学01 拍照 视频 这么小的一个开发板都带上摄像头了,能拍照?能视频吗?现在就跟着我做起来。 初识ESP32CAM 我们到淘宝搜索“ESP32Cam”,就能买到这样一块开发板。 ESP32Cam是双核处理器,提供WIFI和…

Cyuyanzhong的内存函数

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、memcpy函数的使用与模拟实现二、memmove函数的使用和模拟实现三、memset函数与memcmp函数的使用(一)、memset函数(内存块…

白骑士的C语言教学基础篇 1.4 函数与递归

系列目录 上一篇:白骑士的C语言教学基础篇 1.3 控制流 在这一篇内容中,我们将介绍C语言中的函数及其用法,包括函数的定义与调用、函数参数与返回值,以及递归函数。函数是C语言中最重要的结构之一,它允许我们将代码组织…

Linux shell编程学习笔记59: ps 获取系统进程信息,类似于Windows系统中的tasklist 命令

0 前言 系统进程信息是电脑网络信息安全检查中的一块重要内容,对于使用Linux和基于Linux作为操作系统的电脑来说,可以使用ps命令。 1 ps命令 的功能、格式和选项说明 1.1 ps命令 的功能 Linux 中的ps(意为:process status&…

Chrome导出cookie的实战教程

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

leetcode刷题:vector刷题

​ ​ 🔥个人主页:guoguoqiang. 🔥专栏:leetcode刷题 1.只出现一次的数字 这道题很简单,我们只需要遍历一次数组即可通过异或运算实现。(一个数与自身异或结果为0,任何数与0异或还是它本身) class Solut…

GitHub每日最火火火项目(7.2)

Asabeneh / 30 - Days - Of - Python:这是一个为期30天的Python编程挑战项目,旨在通过逐步引导的方式帮助学习者在30天内掌握Python编程语言。然而,实际完成这个挑战可能需要超过100天,学习者可以根据自己的节奏进行。该项目还提供…

WPF UI 3D 基本概念 点线三角面 相机对象 材质对象与贴图 3D地球 光源 变形处理 动作交互 辅助交互插件 系列三

WPF UI交互专题 平面图形 Path Drawing 绘图 渐变 Brush 矩阵 Transform 变形 阴影效果 模糊效果 自定义灰度去色效果 系列二-CSDN博客 1软件中的3D基本概念 WPF 中 3D 功能的设计初衷并非提供功能齐全的游戏开发平台。 WPF 中的 3D 图形内容封装在 Viewport3D 元素中&#x…

2024年华为OD机试真题-分披萨-C++-OD统一考试(C卷D卷)

2024年OD统一考试(D卷)完整题库:华为OD机试2024年最新题库(Python、JAVA、C++合集) 题目描述: “吃货”和“馋嘴”两人到披萨店点了一份铁盘(圆形)披萨,并嘱咐店员将披萨按放射状切成大小相同的偶数扇形小块。但是粗心服务员将披萨切成了每块大小都完全不同奇数块,且…

【linux命令】文件拷贝工具scp

scp是secure copy的缩写,用于linux之间复制文件和目录,基于ssh登录进行安全的远程文件拷贝命令。这个尤其在一些自动化活动中非常有用。 一、从本地复制到远程 # 语法 # scp -r -P remote_port local_folder remote_userremote_ip:remote_folder# 把本…

1+X 老年照护实训室:老年心理护理的重要性

随着人口老龄化的加剧,老年人口比例不断增加,老年心理健康问题日益凸显。老年心理护理作为老年照护的重要组成部分,对于老年人的身心健康具有重要意义。本文从老年心理护理的定义、重要性和实践意义等方面进行探讨,并提出了提高老…

WPF自定义模板--Button

属性&#xff1a; TemplateBinding&#xff1a;用于在ControlTemplate中绑定到控件的属性&#xff0c;例如Background、BorderBrush等。TargetType&#xff1a;指定该模板应用于哪种控件类型。在这个例子中&#xff0c;是Button。 标准的控件模板代码&#xff1a; <Style…

C# 实现 Modbus TCP 服务端客户端寄存器

以下是一个使用 C# 实现 Modbus TCP 服务端的示例代码。这个示例使用了 NModbus4 库&#xff0c;这是一个开源的 Modbus 库&#xff0c;支持 Modbus TCP 和 Modbus RTU 协议。 首先&#xff0c;您需要安装 NModbus4 库。您可以通过 NuGet 包管理器来安装&#xff1a; Install…

.NETCORE JWT 二

1.自动续期 using **.**.Common.Helper; using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.DependencyInjection; using Microsoft.IdentityModel.Tokens; using New…

借助 Aspose.Words,在 C# 中将 Word 转换为 Excel

有时我们会遇到需要将 Word 文档&#xff08;DOC 或 DOCX&#xff09;转换为 Excel 文档的任务。例如&#xff0c;这对于数据分析和报告很有用&#xff0c;或者如果您收到了任何文本数据并想将其转换为表格格式&#xff08;XLS 或 XLSX&#xff09;以便进一步工作。在本文中&am…

IAR工程目录移动报错(改变文件目录结构)

刚开始用IAR&#xff0c;记录一下。 工作中使用华大单片机&#xff0c;例程的文件目录结构太复杂了想精简一点。 1.如果原本的C文件相对工程文件&#xff08;.eww文件&#xff09;路径变化了&#xff0c;需要先打开工程&#xff0c;再将所有的.c文件右键Add添加进工程&#xf…

Day50

Spring AOP 概念 AOP全称为Aspect Oriented Programming&#xff0c;表示面向切面编程。切面指的是将那些与业务无关&#xff0c;但业务模块都需要使用的功能封装起来的技术。 AOP基本术语 **连接点&#xff08;Joinpoint&#xff09;&#xff1a;**连接点就是被拦截到的程序执…

Mojo学习

一种面向AI开发者的编程语言叫做Mojo。这种语言的设计目的是为了结合Python的易用性和C/C的性能&#xff0c;同时提供更好的支持给AI开发中常见的加速器&#xff0c;如GPU和其他异构计算设备。Mojo旨在成为一个高性能的编程环境&#xff0c;可以无缝地与Python生态系统的现有库…

第三篇——始计篇:诡计,就是引诱对方犯错误

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么&#xff1f; 四、总结五、升华 一、背景介绍 这一篇讲解了诡计&#xff0c;对于诡计的解释和定位&#xff1b;我们更应…