【GCN】 代码详解 (1) 如何运行【pytorch】可运行版本

请添加图片描述

Graph Convolutional Networks 代码详解

  • 前言
  • 0.引言
  • 1.环境配置
  • 2. 代码的运行
    • 2.1 报错处理
    • 2.2 运行结果
  • 3.总结

前言

在前文中,已经对图卷积神经网络(Graph Convolutional Neural Networks, GCN)的理论基础进行了深入探讨。接下来的章节将会进入新的阶段,将借助PyTorch,这一强大的深度学习框架,通过实战讲解来展示如何构建和训练一个图卷积神经网络。这一过程不仅将帮助读者巩固理论知识,更重要的是,它将引导读者迈出理论到实践的关键一步,从而在处理具有图结构数据的问题上实现质的飞跃。

在本章节中,我将主要介绍如何运行代码以获取计算结果。考虑到我的读者多为初学者,我认为在深入探讨代码的各种细节之前,首先了解如何简单地运行模型并查看其结果是非常必要的。这不仅可以帮助读者快速入门,还能对模型的工作流程有一个直观的理解。

这个原文的代码地址感兴趣的读者自行下载即可 https://github.com/tkipf/pygcn

在这里插入图片描述

😃当然要是觉得还不错的话,烦请点赞,收藏➕关注👍

0.引言

这个代码是作者提供的在 PyTorch 环境下实现和运行图卷积网络代码。具体参见 Thomas Kipf 的博客 Graph Convolutional Networks (2016)。

重点重点重点
此外,这份 PyTorch 实现与原始的 TensorFlow 版本(见此链接)存在一些细微差异。当前的 PyTorch 版本主要是为了概念验证,而不意在复现原论文中报告的结果。所以其复现出来的结果和原始论文中存在一定差距,在对当前代码讲解后,笔者会对差异部分进行分析,并教大家如何复现乱嗯中的实验结果

该实现使用的是 Cora 数据集,其主要是分成了两个文件,这里不做过多的解释在下一个章节详细分析代码部分会解释。

1.环境配置

如果你之前已经配置好环境这部分可以忽略掉

对于准备在特定环境下运行图卷积网络(GCNs)的开发者来说,理解并配置适合的系统要求是至关重要的一步。以下是详细的系统和软件环境要求,以确保GCNs可以正确安装和运行。

必需的软件和库:

  • PyTorch: 必须安装版本 0.4 或 0.5。PyTorch 是执行深度学习模型,特别是图卷积网络在本实现中不可或缺的核心库。
  • Python: 支持的版本为 2.7 或 3.6。Python 是运行此图卷积网络代码的基本环境。

Python 包依赖:
确保这些包在 Python 环境中被正确安装,是模型正常运行的前提。你可以通过运行以下命令来安装或验证这些依赖:

pip install numpy torch scipy

上述的指令如何使用呢???

当你需要安装 numpy, torch, 或 scipy 等 Python 库时,可以通过使用 pip 命令来完成安装。这是 Python 的包安装器,能够从 Python 包索引(PyPI)自动下载并安装软件包。下面是一步步指导如何使用这条安装命令:

在 Jupyter Notebook 中使用 pip 安装命令:

  1. 打开 Jupyter Notebook

    • 启动 Jupyter Notebook,通常通过在终端中输入 jupyter notebook 命令启动。
  2. 新建一个终端

    • 在 Jupyter Notebook 的界面中,找到菜单栏中的“New”(新建),然后选择“Terminal”(终端)。这会打开一个新的命令行界面。
  3. 执行安装命令

    • 在打开的终端中,复制并粘贴 pip install numpy torch scipy 命令,然后按回车键执行。

在 Visual Studio Code (VSCode) 或其他 IDE 中使用 pip 安装命令:

  1. 打开 IDE

    • 启动你的 IDE,如 Visual Studio Code。
  2. 打开终端

    • 在 VSCode 中,可以通过选择顶部菜单的“Terminal”(终端)> “New Terminal”(新建终端)来打开一个终端。
  3. 执行安装命令

    • 在终端中,粘贴 pip install numpy torch scipy 命令并回车执行。

这样,你所需要的包就会被下载并安装到你的 Python 环境中。安装完成后,你可以在任何 Python 程序或脚本中导入并使用这些库。

注意事项:

  • 确保你的 Python 环境配置正确,pip 命令针对的是正确的 Python 版本。
  • 如果你使用的是 Python 3,则可能需要使用 pip3 命令代替 pip
  • 如果在安装过程中遇到权限问题,可以尝试在命令前添加 sudo(在 Linux 或 macOS 中),例如 sudo pip install numpy torch scipy,以提升权限执行安装。

