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函数 也就是空间相互影响表示学习 ...