# metrla_dcrnn **Repository Path**: lisheng2023/metrla_dcrnn ## Basic Information - **Project Name**: metrla_dcrnn - **Description**: dcrnn的mindspore实现 - **Primary Language**: Python - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2024-05-09 - **Last Updated**: 2025-04-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Diffusion Convolutional Recurrent Neural Network: Data-Driven Traffic Forecasting ---------------- ## DCRNN介绍 扩散卷积循环神经网络(Diffusion Convolutional Recurrent Neural Network, DCRNN)是一种基于扩散过程的交通预测模型,使用扩散卷积来捕捉空间依赖性,使用编码器-解码器架构来捕捉时间依赖性。所谓交通预测,即基于道路历史交通信息,对一定时期内的交通信息进行预测,包括但不限于交通速度、交通流量、交通密度等信息。 论文:Yaguang Li, Rose Yu, Cyrus Shahabi, Yan Liu, [Diffusion Convolutional Recurrent Neural Network: Data-Driven Traffic Forecasting](https://arxiv.org/abs/1707.01926), ICLR 2018. ## 模型架构 ![Diffusion Convolutional Recurrent Neural Network](./figures/dcrnn_model_architecture.png "Model Architecture") DCRNN模型采用编码器-解码器架构,编码器包含n个自定义的DCGRUCell层,解码器包含一个全连接层和n个自定义的DCGRUCell层,其中n可通过配置文件进行修改。DCGRUCell为改良后的门控循环单元,将其中的矩阵乘法替换为扩散卷积以提取数据的空间特征,并通过单元间的信息传递捕获数据中的时间相关性。 ## 环境要求 * mindspore * scipy>=0.19.0 * numpy>=1.12.1 * pandas>=0.19.2 * pyyaml * statsmodels * tables ## 数据准备 METR-LA(Metro Traffic Los Angeles)数据集是一个用于交通流量预测的常用数据集,主要用于研究和评估交通预测算法的性能。该数据集包含了洛杉矶地区的交通传感器数据,可以用于建立和验证交通流量预测模型。 METR-LA数据集以`metr-la.h5` 文件形式存储。 如下是一个示例: | | sensor_0 | sensor_1 | sensor_2 | sensor_n | |:-------------------:|:--------:|:--------:|:--------:|:--------:| | 2018/01/01 00:00:00 | 60.0 | 65.0 | 70.0 | ... | | 2018/01/01 00:05:00 | 61.0 | 64.0 | 65.0 | ... | | 2018/01/01 00:10:00 | 63.0 | 65.0 | 60.0 | ... | | ... | ... | ... | ... | ... | 运行以下命令以在`data/METR-LA/processed`处生成 train/test/val 数据集 ```bash python generate_data.py --dataset METR-LA ``` 为了构造传感器的路网图,通过计算两两传感器之间的路网距离来构建传感器的邻接矩阵,此处使用了带阈值的高斯核计算节点间的相似度,作为拓扑结构的邻接矩阵。 邻接矩阵数据`adj_mx.pkl`存储在`data/METR-LA/processed`下,通过设置阈值控制矩阵的稀疏化程度,距离超过阈值就认为两个节点不相关。 ## 模型训练 在`DCRNN`文件夹下运行以下命令可直接开启训练。如果需要修改模型训练的参数可直接通过`DCRNN/METRLA_DCRNN.conf`配置文件进行修改。 ```bash python DCRNN_mindspore_main.py ``` 训练过程中除了得到训练loss还会进行模型的测试得到MAE、RMSE和MAPE指标来衡量模型的训练效果。此外,训练过程会记录每个epoch的训练时间和测试推理时间,每轮次运行时间等有关信息会以如下形式展示: ![Diffusion Convolutional Recurrent Neural Network](./figures/training.png "Model Train") 运行log和最优模型ckpt文件将生成在`log/DCRNN/METRLA`文件下。 ## 模型评估 在完成训练流程后,模型在验证集上不同预测步长(horizon)的相关指标评估结果将以如下形式展示: ![Diffusion Convolutional Recurrent Neural Network](./figures/horizon_test.png "Model Test") 下表为DCRNN模型在测试数据集上分别预测未来5分钟、15分钟、30分钟、45分钟、60分钟(即horizon分别取3、6、9、12)的交通速度的评估指标: | Dataset | Metric | 5min | 15min | 30min | 60min | |:----------:|:--------:|:-------:|:-------:|:-------:|:--------:| | METR-LA | MAE | 2.31 | 2.77 | 3.14 | 3.59 | | | MAPE | 5.65% | 7.16% | 8.56% | 10.32% | | | RMSE | 4.03 | 5.36 | 6.43 | 7.57 | ```{.python .input} ```