图神经网络

现在是下午四点,我今天醒的太晚了,十二点才起床,然后打打炉石看看小说,一晃就到现在了。不过真的蛮有意思的。我得开始学习了,毕竟时间很紧张,我需要尽快达到毕业要求。
补充一下,其实喜欢看网文,一个是想象力,一个是yy,毕竟现实生活中得不到的网文里幻想一下也不错。
之前我在github上找个了简单的神经网络的项目看了看代码,现在我要去找一个图神经网络的项目。
我找了一下,但是我发现与其去找github上面的代码,不如直接问deep seek。

1

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

# 加载 Cora 数据集
dataset = Planetoid(root='data/Cora', name='Cora')
data = dataset[0]

# 定义 GCN 模型
class GCN(torch.nn.Module):
    def __init__(self, input_dim, hidden_dim, output_dim):
        super(GCN, self).__init__()
        self.conv1 = GCNConv(input_dim, hidden_dim)
        self.conv2 = GCNConv(hidden_dim, output_dim)

    def forward(self, x, edge_index):
        # 第一层 GCN
        x = self.conv1(x, edge_index)
        x = F.relu(x)
        x = F.dropout(x, training=self.training)
        # 第二层 GCN
        x = self.conv2(x, edge_index)
        return F.log_softmax(x, dim=1)

# 初始化模型
model = GCN(input_dim=dataset.num_features, hidden_dim=16, output_dim=dataset.num_classes)

# 定义优化器
optimizer = torch.optim.Adam(model.parameters(), lr=0.01, weight_decay=5e-4)

# 训练函数
def train():
    model.train()
    optimizer.zero_grad()
    out = model(data.x, data.edge_index)
    loss = F.nll_loss(out[data.train_mask], data.y[data.train_mask])
    loss.backward()
    optimizer.step()
    return loss.item()

# 测试函数
def test():
    model.eval()
    out = model(data.x, data.edge_index)
    pred = out.argmax(dim=1)
    correct = pred[data.test_mask] == data.y[data.test_mask]
    acc = int(correct.sum()) / int(data.test_mask.sum())
    return acc

# 训练和测试
for epoch in range(200):
    loss = train()
    if epoch % 10 == 0:
        acc = test()
        print(f'Epoch {epoch:03d}, Loss: {loss:.4f}, Test Acc: {acc:.4f}')

# 最终测试
acc = test()
print(f'Final Test Accuracy: {acc:.4f}')

2

我先把cora数据集下载到本地,赞美计算机,这个计算量人来干是不可能的。我感觉pycharm什么都能打开,比笔记本强多了。这个编号为35号的论文很强啊,像是后面的1033,103482什么的引用的都是它。
在这里插入图片描述
cora.content第一列很简单,无非就是论文编号嘛,后面的一大批01其实就是这1433个词会不会出现在论文里面,最后面还有一列,代表论文属于哪一类(一共有七个类)
在这里插入图片描述

3 planetoid方法

4

我终于看懂这个初始化模型是什么意思了

# 初始化模型
model = GCN(input_dim=dataset.num_features, hidden_dim=16, output_dim=dataset.num_classes)

其实神经网络的本质就是数学操作,矩阵操作,这个cora的节点特征矩阵就是一个2708行,1433列的二维矩阵,这个num_feature代表的是节点维度特征,这个model就是根据这1433个节点维度特征,这1433个关键词判断出这篇文章到底属于哪一类。所以这个模型就是通过两层图卷积,从1433映射为16再映射为7。

5

我看了这个图神经网络的代码,我就想说这和神经网络有什么区别,都是计算损失,都是反向传播。
我终于理解什么是边索引矩阵了,边索引矩阵要以一列为单位,上边是源点,下边是目标点。
区别在于神经网络是给每一个参数加权重,然后权重*参数,但是图神经网络是对矩阵进行操作
输出的时候也是如此,图神经网络要考虑到相邻的节点。

5

我看代码看的有点烦,我去刷刷申论行测什么的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值