开源项目 GCN 使用教程
1. 项目的目录结构及介绍
gcn/
├── LICENSE
├── README.md
├── data/
│ ├── cora/
│ │ ├── ind.cora.allx
│ │ ├── ind.cora.ally
│ │ ├── ind.cora.graph
│ │ ├── ind.cora.test.index
│ │ ├── ind.cora.tx
│ │ ├── ind.cora.ty
│ │ ├── ind.cora.x
│ │ └── ind.cora.y
│ └── README.md
├── models/
│ ├── base_gcn.py
│ ├── gcn.py
│ └── layers.py
├── notebooks/
│ └── gcn.ipynb
├── setup.py
├── tests/
│ └── test_gcn.py
├── utils/
│ ├── __init__.py
│ ├── process.py
│ └── sparse.py
└── train.py
目录结构介绍
- LICENSE: 项目的许可证文件。
- README.md: 项目的基本介绍和使用说明。
- data/: 存放数据集的目录,例如 Cora 数据集。
- models/: 包含 GCN 模型的实现文件。
- notebooks/: Jupyter Notebook 文件,用于交互式演示和实验。
- setup.py: 项目的安装脚本。
- tests/: 测试文件,用于测试模型的正确性。
- utils/: 工具函数和辅助代码。
- train.py: 项目的启动文件,用于训练 GCN 模型。
2. 项目的启动文件介绍
train.py
train.py
是项目的启动文件,用于训练 GCN 模型。以下是该文件的主要功能和结构:
import time
import argparse
import numpy as np
import torch
import torch.nn.functional as F
import torch.optim as optim
from utils import load_data, accuracy
from models import GCN
# 参数解析
parser = argparse.ArgumentParser()
parser.add_argument('--no-cuda', action='store_true', default=False, help='Disables CUDA training.')
parser.add_argument('--fastmode', action='store_true', default=False, help='Validate during training pass.')
parser.add_argument('--seed', type=int, default=42, help='Random seed.')
parser.add_argument('--epochs', type=int, default=200, help='Number of epochs to train.')
parser.add_argument('--lr', type=float, default=0.01, help='Initial learning rate.')
parser.add_argument('--weight_decay', type=float, default=5e-4, help='Weight decay (L2 loss on parameters).')
parser.add_argument('--hidden', type=int, default=16, help='Number of hidden units.')
parser.add_argument('--dropout', type=float, default=0.5, help='Dropout rate (1 - keep probability).')
args = parser.parse_args()
args.cuda = not args.no_cuda and torch.cuda.is_available()
np.random.seed(args.seed)
torch.manual_seed(args.seed)
if args.cuda:
torch.cuda.manual_seed(args.seed)
# 加载数据
adj, features, labels, idx_train, idx_val, idx_test = load_data()
# 模型和优化器
model = GCN(nfeat=features.shape[1],
nhid=args.hidden,
nclass=labels.max().item() + 1,
dropout=args.dropout)
optimizer = optim.Adam(model.parameters(),
lr=args.lr, weight_decay=args.weight_decay)
if args.cuda:
model.cuda()
features = features.cuda()
adj = adj.cuda()
labels = labels.cuda()
idx_train = idx_train.cuda()
idx_val = idx_val.cuda()
idx_test = idx_test.cuda()
# 训练函数
def train(epoch):
t = time.time()
model.train()