【图神经网络】 AM-GCN代码实战(1)【pytorch】代码可运行
AM-GCN 网络系列
- 代码实践部分
- 1.环境设置
- 2.代码运行指令
- 2.1 命令行执行代码
- 2.1 IDE执行(1)
- 2.2 IDE执行(2)
- 3.参数选择
- 4.总结
代码实践部分
本专栏致力于深入探讨图神经网络模型相关的学术论文,并通过具体的编程实验来深化理解。读者可以根据个人兴趣选择相关内容进行学习。在上一节中详细解读了 “AM-GCN” 这篇论文。对于那些对传统图神经网络感兴趣的读者,可以通过点击此处查阅更多相关内容。
在本章节中我们将讲解该论文的主体代码如何运行的问题,相信各位初学者在拿到代码最棘手的就是代码的运行
这个原文的代码地址感兴趣的读者自行下载即可 https://github.com/2578562306/AM-GCN
😃当然要是觉得还不错的话,烦请点赞,收藏➕关注👍
1.环境设置
- python == 3.7
- Pytorch == 1.1.0
- Numpy == 1.16.2
- SciPy == 1.3.1
- Networkx == 2.4
- scikit-learn == 0.21.3
2.代码运行指令
2.1 命令行执行代码
使用命令 python main.py -d dataset -l labelrate
运行程序。
- dataset:包括 [citeseer, uai, acm, BlogCatalog, flickr, coraml],必填。
- labelrate:包括 [20, 40, 60],必填。
例如:
python main.py -d citeseer -l 20
当初学者看到 python main.py -d dataset -l labelrate
运行程序。这个指令的时候都有点懵,这个和俺用pycharm的运行按钮咋不一样啊????这可怎么办
俺来教你怎么办,当你看到像 python main.py -d dataset -l labelrate
这样的命令行指令时,可能会觉得有些困惑,特别是如果你习惯了像 PyCharm 这样的集成开发环境(IDE)的话。严格按照下面的步骤和提示即可执行代码
1. 打开命令行界面:
- Windows:可以通过搜索并打开“命令提示符”或“PowerShell”。
- Mac:打开“终端”应用程序。
2. 导航到你的项目目录:
- 使用
cd
命令来改变当前目录到你的 Python 脚本所在的文件夹。例如,如果你的文件在“桌面”上的一个名为Project
的文件夹里,你可以输入命令:- 在 Windows 中:
cd Desktop\Project
- 在 Mac 中:
cd Desktop/Project
- 在 Windows 中:
3. 执行 Python 脚本:
- 确保你的系统已经安装了 Python。
- 注意下细节,运行哪个数据集就要先对哪个文件进行解压缩啊!!!!!!!!!
- dataset 选择了什么数据集就要对那个文件解压。
- 在命令行中输入:
python main.py -d dataset -l labelrate
,然后按回车键。替换dataset
和labelrate
为实际的参数值。
我这里举例子的运行代码:
运行结果如下:
出现epoch就是运行成功了,各位这里认真阅读下
接着咱们来分析下这个代码的实际表达了什么呢???
-
python:这是在命令行中调用 Python 解释器的命令。它告诉计算机,你将使用 Python 语言来运行接下来指定的脚本文件。
-
main.py:这是要运行的 Python 脚本文件的名称。这意味着在当前目录下应该有一个名为
main.py
的文件,这个文件包含了可以执行的 Python 代码。 -
-d dataset:
- -d:这是一个“选项”或“标志”,用于指示接下来的
dataset
是对-d
这个选项的具体设置值。在这里,-d
可能代表“数据集”(dataset)。 - dataset:这是
-d
选项的值,具体代表哪个数据集将被程序使用。例如,在程序中,可能可以选择citeseer
、acm
等作为数据集。
- -d:这是一个“选项”或“标志”,用于指示接下来的
-
-l labelrate:
- -l:这又是一个选项,用于指示接下来的
labelrate
是对-l
这个选项的值。这里,-l
可能代表“标签率”(label rate)。 - labelrate:这是
-l
选项的值,表示的可能是数据集中用于某种处理(如训练)的标签的比例或密度。通常数值如20
,40
,60
等,代表百分比或其他相关数值。
- -l:这又是一个选项,用于指示接下来的
当运行这条命令时,main.py
脚本将根据提供的数据集和标签率进行相应的操作,可能是数据处理、训练模型等。通过这种方式,用户可以灵活地为同一个程序提供不同的输入参数,实现不同的运行结果和功能。这种参数化的执行方式在进行实验和多种配置的测试时非常有用。
2.1 IDE执行(1)
上面展示了在命令行中执行,现在展示使用使用 IDE(如 VSCode、PyCharm 等)内置的终端来运行命令的方法。有很多优点,特别是对初学者而言:
1. 集中操作:
- 你可以在同一个软件界面中编写代码、运行命令以及查看输出,这样可以避免频繁地切换不同的应用窗口。
2. 即时访问代码:
- 在 IDE 的终端中运行脚本时,如果你发现了需要调整的代码,可以直接在相邻的代码编辑器中进行修改并再次运行,这提高了效率。
3. 错误追踪和调试更方便:
- 当命令行输出错误或异常时,你可以利用 IDE 提供的调试工具和代码高亮等功能,帮助更快地定位和解决问题。
其执行过程和命令行一致输入一样的命令就行,我这里展示下命令结果:
cd 文件夹目录main下的
python main.py -d citeseer -l 20
运行结果如下
使用这种方式,尤其是在项目开发过程中,可以大大提升工作效率和操作的便捷性。对于习惯了图形界面的用户来说,这种方法也更易于接受和使用。
2.2 IDE执行(2)
还有一种就是可以直接点击IDE中的运行代码,代码就会执行。这里就需要修改下main.py
文件下的参数。需要更改的部分主要是 argparse
的参数定义部分,下面的代码对原文中的代码进行修改,直接复制即可,为 dataset
和 labelrate
参数设置默认值:
import os
import argparse
import torch
from config import Configos.environ["CUDA_VISIBLE_DEVICES"] = "2"parse = argparse.ArgumentParser()
parse.add_argument("-d", "--dataset", help="dataset", type=str, required=False, default='citeseer')
parse.add_argument("-l", "--labelrate", help="labeled data for train per class", type=int, required=False, default=20)
args = parse.parse_args()config_file = "./config/" + str(args.labelrate) + str(args.dataset) + ".ini"
config = Config(config_file)cuda = not config.no_cuda and torch.cuda.is_available()
在这个修改后的代码中:
- 我为
--dataset
参数设置了默认值'citeseer'
。 - 我为
--labelrate
参数设置了默认值20
。 - 我将
required
参数从True
修改为False
,因为现在这些参数有默认值,不再是必需的。
现在,如果用户在运行脚本时没有指定 -d
或 -l
参数,程序将使用默认值运行。这样的设计可以让程序更容易被使用和理解,尤其是对于那些可能不熟悉如何给出所有命令行参数的用户。
这部分操作不理解的同学可以直接点这里,我在这里进行了详细的解释。
直接在mian文件下点启动按钮就可以执行了,这里的启动按钮在这里,点起来就行了。这个三角形▶️。查看运行结果就可以了。
3.参数选择
上面讲完了代码的执行,但是你看总是用Citeseer这个数据集你想换换胃口,换一个参数查看下其他的结果,仅仅需要更改dataset这个参数就可以了,下面是各种选择。
再次强调下,运行哪个数据集就要先对哪个文件进行解压缩啊!!!!!!!!!
- Citeseer:半监督分类与图卷积网络。
- UAI2010:社区检测和语义匹配的统一弱监督框架。
- ACM:异构图注意力网络。
- BlogCatalog, Flickr:属性网络的共嵌入。
- CoraFull:图的深度高斯嵌入:通过排名进行无监督感知学习。
使用说明:
请先解压数据文件夹再使用。文件夹中的文件如下:
citeseer/
├─citeseer.edge: 边文件。
├─citeseer.feature: 特征文件。
├─citeseer.label: 标签文件。
├─testL/C.txt: 测试文件。L/C,即每类预先标签,L/C = 20, 40, 60。
├─trainL/C.txt: 训练文件。L/C,即每类预先标签,L/C = 20, 40, 60。
└─knn
└─ck.txt: 特征图文件。k = 2~9
4.总结
相信各位在看完这样的解释后已经成功的运行完了代码。但是这也才是理解这个代码的第一步,接下来的章节中我们将会对代码中的具体细节以及文件的内容形式进行详细的解释,希望能够共同进步,还是老样子感兴趣的各位点赞收藏关注就是对我的最大动力,感谢感谢感谢。有问题欢迎私信哦。