当前位置: 首页 > article >正文

GNN初探

  测试了下网上找的一篇代码,运行成功~

# import sys
# print(sys.path)

import torch
import torch.nn.functional as F
from torch_geometric.nn import GCNConv
from torch_geometric.datasets import Planetoid

# 加载并预处理Cora数据集
dataset_path = './dataset/cora'
dataset = Planetoid(root=dataset_path, name='Cora')
data = dataset[0]  # 取第一个图数据

# 打印数据集信息以确认加载成功
print(f'Dataset: {dataset}')
print(f'Number of graphs: {len(dataset)}')
print(f'Number of features: {dataset.num_node_features}')
print(f'Number of classes: {dataset.num_classes}')
print(data)


class GNN(torch.nn.Module):
    def __init__(self, num_features, num_classes):
        super(GNN, self).__init__()
        self.conv1 = GCNConv(num_features, 16)  # 第一个卷积层
        self.conv2 = GCNConv(16, 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 = self.conv2(x, edge_index)  # 第二个卷积
        return F.log_softmax(x, dim=1)  # 返回经过softmax的输出

model = GNN(num_features=dataset.num_node_features, num_classes=dataset.num_classes)
optimizer = torch.optim.Adam(model.parameters(), lr=0.01)
criterion = torch.nn.CrossEntropyLoss()

print(model)

# 训练过程
model.train()
for epoch in range(200):
    optimizer.zero_grad()  # 清除之前的梯度
    out = model(data)  # 前向传播  data如何传递给forward函数的?
    loss = criterion(out[data.train_mask], data.y[data.train_mask])  # 计算损失
    loss.backward()  # 反向传播
    optimizer.step()  # 更新参数
    if epoch % 20 == 0:
        print(f'Epoch {epoch}, Loss: {loss.item()}')

model.eval()
_, pred = model(data).max(dim=1)  # 获取预测结果
correct = pred[data.test_mask] == data.y[data.test_mask]  # 比较预测与真实标签
accuracy = int(correct.sum()) / int(data.test_mask.sum())  # 计算准确率
print(f'Test Accuracy: {accuracy:.4f}')

 遇到的问题:

1.python是脚本语言,没有编译过程,因此对齐要非常小心,创建model这一行干脆不要空格,否则class的结束部分会报错。

一般语句不需要缩进,顶行书写且不留空白。

当表示分支、循环、函数、类等含义,在if,while,for,def,class等保留字所在的完整语句后通过英文冒号(:)结尾,并在之后进行缩进,表示前后代码之间的从属关系

2.Plaintoid数据本地读取的问题,从github下载后放到/dataset/cora/raw下面,运行成功~

参考: 1 .GNNpython代码实现_mob649e816347dd的技术博客_51CTO博客

         2. https://zhuanlan.zhihu.com/p/452747749


http://www.kler.cn/a/401544.html

相关文章:

  • WebRTC 和 WebSocket
  • Java 核心技术卷 I 学习记录九
  • 内容占位符:Kinetic Loader HTML+CSS 使用CSS制作三角形原理
  • 智谱AI清影升级:引领AI视频进入音效新时代
  • Java 全栈知识体系
  • 通过shell脚本分析部署nginx网络服务
  • 2.tree of thought (使用LangChain解决N皇后问题)
  • 机器学习笔记 // 创建并训练DNN来拟合和预测序列数据
  • 运维面试题.云计算面试题之四.K8S
  • MFC线程-AfxBeginThread使用方法
  • SpringBoot常用的注解
  • 源码分析Spring Boot (v3.3.0)
  • Linux离线安装python相关包
  • driver.js实现页面操作指引
  • Linux-Samba
  • Axios交互
  • 疫情下的图书馆管理系统开发:Spring Boot
  • MATLAB调用Python自定义函数,极度方便好用
  • Bokeh实现大规模数据可视化的最佳实践
  • 单片机的基本组成与工作原理
  • Python自学之Colormaps指南
  • Spring学习笔记_41——@RequestBody
  • UniApp的Vue3版本中H5配置代理的最佳方法
  • 网络协议之FTP
  • Kafka进阶_1.生产消息
  • 从0开始学习Linux教程目录