project1中一条数据的通路

初始化处理 以网格 0(ID=0)为例读懂交通流预测,芝加哥卢普区(Loop)密歇根大道 + 亚当斯街交叉口(约 1 平方公里) 但是直接是从data_chicago.npy开始,也就是数据预处理(部分)、时空信息编码、静态嵌入,这三步全由作者编辑好了(不单单一人)。 数据起点:融合好的数据,[[0.8,1.0,0.0,0.9,1.0,0.625,…]…](形状是[8784,116]) 如何得出来这个融合好的数据呢? 对特征进行归一化处理,前面提到的三个txt文件。 对静态特征进行差值计算。 对时空信息进行编码。 原始静态特征和差值特征拼接。 拼接后的静态特征和时空信息融合,维度变成2D,通过全连接层 / 命令reshape/主成分PCA分析(将原本的27x3=81转化成58,其中全连接层最好)。 将上一步得到的数据和动态数据做一个拼接,维度变成4D,就得到了data_chicago(即将58+58拼接成116,这个也就是代码中的all_data,即数据的起点)。 为什么要对静态特征进行差值计算呢,静态特征差值计算不应该是0吗? 1. 首先,这里的静态特征应该叫固定特征,作者写这句话的时候认为这些特征都叫做静态或者固定特征; 2. 因为无论模型如何更改或者做什么操作,这些特征始终不变所以叫固定特征; 3. 所以它实际上是把动态特征做了差值计算。 正式进入代码流程 evolution函数 也就是update-decay过程 扩维,加上时间,因为预测是用之前五个时间点预测下一个时间点 把初始动态特征进行复制,后面方便比较变化 执行update-decay计算(代码和理论有点出入,谨言慎行) 执行平滑门计算 变成啥样了,[[0.8,1.0,0.0,0.9,1.0,0.625,…,0.7,0.54,0.32,0.25]…] -> [[0.8,1.0,0.0,0.9,1.0,0.625,…,0.4,0.14,0.52,0.28]…] 前面静态特征没有变化,后面动态特征进行了操作 #在model.py # 1. 初始化动态特征序列:给初始动态特征加时间维度,形状从[N,dr2] → [1, N, dr2](训练开始时,所有网格的动态嵌入初始化为 0 向量) all_data_dynamic = tf.expand_dims(all_data_dynamic_now, 0) # 2. 缓存初始动态特征,作为「旧特征」(空白向量会和流量等动态特征相加) all_data_dynamic_now_prev = all_data_dynamic_now # 3. 计算【候选更新的动态特征】:核心的Update,decay过程,初始化 all_data_dynamic_now_candidate = tf.sigmoid( tf.matmul(tf.concat([all_data_dynamic_now, all_data_static[0]], axis=-1), self.w1) * tf.repeat(threshold_nc[0], self.dr2, axis=-1) + all_data_dynamic_now #它和上一行执行Update操作 * tf.repeat(1 - threshold_nc[0], self.dr2, axis=-1)) * math.exp(-1 / 2) #执行Decay操作 # 4.平滑门 if self.use_smooth_gate: #是否使用平滑门 MultiAttention函数 也就是空间相互影响表示学习 ...

2026-02-19 · 2 min · wzy朔夜观星

project1基于深度学习的交通碰撞异常预测(实践)

任务复现 环境配置 conda create -n trafficpy39 python=3.9 #用conda创建python3.9版本的名为trafficpy39的虚拟环境 conda activate trafficpy39 #激活该虚拟环境 conda install tensorflow==2.10.0 # 如果需要独立GPU版本,可改成(需要CUDA 11.2 + cuDNN 8.1,建议参考官方文档) # conda install -c conda-forge cudatoolkit=11.2 cudnn=8.1 # pip install tensorflow==2.10.0 # 有可能版本冲突,所以写在这里 conda install "numpy>=1.20,<1.24" conda install "scikit-learn>=0.24,<1.3" 跑模型代码再README.md文件中 结果保存再results文件夹中 模型代码详讲 数据集 Chicago文件夹中存放的是芝加哥的数据集 NYC文件夹中存放的是纽约的数据集 其中.npy文件是NumPy 库的二进制序列化文件格式 ,专门用来存储 NumPy 数组(可保留数据类型、形状、维度),比 txt 更高效(读写速度快、占用空间小),是深度学习中存储数据集的常用格式。 文件夹中各个.npy文件代表的含义: dict:坐标,每个网格经纬度 label:存储每个时间步、每个网格的交通异常标签(0 = 正常,1 = 拥堵 / 事故等异常) POI:存储每个网格的 POI(兴趣点)属性(比如是否有商场、学校、医院等,以数值编码表示) record:存储每个时间步、每个网格的动态交通数据(比如车流量、速度、流量变化率等) road:存储每个网格的道路属性(比如道路类型、车道数、限速等,以数值编码表示) threshold:存储每个时间步、每个网格的事件阈值参数(0~1 之间的数值) data:已经融合好的数据(直接完成了时空编码以及静态嵌入) ...

