第一次接触Graph WaveNet时,最让人头疼的就是环境配置问题。记得我第一次在Colab上尝试运行这个项目时,明明按照文档操作却频频报错,光是解决Python版本和PyTorch兼容性问题就花了整整一个下午。下面把我踩过的坑和解决方案完整分享给大家。
在Colab上配置Python 3.6环境需要特殊技巧,因为默认环境已经是Python 3.7+。经过多次尝试,我发现最稳定的组合是:
bash复制%%bash
MINICONDA_INSTALLER_SCRIPT=Miniconda3-4.5.4-Linux-x86_64.sh
MINICONDA_PREFIX=/usr/local
wget https://repo.continuum.io/miniconda/$MINICONDA_INSTALLER_SCRIPT
chmod +x $MINICONDA_INSTALLER_SCRIPT
./$MINICONDA_INSTALLER_SCRIPT -b -f -p $MINICONDA_PREFIX
安装完成后,需要确认环境变量是否生效:
bash复制!which python
!python --version
如果显示还是系统默认的Python版本,可以尝试手动添加路径:
python复制import sys
sys.path.append("/usr/local/lib/python3.6/site-packages")
PyTorch版本的选择直接影响模型能否正常运行。经过测试,torch==1.10.2与Python 3.6的兼容性最好:
bash复制!pip install torch==1.10.2+cpu -f https://download.pytorch.org/whl/torch_stable.html
如果是GPU环境,建议使用:
bash复制!pip install torch==1.10.2+cu113 -f https://download.pytorch.org/whl/torch_stable.html
其他必备依赖包括:
bash复制!pip install numpy pandas matplotlib scipy tables
特别注意:h5py的版本不能太高,建议锁定在2.10.0,否则读取数据时会报错。
Graph WaveNet需要使用DCRNN项目中的METR-LA数据集。直接从GitHub克隆仓库:
bash复制!git clone https://github.com/liyaguang/DCRNN.git
关键数据文件路径:
/DCRNN-master/data/metr-la.h5/DCRNN-master/data/sensor_graph/adj_mx.pkl运行数据生成脚本时要注意输出目录的权限问题:
python复制!python generate_training_data.py \
--output_dir=data/METR-LA \
--traffic_df_filename=../DCRNN-master/data/metr-la.h5
常见问题排查:
!mkdir -p data/METR-LA数据集包含三个关键部分:
数据标准化处理在load_dataset函数中完成,使用StandardScaler对特征维度进行归一化。
正确的训练命令应该包含所有必要参数:
bash复制!python train.py \
--adjdata ../DCRNN-master/data/sensor_graph/adj_mx.pkl \
--data data/METR-LA \
--device cuda:0 \
--gcn_bool \
--addaptadj \
--epochs 100
关键参数解析:
--gcn_bool: 启用图卷积层--addaptadj: 使用自适应邻接矩阵--aptonly: 仅使用自适应邻接矩阵(无预定义图)--randomadj: 随机初始化邻接矩阵在engine.py中,训练循环主要包含以下步骤:
python复制for epoch in range(epochs):
model.train()
for x, y in train_loader:
optimizer.zero_grad()
output = model(x)
loss = criterion(output, y)
loss.backward()
optimizer.step()
重要提示:如果发现loss不下降,可以尝试:
模型会自动保存到指定路径:
python复制torch.save(model.state_dict(), f"{save_path}_epoch_{epoch}.pth")
加载最佳模型进行测试:
python复制model.load_state_dict(torch.load(best_model_path))
model.eval()
with torch.no_grad():
predictions = model(test_data)
错误1:Expected 2D (unbatched) or 3D (batched) input to conv1d
解决方案:
错误2:KeyError: 'scaler'
解决方法:
python复制scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=10, gamma=0.1)
python复制scaler = torch.cuda.amp.GradScaler()
with torch.cuda.amp.autocast():
output = model(input)
loss = criterion(output, target)
scaler.scale(loss).backward()
scaler.step(optimizer)
scaler.update()
训练完成后,可以使用以下代码绘制预测效果:
python复制import matplotlib.pyplot as plt
plt.figure(figsize=(15,5))
plt.plot(real_values[:100,0,0], label='Ground Truth')
plt.plot(predictions[:100,0,0], label='Prediction')
plt.legend()
plt.show()
对于交通预测任务,重点关注以下指标:
完整的训练过程通常需要2-4小时(T4 GPU),建议使用Colab Pro以获得更稳定的GPU资源。如果训练中断,可以从最近的checkpoint恢复:
bash复制!python train.py --resume path/to/checkpoint.pth