通过按照上述指导,你可以轻松地在各种环境中安装 Python 包,以便于进行后续的开发和研究工作。

2. 代码的运行

在这里我仅仅展示如何修改代码保证模型的正确运行,下面是代码的文件划分:

请添加图片描述

根据你的运行环境,操作方式会有所不同。下面提供了在两种常见环境中运行 train.py 文件的方法:

在 IDE(如 PyCharm, VSCode 等)中运行 train.py

  1. 打开 IDE

    • 启动你的 IDE(例如 Visual Studio Code, PyCharm 等)。
  2. 打开 train.py 文件

    • 在 IDE 中打开包含 train.py 的项目文件夹。然后从项目文件树中找到并点击 train.py 文件,打开它。
  3. 运行脚本

    • 大多数 IDE 都有一个运行按钮,通常显示为一个绿色的三角形图标。在打开了 train.py 文件的窗口中,点击这个运行按钮即可开始执行脚本。
    • 你也可以通过 IDE 的顶部菜单找到“运行”或者“调试”选项来执行脚本。

在 Jupyter Notebook 中运行 train.py

  1. train.py 转换为 Notebook 格式

    • 首先,你需要将 train.py 文件的内容转换为单独的代码单元。这可能需要手动将脚本中的代码段分割并复制到 Jupyter Notebook 的不同单元格中。
  2. 执行代码单元

    • 在 Jupyter Notebook 中,你可以逐个运行每个代码单元。点击一个单元格,然后使用键盘快捷键 Shift + Enter 或点击工具栏的运行按钮来执行该单元格中的代码。
    • 确保按照 train.py 脚本中代码的原始顺序来执行各个单元格。

这些步骤提供了在不同开发环境中运行 Python 脚本的灵活性,无论是直接在 IDE 中还是通过 Jupyter Notebook,都有助于实现代码的逐步运行和调试。根据你的具体需求和环境配置,选择最适合你的方法来运行和测试 train.py

2.1 报错处理

如果出现报错信息,ModuleNotFoundError: No module named 'pygcn'

解决方法1:

  • 确保当前工作目录正确:当你在终端或命令行界面运行脚本时,确保当前目录(工作目录)是项目的根目录。你可以在执行 Python 命令之前使用 cd 命令更改目录。
    cd /你下载代码的路径
    
    注意由于是github下载的所以会出现master的文件名修改,所以各位酌情思考下这个路径修改

解决方法2:
另外一种简单粗暴的解决方式就就是你将model.py和train。py文件下的from pygcn.utils import load_data, accuracy全部修改成from utils import load_data, accuracy。删除掉pygcn,然后再次运行即可。

  1. 修改导入语句
    打开 model.pytrain.py 文件,找到所有包含 from pygcn.utils import load_data, accuracy 的导入语句。

  2. 进行修改
    将这些导入语句修改为 from utils import load_data, accuracy。这样,Python 解释器会在当前目录(或根据 PYTHONPATH 环境变量设定的路径)下寻找名为 utils 的模块而不是 pygcn.utils

  3. 保存更改
    保存你所做的更改。

  4. 重新运行脚本
    在命令行或IDE中,重新运行 train.py 脚本以检查问题是否已解决。

通过这样的修改,你可以避免包导入路径错误的问题,并且使项目结构更为简洁。这种方法非常直接,有时候对于小型或个人项目而言是最快解决问题的方式。如果将来你需要将项目部署或分享给他人,也请确保所有文件的导入路径都被适当地设置,以便他人也能顺利运行。

2.2 运行结果

代码成功的可以运行了,下面是对代码的运行结果展示:
请添加图片描述
根据输出日志,我们可以对模型的训练和测试过程进行一些基本的分析和解读:

训练结果概览

  1. 训练过程

    • Epoch 199

      • 训练集上的损失(loss_train):0.4326
      • 训练集上的准确率(acc_train):92.14%
      • 验证集上的损失(loss_val):0.7013
      • 验证集上的准确率(acc_val):83.33%
      • 耗时:0.0165秒
    • Epoch 200(最后一个训练周期):

      • 训练集上的损失:0.4208
      • 训练集上的准确率:96.43%
      • 验证集上的损失:0.6993
      • 验证集上的准确率:83.33%
      • 耗时:0.0235秒
  2. 训练结束

    • 总体耗时:2.7204秒

