参考: https://keras.io/examples/timeseries/timeseries_traffic_forecasting/
任务:
交通多步预测
准备数据
节点:228 计算每个节点之间的距离: 288 * 288 速度: 12672 * 288,时间 * 节点
为简化说明,只选取了26个节点
训练:6336 * 26 验证:2534 * 26 测试:3802 * 26
图数据
构图:邻接矩阵 每个node对应着一个向量计算distance matrix,这里实例中的原始数据已经给出
距离矩阵转化为邻接矩阵采用论文中的方法,tf中采用的方法是segment 以下实例中,segmeng_id针对的是向量,第一种ID0,也就是前两个的和,第二种ID1,也就是第三个的和。从而得到结果
c = tf.constant([[1,2,3,4], [-1,-2,-3,-4], [5,6,7,8]])
tf.math.segment_sum(c, tf.constant([0, 0, 1]))
# ==> [[0 0 0 0]
# [5 6 7 8]]
模型
输入: batch * time_steps * node * feature transpose: node * batch * time_steps * feature GCN:周边消息传播 transpose: batch * node, time_steps, feature LSTM: dense: batch * node, pred_time_steps output reshape: batch, pred_time_steps, node
其中的特殊之处在于GCN层,输入为node * batch * time_steps * feature 其中 in_feature = 1
多步预测
多步可以直接给出dense
|