图神经网络:(图的分类)在MUTAG数据集上动手实现图神经网络

这篇具有很好参考价值的文章主要介绍了图神经网络:(图的分类)在MUTAG数据集上动手实现图神经网络。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

文章说明:
1)参考资料:PYG的文档。文档超链。
2)博主水平不高,如有错误,还望批评指正。
3)我在百度网盘上传这篇文章的jupyter notebook以及有关文献。提取码8848。

MUTAG数据集说明

MUTAG数据集是一个分子图形数据集。每个分子包含一个二元标签表示该分子是否为一种类固醇化合物。我们的任务是进行一个二分类的任务,判断某个分子是否类固醇化合物。
导入依赖

from torch_geometric.datasets import TUDataset
import torch

导入数据

dataset=TUDataset(root='C:/Users/19216/Desktop/project/Project1/Graph_Classification/TUDataset',name='MUTAG')

打乱顺序,训测拆分

dataset=dataset.shuffle()
train_dataset=dataset[:150]
test_dataset=dataset[150:]

我们下面观察数据

图分类的常见手段

图神经网络:(图的分类)在MUTAG数据集上动手实现图神经网络
为充分利用GPU资源,我们使用如上方式。1)创建一个包含多个孤立图的超巨型图,2)特征矩阵简单连接。如上。优点如下:1)不同图间不会进行信息传递,2)稀疏矩阵保存不会占用内存。
导入依赖

from torch_geometric.loader import DataLoader

观察数据

train_loader=DataLoader(train_dataset,batch_size=64,shuffle=True)
test_loader=DataLoader(test_dataset,batch_size=64,shuffle=False)
for step,data in enumerate(train_loader):
    print(f'Step {step + 1}:')
    print('=======')
    print(f'Number of graphs in the current batch: {data.num_graphs}')
    print(data)
    print()
#输出如下:
#Step 1:
#=======
#Number of graphs in the current batch: 64
#DataBatch(edge_index=[2, 2626], x=[1187, 7], edge_attr=[2626, 4], y=[64], batch=[1187], ptr=[65])

#Step 2:
#=======
#Number of graphs in the current batch: 64
#DataBatch(edge_index=[2, 2448], x=[1107, 7], edge_attr=[2448, 4], y=[64], batch=[1107], ptr=[65])

#Step 3:
#=======
#Number of graphs in the current batch: 22
#DataBatch(edge_index=[2, 978], x=[441, 7], edge_attr=[978, 4], y=[22], batch=[441], ptr=[23])

图分类的基本流程

1.多轮信息传递嵌入每个节点
2.聚合节点嵌入变为嵌入的图
3.训练一个嵌入图分类器
PS:第二步使用如下的公式: X G = 1 ∣ V ∣ ∑ v ∈ V x v L \mathcal{X_{\mathcal{G}}}=\frac{1}{|\mathcal{V}|}\sum_{\mathcal{v} \in \mathcal{V}}\mathcal{x}_{\mathcal{v}}^{L} XG=V1vVxvL。将每个节点的特征向量简单地加起来取个平均。
搭建模型

from torch_geometric.nn import global_mean_pool
from torch_geometric.nn import GraphConv
import torch.nn.functional as F
from torch.nn import Linear

class GCN(torch.nn.Module):
    
    def __init__(self,hidden_channels):
        super(GCN, self).__init__()
        self.conv1=GraphConv(dataset.num_node_features,hidden_channels)
        self.conv2=GraphConv(hidden_channels,hidden_channels)
        self.conv3=GraphConv(hidden_channels,hidden_channels)
        self.lin=Linear(hidden_channels,dataset.num_classes)

    def forward(self,x,edge_index,batch):
        x=self.conv1(x,edge_index)
        x=x.relu()
        x=self.conv2(x,edge_index)
        x=x.relu()
        x=self.conv3(x,edge_index)
        x=x.relu()
        x=global_mean_pool(x,batch)
        x=F.dropout(x,p=0.5,training=self.training)
        x=self.lin(x)
        return x

model=GCN(hidden_channels=64)
print(model)
#输出如下:
#GCN(
#  (conv1): GCNConv(7, 64)
#  (conv2): GCNConv(64, 64)
#  (conv3): GCNConv(64, 64)
#  (lin): Linear(in_features=64, out_features=2, bias=True)
#)

得出结果

model=GCN(hidden_channels=64)
optimizer=torch.optim.Adam(model.parameters(),lr=0.01)
criterion=torch.nn.CrossEntropyLoss()

optimizer=torch.optim.Adam(model.parameters(),lr=0.01)
criterion=torch.nn.CrossEntropyLoss()

def train():
    model.train()
    for data in train_loader: 
         out=model(data.x,data.edge_index,data.batch)
         loss=criterion(out,data.y)
         loss.backward()
         optimizer.step()
         optimizer.zero_grad()

def test(loader):
     model.eval()
     correct=0
     for data in loader:
         out=model(data.x,data.edge_index,data.batch)  
         pred=out.argmax(dim=1)
         correct+=int((pred==data.y).sum())
     return correct/len(loader.dataset)

for epoch in range(1,171):
    train()
    train_acc=test(train_loader)
    test_acc=test(test_loader)
    print(f'Epoch: {epoch:03d}, Train Acc: {train_acc:.4f}, Test Acc: {test_acc:.4f}')
#输出如下(这里只有最后一个):
#Epoch: 170, Train Acc: 0.9800, Test Acc: 0.8158

改进算法