测试结果

  • 测试集上的损失(loss):0.7198

  • 测试集上的准确率(accuracy):83.80%

  • 从上述数据可以看出,模型在训练集上的表现逐渐改善,最后一个周期的训练准确率达到了非常高的水平(96.43%)。这表明模型在学习训练数据方面表现良好。

  • 验证集和测试集的准确率均稳定在83.33%到83.80%之间,表明模型在未见过的数据上也具有较好的泛化能力。

  • 注意到验证集的损失在训练过程的最后略有下降,这是一个良好的迹象,说明模型并未出现严重的过拟合。

此外,总体上模型的训练时间非常短(约2.7秒),这可能是因为数据集较小或模型结构较简单。如果在更大的数据集上或使用更复杂的模型结构,需要进一步评估训练时间和资源消耗。各位可以通过调整网络的结构运行不断的查看对代码进行修改找到属于自己模型。其实看过原始论文的读者一定会意外为什么这个torch版本的GCN测试结果这么好,似乎不准确,在这个的后续章节我会对这个代码问题做出解释,欢迎各位催更。

3.总结

现阶段我们已经全面介绍了模型的运行方法及GCN的理论基础。在接下来的篇章中,我们将深入探索该模型及相关论文中的核心架构和代码实现。

对于对这一主题感兴趣的读者来说,此部分将提供一个详细的技术视角,帮助您理解模型是如何从基本理论出发,通过精确的数学建模和编程实现,以达到预期的机器学习任务效果的。解析主体架构不仅对于理解模型的工作原理至关重要,对于那些希望在此基础上进行改进或自定义应用的研究者和开发者也极具价值。

如果你对此感兴趣,不妨点赞、收藏并关注,这是对我工作的最大支持和鼓励。非常感谢!如果有任何问题,欢迎随时私信我。期待与你的互动!
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于 PyTorch 从零手搓一个GPT Transformer 对话大模型

一、从零手实现 GPT Transformer 模型架构 近年来,大模型的发展势头迅猛,成为了人工智能领域的研究热点。大模型以其强大的语言理解和生成能力,在自然语言处理、机器翻译、文本生成等多个领域取得了显著的成果。但这些都离不开其背后的核心架…

做口播博主:真人出镜还是用数字人

做口播博主:真人出镜还是用数字人? 背景:数字人“风口”与流量的冷现实 数字人生成的视频逐渐流行,但真正拥有爆款流量的案例却寥寥无几;另一方面,真人出镜的创作又面临镜头感不足和成本高的难题。创作者究…

【C++篇】在秩序与混沌的交响乐中: STL之map容器的哲学探寻

文章目录 C map 容器详解:高效存储与快速查找前言第一章:C map 的概念1.1 map 的定义1.2 map 的特点 第二章:map 的构造方法2.1 常见构造函数2.1.1 示例:不同构造方法 2.2 相关文档 第三章:map 的常用操作3.1 插入操作…

基于Redis缓存机制实现高并发接口调试

创建接口 这里使用的是阿里云提供的接口服务直接做的测试,接口地址 curl http://localhost:8080/initData?tokenAppWithRedis 这里主要通过参数cacheFirstfalse和true来区分是否走缓存,正常的业务机制可能是通过后台代码逻辑自行控制的,这…

STM32ZET6-USART使用

一、原理说明 STM32自带通讯接口 通讯目的 通信方式: 全双工:通信时可以双方同时通信。 半双工:通信时同一时间只能一个设备发送数据,其他设备接收。 单工:只能一个设备发送到另一个设备,例如USART只有…

深度学习-张量相关