2026-02-15 · 6 min · wzy朔夜观星

project1基于深度学习的交通碰撞异常预测(理论)

深度学习替换为具体模型名称如:自适应lstm/注意力lstm/后处理lstm 背景与任务 任务背景: 多传感器技术广泛应用于医疗健康(HC)、人体活动识别(HAR)、工业控制系统(ICS) 等领域,产生大量多变量时间序列数据(即多个传感器同时采集的、随时间变化的连续数据,如医疗中的脑电信号、活动识别中的加速度计数据)。随着物联网(IoT)、可穿戴设备、工业物联网(IIoT)的发展,多传感器技术已成为采集物理世界数据的核心手段,广泛应用于三大关键领域,且每个领域都存在强烈的异常检测需求。 机动车碰撞是 15-29 岁人群的首要死因(WHO 统计),全球每年超 5000 万人因碰撞受伤,部分导致残疾。准确预测交通异常能提前预警,降低事故风险,提升道路安全。 背景要联想到: 1. 做这个实验的基础条件(数据集、硬件)是否满足 2. 做这个是实验的必要性,有什么作用/好处 任务目标: 在有监督场景(训练数据有标注),精准识别多传感器时间序列中的异常,在这里也就是提升交通碰撞预测的准确性(AUC-PR、AUC-ROC、F1 分数、准确率)。 有监督的即训练数据有标注 无监督的即训练数据没有标注,异常检测大部分为这种(因为有监督代价太大了,得做数据标记 ) 异常检测无监督的时候检测的是离群点和其他特征不太相符的点等 还有半监督,及一半数据是标注好的,让模型根据这一半去猜另一半 挑战 传统模型的不足之处: 仅关注静态特征(如 POI、历史流量),忽略事件间的动态演化交互; 未有效处理数据不平衡,难以捕捉稀有异常事件的内在模式;(最难的一点) 空间依赖建模单一,未考虑多视角(功能相似、碰撞历史、交通状况)的网格交互; 动态特征演化易出现「过平滑」,导致正常与异常事件的特征差异被掩盖。 不足之处得面向挑战来说——说一个模型不行,你为什么要用这个模型时: 1. 要说原来的模型相对于你的模型在设计上有什么不同; 2. 还要落实到他们真正的挑战上/处理的时候为什么不行。 任务的共性挑战: 数据不平衡:异常事件在时空上极度稀疏,模型易过度拟合正常事件,难以学习异常模式; 静态 - 动态特征的联合建模:静态特征(如 POI)是固定的,动态特征(如事件交互)是时变的,二者的依赖关系复杂,需设计灵活的融合机制; 多视角空间依赖捕捉:网格(也就是某个地区)间的影响不仅来自地理邻近,还来自功能相似、碰撞历史关联等,单一空间图无法全面覆盖;(另类的数据融合问题) 动态演化中的过平滑:动态特征随时间更新时,易因正常事件的累积导致异常与正常事件的特征趋同,降低模型区分度; 训练效率与时间依赖的平衡:动态演化具有强时间依赖,传统批处理(并行)会破坏时序关系,而单样本训练效率极低。 区分过平滑和过拟合 过平滑是什么? 过平滑(over-smoothing): 在 GNN 中,随着层数加深、反复邻居聚合(本质上像不断做平均),不同节点的表示会越来越相似,最终难以区分。 过拟合是什么? 过拟合: 模型在训练数据上学得过于贴合(把噪声和偶然性也当成规律),导致训练效果很好但对未见数据泛化能力差。 过平滑 vs 过拟合(最简对比) 过平滑: 表示被“抹平”了,节点之间区分度下降。 现象:训练集和测试集都可能表现差(因为表达能力丢了)。 过拟合: 模型把训练集噪声也记住了。 现象:训练好、测试差。 过平滑更多的还是指一些尖锐点因为学太多了,被模糊掉了。 层数过多,那就是过拟合了;趋于一致一般就是学太多学太泛了,没有目的性;这也是后来为啥这么喜欢用注意力机制,因为效果确实好。 所以过平滑更像“信息被平均掉,学不出差异,该学的没学到”;过拟合是“学了不该学的细节,不该学的也学了”。 ...

2026-02-07 · 4 min · wzy朔夜观星