第一篇文章:HOW POWERFUL ARE GRAPH NEURAL NETWORKS?
主要工作:1)他们证明了区分图结构方面,GNNs的表达能力小于等于Weisfeiler-Lehman test。2)他们具体指出什么情况两个算法是效果相同的 3)他们具体指出GNNs及变体能够识别哪些图的结构以及不能识别哪些图的结构。4)他们开发一种简单的GIN结构,效果等同Weisfeiler-Lehman test算法。
第二篇文章:Weisfeiler and Leman Go Neural: Higher-order Graph Neural Networks
主要工作:1)他们证明了区分图结构方面,GNNs的表达能力小于等于Weisfeiler-Lehman test。2)提出一种1-k-GNNs的算法。3)高阶的图属性对于分类回归十分重要。

WL-1伪代码:博主感觉这张图的比较好懂
图神经网络:(图的分类)在MUTAG数据集上动手实现图神经网络文章来源地址https://www.toymoban.com/news/detail-450516.html

到了这里,关于图神经网络:(图的分类)在MUTAG数据集上动手实现图神经网络的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 经典神经网络(7)DenseNet及其在Fashion-MNIST数据集上的应用

    DenseNet 不是通过更深或者更宽的结构,而是通过特征重用来提升网络的学习能力。 ResNet 的思想是:创建从“靠近输入的层” 到 “靠近输出的层” 的直连。而 DenseNet 做得更为彻底:将所有层以前馈的形式相连,这种网络因此称作 DenseNet 。 DenseNet 具有以下的优点: 缓解梯度

    2024年02月12日
    浏览(40)
  • DHVT:在小数据集上降低VIT与卷积神经网络之间差距,解决从零开始训练的问题

    VIT在归纳偏置方面存在空间相关性和信道表示的多样性两大缺陷。所以论文提出了动态混合视觉变压器(DHVT)来增强这两种感应偏差。 在空间方面,采用混合结构,将卷积集成到补丁嵌入和多层感知器模块中,迫使模型捕获令牌特征及其相邻特征。 在信道方面,引入了MLP中的

    2024年02月08日
    浏览(42)
  • 【数据分类】GRNN数据分类 广义回归神经网络数据分类【Matlab代码#30】

    数据分类问题是指根据给定的数据特征,将数据实例划分到不同的预定义类别或标签中的任务。它是机器学习和数据挖掘领域中常见的任务之一。数据分类问题的目标是通过对已知类别的数据进行学习,建立一个分类模型,然后利用该模型对未知数据进行分类预测。 数据分类

    2024年02月07日
    浏览(61)
  • (转载)BP 神经网络的数据分类(matlab实现)

     本博客的完整代码获取: MATLAB神经网络43个案例分析 - MATLAB Simulink Books         BP神经网络是一种多层前馈神经网络,该网络的主要特点是信号前向传递,误差反向传播。在前向传递中,输入信号从输人层经隐含层逐层处理,直至输出层。每一层的神经元状态只影响下一层神经

    2024年02月16日
    浏览(41)
  • 使用python里的神经网络进行数据分类预测

    在Python中使用神经网络进行数据分类预测,可以使用深度学习库如TensorFlow、Keras或PyTorch来实现。以下是使用Keras库的示例代码: Step 1: 准备数据 首先,准备用于训练和测试神经网络的数据集。将数据集分为输入特征和相应的目标类别。确保对数据进行适当处理和归一化。 S

    2024年02月16日
    浏览(36)
  • 卷积神经网络狗猫数据集的分类

    安装Anaconda 具体安装过程,请自行百度 配置TensorFlow、Keras 创建虚拟环境 输入下面命令: 激活环境 使用下面命令: 安装tensorflow和keras 使用下面命令: 安装完成后,我们需要在指定虚拟环境中新建一个 jupyter notebook 项目,执行如下命令即可将指定环境添加到 jupyter notebook 中

    2024年02月12日
    浏览(37)
  • 使用matlab里的神经网络进行数据分类预测

    在MATLAB中使用神经网络进行数据分类预测,你可以按照以下步骤进行: Step 1: 准备数据 首先,准备用于训练和测试神经网络的数据。将数据集分为输入特征和相应的目标类别。确保数据已经进行了适当的预处理和标准化。 Step 2: 创建并训练神经网络模型 使用MATLAB的Neural Net

    2024年02月16日
    浏览(46)
  • 【故障分类】基于注意力机制的卷积神经网络结合双向长短记忆神经网络CNN-BiLSTM-attention实现数据分类附matlab代码

    ntion机制加权 4. 加权后的特征进行分类 本文旨在实现一个通用的数据分类模型,可应用于不同领域的数据分类任务。 设计一个CNN网络结构,提取输入数据的特征 将特征序列输入到BiLSTM网络,进行时序建模 在BiLSTM的输出上应用注意力机制,关注重要特征 最后将加权特征输入

    2024年03月11日
    浏览(71)
  • matlab BP神经网络对iris数据集进行分类

    本文所用数据集👉👉👉iris分类数据集 maxminmap归一化函数和netff函数的输入矩阵都是==”行特征,列样本“==的格式,注意转置 BP实现分类时,Y为分类变量,预处理时需要将其转换成独热编码,sim后将得到的类别概率转换成分类数值,可通过以下函数实现: ind2vec:1×120 --

    2024年02月15日
    浏览(43)
  • 卷积神经网络|猫狗分类系列--导入kaggle猫狗数据集

    解决任何真实问题的重要一步是获取数据,Kaggle提供了大量不同数据科学问题的竞赛。 我们将从 https://www.kaggle.com/competitions/dogs-vs-cats/data 下载猫狗数据集,并对其进行一定的操作,以正确的导入到我们的计算机,为接下来的模型训练做准备。 数据集(带有标号的)包含250

    2024年01月23日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包