一. 张量的创建 张量简介 张量是pytorch的基本数据结构 张量,英文为Tensor,是机器学习的基本构建模块,是以数字方式表示数据的形式。 例如,图像可以表示为形状为 [3, 224, 224] 的张量,这意味着 [colour_channels, h…

图片表格文字模糊转电子版Excel的解决之道

在面对图片中的表格文字需要转化为电子版Excel或其它格式文本时,当前的主流方法是借助OCR(光学字符识别)技术。然而,OCR技术的识别效果深受成像质量,即图像文字的清晰度影响。图像越模糊,识别的难度越大&am…

LC:二分查找——杂记

文章目录 268. 丢失的数字162. 寻找峰值 268. 丢失的数字 LC将此题归类为二分查找,并且为简单题,下面记一下自己对这道题目的思考。 题目链接:268.丢失的数字 第一次看到这个题目,虽然标注的为简单,但肯定不能直接排…

增删改查基础项目总结

上篇中主要负责后端部分完成了一个简单的学习辅助系统部分界面,主要针对增删改查进行了练习,过程中遇到了一些细节上的问题以及当时做的时候去查阅的一些之前没有太注意到的额外知识,所以还需要进行进一步梳理,像登录校验的方法以…

YOLOv11融合[ECCV2024]自调制特征聚合SMFA模块及相关改进思路|YOLO改进最简教程

YOLOv11v10v8使用教程: YOLOv11入门到入土使用教程 YOLOv11改进汇总贴:YOLOv11及自研模型更新汇总 《SMFANet: A Lightweight Self-Modulation Feature Aggregation Network for Efficient Image Super-Resolution》 一、 模块介绍 论文链接&#xff1…

【51单片机】I2C总线详解 + AT24C02

学习使用的开发板:STC89C52RC/LE52RC 编程软件:Keil5 烧录软件:stc-isp 开发板实图: 文章目录 AT24C02介绍存储器 I2C总线介绍I2C时序结构数据帧AT24C02数据帧 编程实例 —— 按键控制数据大小&存储器写入读出 AT24C02介绍 …

Kafka 可观测性最佳实践

Kafka 概述 Kafka 是由 LinkedIn 开发一个分布式的基于发布订阅模式的消息队列,是一个实时数据处理系统,可以横向扩展。与 RabbitMQ、RockerMQ 等中间件一样拥有几大特点: 异步处理服务解耦流量削峰 监控 Kafka 是非常重要的,因…

智能制造基础- TPM(全面生产维护)

TPM 前言一、TPM二、TPM实施步骤三、 消除主要问题3.1 实施指南3.2 如何进行“主要问题”的消除? 四、自主维护4.1 实施指南4.2 主要工作内容4.3 如何进行“自主维护“ 五、计划维护5.1 实施指南5.2 如何实施计划维护 六、TPM 适当的 设备 设计5.1 实施指南5.2 如何…

数据库SQLite的使用

SQLite是一个C语言库,实现了一个小型、快速、独立、高可靠性、功能齐全的SQL数据库引擎。SQLite文件格式稳定、跨平台且向后兼容。SQLite源代码属于公共领域(public-domain),任何人都可以免费将其用于任何目的。源码地址:https://github.com/…

openpyxl处理Excel模板,带格式拷贝行和数据填入

本文中用openpyxl操作Excell 模板,进行行拷贝和数据填充. 主要涉及单元格格式的拷贝,合并单元格的拷贝,行高和列宽的处理. 将模板表格分为三部分,头部,中间循环填充部分,尾部.模板参数中设置头部高度,循环部分高度,剩余为尾部. 拷贝时先拷贝填充头部 ,然后根据数据循环拷贝填…

【FPGA开发】AXI-Lite总线协议解读、Verilog逻辑开发与仿真、Alex Forencich代码解读

目录 AXI是什么AXI是如何工作的AXI-Lite定义AXI-Lite的关键特性AXI-Lite信号列表AXI-Lite信号时序时钟和复位握手机制写请求通道(AW)写数据通道(W)写响应通道(B)读请求通道(AR)读数据…

zabbix 7.0 安装(服务器、前端、代理等)

https://www.zabbix.com/download 使用上面的地址,按教程执行命令安装

uniapp—android原生插件开发(2原生插件开发)

本篇文章从实战角度出发,将UniApp集成新大陆PDA设备RFID的全过程分为四部曲,涵盖环境搭建、插件开发、AAR打包、项目引入和功能调试。通过这份教程,轻松应对安卓原生插件开发与打包需求! ***环境问题移步至:uniapp—an…

【DCCMCI】多模态情感分析的层次去噪、表征解纠缠和双通道跨模态-上下文交互

abstract 多模态情感分析旨在从文本、声音和视觉数据等各种模态中提取情感线索,并对其进行操作,以确定数据中固有的情感极性。尽管在多模态情感分析方面取得了重大成就,但在处理模态表征中的噪声特征、消除模态表征之间情感信息的实质性差距…

【网络安全】线程安全分析及List遍历

未经许可,不得转载。 文章目录 线程线程安全问题遍历List的方式方式一方式二方式三方式四(Java 8)方式五(Java 8 Lambda)遍历List的同时操作ListVector是线程安全的?使用线程安全的CopyOnWriteArrayList使用线程安全的List.forEach线程 线程是程序执行的最小单位。一个程…