《Generic Dynamic Graph Convolutional Network for traffic flow forecasting》阅读笔记

论文标题

《Generic Dynamic Graph Convolutional Network for traffic flow forecasting》

  • 干什么活:交通流预测(traffic flow forecasting )
  • 方法:动态图卷积网络(Dynamic Graph Convolutional Network)
  • 创新:通用(Generic)

作者

隔壁北航的大佬们太强了。这个项目有国自然和校级资金支持。

初读

摘要

  • 现存方法的局限性:图卷积网络

    • 共享模式不充分
    • 时间关系不灵活
    • 关系假设不固定
  • 新方法:

    • 具有参数共享和跨堆叠层独立块的通用框架

      • 用以系统地探索所以数据维度上地参数共享
      • 可以同时利用层与层之间的不同模式和跨层的稳定模式
    • 一个新的时间图卷积块

      • 从图的角度将历史时隙视为节点,并用图卷积处理时间动态。
      • 可以捕获灵活的全局时间关系,以便更好地了解当前的交通状况。
    • 一种动态图构造函数

      • 不仅可以对节点之间特定于时间的空间依赖关系进行建模
      • 还可以对时隙之间不断变化的时间交互进行建模,从而从数据中彻底发现动态关系。
  • 效果:

    在四个真实世界数据集上的实验结果表明,GDGCN 不仅优于最先进的方法,而且可以获得可解释的片段动态空间关系。

结论

  • 提出的通用框架 GDGCN

    • 具有独立块和共享块

    • 可以系统地跨层捕获各种模式和共享模式

  • 提出的时间图卷积

    • 从图的角度将多个历史时隙视为节点。

    • 可以捕捉灵活的全局时间关系

  • 提出的动态图构造函数

    • 可以同时对时变空间和时间关系进行建模。
  • 实验证明了 GDGCN 的优越性、时间图卷积和学习的动态图的有效性。

  • 意义:

    这项工作通过探索参数共享机制从图的角度建立时间关系,为交通预测提供了新的见解。这些思想也可以应用于更一般的多变量时间序列预测问题

再读

Section 1 Introduction

  • 第一段:时空数据挖掘牛

    • 时空交通数据开采是交通系统领域的一个基础研究问题
    • 交通数据挖掘的研究数据形式具有代表性,因此可以很容易地将其研究转移到其他领域时空学习问题,如人类迁移建模、兴趣点推荐。
  • 第二段:现有方法的优劣

    • 最早:经验统计方法

      • 忽略了节点之间的空间依赖性
    • 后续:深度学习方法

      • 卷积神经网络(CNN)

        • 用于挖掘空间中的关系
        • 无法工作在非欧几里得空间中构建的交通图
      • 递归神经网络(RNN)

        • 用于发现时间中的模式
    • 如今:图卷积网络(GCN)

      • 已被有效地用于交通预测。

      • 最早 基于距离或函数相似性构建空间图

        • 缺点:
          • 需要专家知识
          • 可能是不完整的
      • 后来 从数据中构造自适应空间邻接矩阵

        • 使用跨层共享参数构造矩阵
        • 通过梯度下降对其进行更新
        • 仍存在问题(三点)
  • 第三段:GCN 现存问题一

    • 能够自动利用潜在的空间关系,但时间维度和特征维度中的分层空间关系和稳定模式尚未得到很好的探索。

    • 对于空间维度,当前的图卷积方法通常只使用一个关系矩阵来堆叠图卷积层,

      • 平滑节点的输入信号,并且很难获得层之间的隐藏差异。例如,由于突发业务条件的扩散,相邻节点在浅层中可能具有更紧密的关系,而具有类似功能的节点在深层中可能由于固有特性而更加相关。
    • 对于时间维度和特征维度,现有方法为不同的层分配独立的参数

      • 忽略了在这些维度中存在的层之间共享的一些模式。例如,未来的交通流可能更多地取决于近过去而不是远过去,这在多层中是有用的。
  • 第四段:GCN 现存问题二

    • 现有的时空模型利用 CNN 或 RNN 作为顺序学习模块,可能不足以理解历史流量数据中的时间动态
    • 建立一个时间图来描述时隙之间的时间关系仅仅是在局部的假设之上。
    • 建模的不同时隙之间的时间关系在图视图中只是整个时间空间的有限集合,可能无法在整个输入时间内捕捉到灵活的全局时间关系
  • 第五段:GCN 现存问题三

    • 很少讨论动态性:

      • 两个片段的空间关系应该是动态的。

        例如,不同时间路段之间的空间关系图变化很大;两条道路可能在早高峰表现不同但在晚高峰表现相似。

      • 时隙之间的时间关系也在动态变化。

        例如,在高峰时段,随着交通状况的迅速变化,近时段之间的关系可能更大;而在非高峰时段,为了避免噪声的影响,所有时隙之间的关系可能是均匀的。

  • 第六段:GDGCN 对上述问题的解决

    • 通过在所有维度(空间、时间、特征)上跨层组合参数共享和独立块来提取各种稳定的模式。
      • 代表了对交通预测中参数共享机制的初步探索
    • 我们将时间步长视为图视图中的节点,将空间关系学习模块推广到时域。
    • 设计了一个时间动态图卷积块
      • 学习时隙之间灵活的全局时间关系,更好地理解历史数据中的时间动态
      • 不仅有效地捕捉了时隙之间不断变化的时间关系,而且还捕捉了段之间的动态空间相关性。
    • 开发了一种受张量分解影响的图构造函数,以捕捉片段之间不断变化的空间连接和时隙之间的时间连接。
    • 在四个基准数据集上进行了全面评估,表明 GDGCN 在所有情况下都始终优于其他方法。

Section 2 Related works

  • 2.1 Traffic forecasting 交通量预测

    • 在捕捉复杂的交通数据动态方面有希望的方法:

      • 利用 RNN 架构(如 LSTM)来分析序列数据

      • 同时结合 CNN 架构来考虑空间关系

    • 迎接道路网络中复杂的空间依赖性构成的重大挑战的新方法:

      • GCN 与时间序列学习技术相结合,以有效地解决空间和时间上的关系挖掘问题。

      • 为了捕捉时间相关性,

        • 一些利用循环神经网络
        • 另一些利用卷积神经网络
      • 问题:

        这些顺序学习方法无法对不同时隙之间的全局和动态时间关系进行建模。

    • 本文贡献

      工作将空间图学习模块推广到时域,并提出了一个时域图卷积块,它可以学习历史时隙之间的全局和动态时间关系

  • 2.2. Spatio-temporal graph neural networks 时空图神经网络

    • 具有代表性的基于图的模型:STGCN、DCRNN、ASTGCN

      • 结合了基于切比雪夫多项式的网络门控循环单元扩散过程等技术

      • 问题:

        使用的图形是预先安排好的,显示了直观但有限的设计。

    • 为了解决上一个问题,一些工作从数据中生成了自适应图:

      • Graph Wavenet 通过利用可训练矩阵引入了一个动态元素

      • AGCRN 专门关注自适应组件

      • 问题:

        能够灵活地利用数据中的相关性,但忽略了空间相关性的动态性质

    • 为了解决上一个问题,有方法构造一个空间相邻矩阵,并将其用于不同的层,从而提取出跨层的共享空间关系

      • GMAN

        • 将自注意机制扩展到空间维度,以学习动态空间关系
        • 通过引入基于注意力的方法增强了其模型,允许获取空间和时间上的动态信息
      • STGODE 利用常微分方程来捕捉空间和时间关系的复杂动力学

      • 问题:

        具有一个固定空间相邻矩阵的模型难以实现不同的层在不同的数据维度中发现不同的模式

    • 本文贡献:

      • 在堆叠层之间应用不同的相邻矩阵来学习多个模式。并将这种机制推广到所有数据维度
      • 对于3D数据,在空间、时间和特征维度上设计独立块和共享块

Section 3 Notations and definitions

  • 常用符号

    • G t S G_t^S GtS:表示交通空间图,对于时隙 t t t G t S = { V S , E t S } G_t^S=\{\mathbb{V}^S,\mathbb{E}^S_t\} GtS={VS,EtS}
    • G t T G_t^T GtT:表示交通时间图,对于时隙 t t t G t T = { V T , E t T } G_t^T=\{\mathbb{V}^T,\mathbb{E}^T_t\} GtT={VT,EtT}
    • X t \boldsymbol{\mathrm{X}}_t Xt:表示时隙 t t t 的交通流量观测
    • V S = { v 1 S … v N S } \mathbb{V}^S=\{v_1^S\dots v_N^S\} VS={v1SvNS}:表示一组被研究的路段
    • V T = { v 1 T … v N T } \mathbb{V}^T=\{v_1^T\dots v_N^T\} VT={v1TvNT}:表示一组输入时间戳
    • E t S \mathbb{E}^S_t EtS:表示时间 t t t 的空间之间链接的集合
    • E t T \mathbb{E}^T_t EtT:表示时间 t t t 的时段之间的链接的集合
    • e t , i , j S = ( v i S , v j S , A t , i , j S ) ∈ E t S e^S_{t,i,j}=(v_i^S,v_j^S,\boldsymbol{A}^S_{t,i,j})\in\mathbb{E}^S_t et,i,jS=(viS,vjS,At,i,jS)EtS:表示出现在时间 t t t 且源节点是 v i S v_i^S viS ,目标节点是 v j S v_j^S vjS 的边的权重是 A t , i , j S \boldsymbol{A}^S_{t,i,j} At,i,jS
    • e t , i , j T = ( v i T , v j T , A t , i , j T ) ∈ E t T e^T_{t,i,j}=(v_i^T,v_j^T,\boldsymbol{A}^T_{t,i,j})\in\mathbb{E}^T_t et,i,jT=(viT,vjT,At,i,jT)EtT:表示在时隙 t t t v i T v_i^T viT v j T v_j^T vjT 且权重是 A t , i , j T \boldsymbol{A}^T_{t,i,j} At,i,jT 的边
    • A t , i , j S \boldsymbol{A}^S_{t,i,j} At,i,jS:表示空间张量 A S \boldsymbol{A}^S AS 的第 ( t , i , j ) (t,i,j) (t,i,j)
    • A t , i , j T \boldsymbol{A}^T_{t,i,j} At,i,jT:表示时间张量 A T \boldsymbol{A}^T AT 的第 ( t , i , j ) (t,i,j) (t,i,j)
    • P \boldsymbol{P} P:表示输入历史步骤数量,即, ∣ V T ∣ = P |\mathbb{V}^T|=\boldsymbol{P} VT=P
    • N \boldsymbol{N} N:表示研究路段数量,即, ∣ V S ∣ = N |\mathbb{V}^S|=\boldsymbol{N} VS=N
    • d d d:表示隐藏状态的维度
    • N t \boldsymbol{N}_t Nt:表示一天中的时间(24小时)被划分为 N t \boldsymbol{N}_t Nt 个时隙
    • Φ ( t ) \Phi(t) Φ(t):表示映射生成了时间 t t t 的嵌入索引
    • H l \boldsymbol{\mathrm{H}}^l Hl:表示第 l l l 层的隐藏状态和输入
    • A S \boldsymbol{\mathrm{A}}^S AS:表示不同层次共享的空间动态图
    • A T \boldsymbol{\mathrm{A}}^T AT:表示不同层共享的时间动态图
    • A l , S \boldsymbol{\mathrm{A}}^{l,S} Al,S:表示第 l l l 层的独立空间动态图
    • A l , T \boldsymbol{\mathrm{A}}^{l,T} Al,T:表示第 l l l 层的独立时间动态图
  • 定义:

    • 交通流(Traffic Flow):

      交通流量是指在给定的时间间隔内,量化穿过特定路段汽车/人员数量的记录数据。它是表征当前交通状况的重要属性。

      • 使用 V S = { v 1 S … v N S } \mathbb{V}^S=\{v_1^S\dots v_N^S\} VS={v1SvNS} 表示一组路段的流量记录的集合
      • N \boldsymbol{N} N 表示相关分段的计数。
      • t t t 处第 i i i 个路段对应的交通流量为 x t , i ∈ R x_{t,i}\in\R xt,iR
      • 使用 X t ∈ R N \boldsymbol{\mathrm{X}}_t\in\R^N XtRN 来表示 t t t 处交通流的综合观测值。
    • 动态空间图(Dynamic Spatial Graph):

      将一个区域内的车辆运动概念化为一个表现出时间可变性的图形,它们之间的相互联系的性质随着时间的推移而变化。

      • 在特定时刻 t t t,空间图由 G t S = { V S , E t S } G_t^S=\{\mathbb{V}^S,\mathbb{E}^S_t\} GtS={VS,EtS} 表示
        • V S \mathbb{V}^S VS 表示路段
        • E t S \mathbb{E}^S_t EtS 表示 t t t 中的空间边。
      • e t , i , j S = ( v i S , v j S , A t , i , j S ) ∈ E t S e^S_{t,i,j}=(v_i^S,v_j^S,\boldsymbol{A}^S_{t,i,j})\in\mathbb{E}^S_t et,i,jS=(viS,vjS,At,i,jS)EtS 是具有起始节点 v i S v_i^S viS 和目的节点 v j S v_j^S vjS 的空间边
        • A t , i , j S \boldsymbol{A}^S_{t,i,j} At,i,jS 是相应的权重,它是空间关系张量 A S \boldsymbol{\mathrm{A}}^S AS 的元素。
      • A t S \boldsymbol{\mathrm{A}}^S_t AtS 用于表示动态空间图 G t S G_t^S GtS
    • 动态时间图(Dynamic Temporal Graph)

      的角度来考虑不同时隙之间的时间关系。与空间关系类似,时间关系也是动态的。例如,交通状况在高峰时段的变化可能比非高峰时段更快,这表明预测时隙和最近的历史时隙之间的关系更强。

      • 对于时隙 t t t,时间图表示为 V T = { v 1 T … v N T } \mathbb{V}^T=\{v_1^T\dots v_N^T\} VT={v1TvNT}
        • 其中 P \boldsymbol{P} P 个历史时隙被视为节点
        • V T = { v 1 T … v N T } \mathbb{V}^T=\{v_1^T\dots v_N^T\} VT={v1TvNT} 是节点的集合
        • E t T \mathbb{E}^T_t EtT 是在时间 t t t 的时隙之间的边的集合
      • e t , i , j T = ( v i T , v j T , A t , i , j T ) ∈ E t T e^T_{t,i,j}=(v_i^T,v_j^T,\boldsymbol{A}^T_{t,i,j})\in\mathbb{E}^T_t et,i,jT=(viT,vjT,At,i,jT)EtT 表示在时间 t t t 时隙 v i T v_i^T viT 和时隙 v j T v_j^T vjT 之间的连接
      • 时间动态图 G T G^T GT 可以由 3D 张量 A T \boldsymbol{A}^T AT 表示
    • 交通预测流(Traffic Flow Forecasting)

      目标是将 P \boldsymbol{P} P 个过去时隙的流量记录作为输入,并输出 Q \boldsymbol{Q} Q 个未来时隙的交通流量预测:
      X ^ t + 1 : t + Q = f ( X t − P + 1 , W l e a r n a b l e ) \hat{\boldsymbol{\mathrm{X}}}_{t+1:t+Q}=f(\boldsymbol{\mathrm{X}}_{t-P+1},\boldsymbol{\mathrm{W}}_{learnable}) X^t+1:t+Q=f(XtP+1,Wlearnable)

Section 4 Methodology

在这里插入图片描述

宏观角度 GDGCN 的结构

  • 由多个相同的层组成。每个层包含两个部分:
    • 一个用于捕获共享模式的共享部分
    • 一个用于分层模式的独立部分
  • 每个零件中的三个块分别处理空间时间特征维度上的隐藏状态。
  • 在块中,空间图卷积块将分段视为节点,时间图卷积块则将时隙视为节点。它们都利用所提出的动态图构造函数来建立自适应和动态的节点关系。

4.1. A generic framework for traffic forecasting

交通预测的通用框架

  • 该框架解决的问题:为了解决先前的研究没有很好地探索时间维度和特征维度上的分层空间关系以及稳定模式的问题

  • 框架特点:简短、可扩展和通用的框架,可以系统地处理跨层共享独立的交通流预测模式

  • 框架结构:

    • 框架由 L L L 个相同的层组成
    • 每个 GDGCN 层包含一个共享部分和一个独立部分
      • 不同层的共享部分中的块共享同一组参数,旨在学习跨层稳定和通用的模式
      • 不同层的独立部分中的区块为跨层的不同模式保留不同的参数集
    • 每个层的两个部分都各有三个不同的块,分别在空间、时间和特征维度上处理隐藏状态。
    • 在一层中的六个块之后,使用融合块来积分它们的输出,并保持隐藏状态的大小一致。
  • 具体运算:

    • H 0 \boldsymbol{\mathrm{H}}^0 H0 是通过一个全连接层从输入数据转换而来的:
      H 0 = W 0 ∗ X t − P + 1 : t + b 0 \boldsymbol{\mathrm{H}}^0=\boldsymbol{\mathrm{W}}^0*\boldsymbol{\mathrm{X}}_{t-P+1:t}+\boldsymbol{\mathrm{b}}^0 H0=W0XtP+1:t+b0

      • 参数字典:
        • H l ∈ R P × N × d \boldsymbol{\mathrm{H}}^l\in\R^{P\times N\times d} HlRP×N×d 是第 l l l 个GDGCN层的输入隐藏向量
        • W \boldsymbol{\mathrm{W}} W b \boldsymbol{\mathrm{b}} b 是可学习的
    • 一方面,输入的隐藏状态由独立部分的三个块处理:
      H l , S = f l , S ( H l ) H l , T = f l , T ( H l ) H l , F = f l , F ( H l ) \boldsymbol{\mathrm{H}}^{l,S}=f^{l,S}(\boldsymbol{\mathrm{H}}^l)\\ \boldsymbol{\mathrm{H}}^{l,T}=f^{l,T}(\boldsymbol{\mathrm{H}}^l)\\ \boldsymbol{\mathrm{H}}^{l,F}=f^{l,F}(\boldsymbol{\mathrm{H}}^l) Hl,S=fl,S(Hl)Hl,T=fl,T(Hl)Hl,F=fl,F(Hl)

      • 参数字典:
        • f l , S f^{l,S} fl,S f l , T f^{l,T} fl,T f l , F f^{l,F} fl,F 分别是第 l l l 层中的空间、时间特征块
    • 另一方面,隐藏状态也由共享部分处理:
      H l , S ′ = f S ( H l ) H l , T ′ = f T ( H l ) H l , F ′ = f F ( H l ) \boldsymbol{\mathrm{H}}^{l,S'}=f^S(\boldsymbol{\mathrm{H}}^l)\\ \boldsymbol{\mathrm{H}}^{l,T'}=f^T(\boldsymbol{\mathrm{H}}^l)\\ \boldsymbol{\mathrm{H}}^{l,F'}=f^F(\boldsymbol{\mathrm{H}}^l) Hl,S=fS(Hl)Hl,T=fT(Hl)Hl,F=fF(Hl)

      • 参数字典:
        • f S f^S fS f T f^T fT f F f^F fF 是在不同层中接受不同输入但跨层共享相同参数集的块
    • 然后,来自这六个块的隐藏状态被融合:
      H l ′ = W l , f ∗ [ H l , S ; H l , T ; H l , F ; H l , S ′ ; H l , T ′ ; H l , F ′ ] + b l , f \boldsymbol{\mathrm{H}}^{l'}=\boldsymbol{\mathrm{W}}^{l,f}*[\boldsymbol{\mathrm{H}}^{l,S};\boldsymbol{\mathrm{H}}^{l,T};\boldsymbol{\mathrm{H}}^{l,F};\boldsymbol{\mathrm{H}}^{l,S'};\boldsymbol{\mathrm{H}}^{l,T'};\boldsymbol{\mathrm{H}}^{l,F'}]+\boldsymbol{\mathrm{b}}^{l,f} Hl=Wl,f[Hl,S;Hl,T;Hl,F;Hl,S;Hl,T;Hl,F]+bl,f

      • 参数字典:
        • 其中, [ ⋅ ; ⋅ ] [·;·] [] 是串联运算
    • 在每一层之后,采用残差连接来获得下一层的输入:
      H l + 1 = B a t c h _ N o r m ( H l + R e L U ( H l ′ ) ) \boldsymbol{\mathrm{H}}^{l+1}=Batch\_Norm(\boldsymbol{\mathrm{H}}^l+ReLU(\boldsymbol{\mathrm{H}}^{l'})) Hl+1=Batch_Norm(Hl+ReLU(Hl))

    • 此外,每个层中的隐藏状态都被跳过连接到输出层,用于最终预测:
      X ^ t + 1 : t + Q = M L P ( ∑ l = 1 L H l ) \hat{\boldsymbol{\mathrm{X}}}_{t+1:t+Q}=MLP(\sum^L_{l=1}\boldsymbol{\mathrm{H}}_l) X^t+1:t+Q=MLP(l=1LHl)

  • 创新点与强大之处:

    • 重新考虑了交通预测模块,并将其分解为三个基本块以使其清晰明了
    • 尽管这个框架很简短,但它仍然很强大
    • 通用性更强,先前工作中的大多数模块都可以被视为它们组合的特定实例。例如,
      • DCRNN 中的扩散卷积层是空间块和特征块的组合
      • Graph Wavenet 中的 TCN 是时间块和特性块的组合
      • 时空融合图卷积是空间块与时间块的组合。

4.2. Dynamic graph constructor

动态图构造函数

  • 问题:

    在交通领域,路段之间的空间关系是潜在的,并且不断变化

  • 现有解决方案及其问题:

    • 在大多数先前的工作中,研究人员使用专家知识,如距离,来确定空间关系。

      这些关系是明确的和可解释的,但它们可能是不完整的,可能不适合交通流量预测。

    • 一些研究提出构建自适应图

      但它们生成的图是静态的,忽略了时空关系在时间上的演变。

  • 本文解决方案:

    在这里插入图片描述

    为了学习潜在关系和变化关系,设计了动态图构造函数。该构造函数可以生成动态图,并在训练过程中对其进行优化。

    本文对生成动态图的过程进行了两次简化,使其易于处理。

    • 首先,受周期性的启发,假设来自不同日期的同一时隙的输入可以共享一个动态图

      相应地,需要构造 N t N_t Nt 个动态图,使用张量 A ∈ R N t × N × N \boldsymbol{\mathrm{A}}\in\R^{N_t\times N\times N} ARNt×N×N 来表示这些动态图。给定特定的时间 t t t Φ ( t ) \Phi(t) Φ(t) 用于计算相应的索引, A Φ ( t ) \boldsymbol{\mathrm{A}}_{\Phi(t)} AΦ(t) 是为 t t t 选择的动态图。

    • 其次,动态关系图中的一些子结构可以重用

      例如,从黎明到黄昏,两个相邻路段的交通流量可以相互关联,生活在不同地区的人们在上班时从住宅到工作场所的出行模式相似。因此,受 Tucker 分解的启发,对邻接张量进行了重组。给定一个特定的张量,Tucker 分解旨在用一个核心张量和每个模式的因子矩阵的乘积来近似它。

  • 具体运算:

    邻接张量 A ∈ R N t × N × N \boldsymbol{\mathrm{A}}\in\R^{N_t\times N\times N} ARNt×N×N 是用四个矩阵 E t ∈ R N t × d ′ \boldsymbol{\mathrm{E}}^t\in\R^{N_t\times d'} EtRNt×d E s ∈ R N × d ′ \boldsymbol{\mathrm{E}}^s\in\R^{N\times d'} EsRN×d E e ∈ R N × d ′ \boldsymbol{\mathrm{E}}^e\in\R^{N\times d'} EeRN×d E k ∈ R d ′ × d ′ × d ′ \boldsymbol{\mathrm{E}}^k\in\R^{d'\times d'\times d'} EkRd×d×d 计算的,这四个矩阵可以自动更新:
    A = S o f t m a x ( R e L U ( E k × 1 E t × 2 E s × 3 E e ) ) \boldsymbol{\mathrm{A}}=Softmax(ReLU(\boldsymbol{\mathrm{E}}^k\times_1\boldsymbol{\mathrm{E}}^t\times_2\boldsymbol{\mathrm{E}}^s\times_3\boldsymbol{\mathrm{E}}^e)) A=Softmax(ReLU(Ek×1Et×2Es×3Ee))

    • 参数字典:
      • × i \times_i ×i 是第 i i i 维度上的张量矩阵乘积
      • E t ∈ R N t × d ′ \boldsymbol{\mathrm{E}}^t\in\R^{N_t\times d'} EtRNt×d 表示 N t N_t Nt 时隙
      • E s ∈ R N × d ′ \boldsymbol{\mathrm{E}}^s\in\R^{N\times d'} EsRN×d 表示开始节点的信息
      • E e ∈ R N × d ′ \boldsymbol{\mathrm{E}}^e\in\R^{N\times d'} EeRN×d 是结束节点的参数

    除了建立空间关系 A S \boldsymbol{\mathrm{A}}^S AS 之外,还可以将输入时隙之间的时间关系建立为动态图 A T ∈ R N t × P × P \boldsymbol{\mathrm{A}}^T\in\R^{N_t\times P\times P} ATRNt×P×P

4.3. Spatial graph convolutional block

空间图卷积块

  • 现状与问题:

    空间交通节点之间的空间关系有利于预测。例如,考虑上游路段的交通流量有助于下游路段的流量预测。尽管图上的卷积运算提取局部信息来处理空间中片段之间的关系,但大多数都在不考虑随时间变化的特征的情况下使用它。

  • 本文解决方案:

    • 对空间中的时变关系进行建模。
    • 该框架中的这个模块不同于传统的图卷积
      • 首先,空间图卷积只在动态图上应用一步。其原理是图形是可学习的。在传统的图卷积中,可学习图可以自适应地考虑多跳关系
      • 同时,特征变换是不存在的,并且特征维度上的变换被放置在另一个模块中。然而,这并没有降低它的表现力,因为传统的 GCN 可以被视为这两个模块的组合,并通过堆叠多层来实现。
  • 具体运算:

    给定输入 X t − P + 1 : t \boldsymbol{\mathrm{X}}_{t-P+1:t} XtP+1:t A Φ ( t ) ∈ R N × N \boldsymbol{\mathrm{A}}_{\Phi(t)}\in\R^{N\times N} AΦ(t)RN×N 是空间中的关系矩阵。空间图卷积块的目的是根据 A Φ ( t ) A_{\Phi(t)} AΦ(t) 将信息聚合到焦点节点; A Φ ( t ) \boldsymbol{\mathrm{A}}_{\Phi(t)} AΦ(t) ( i , j ) (i,j) (i,j) 项反映了节点 j j j 对节点 i i i 的影响强度。

    • 在层 l l l 的独立部分中,动态图上的空间卷积可以定义为:

    f l , S ( H l ) : , i = ∑ j = 1 N A Φ ( t ) , i , j l , S H : , j l f^{l,S}(\boldsymbol{\mathrm{H}}^l)_{:,i}=\sum^N_{j=1}\boldsymbol{\mathrm{A}}^{l,S}_{\Phi(t),i,j}\boldsymbol{\mathrm{H}}^l_{:,j} fl,S(Hl):,i=j=1NAΦ(t),i,jl,SH:,jl

    • 其中 A l , S \boldsymbol{\mathrm{A}}^{l,S} Al,S 在不同的层中是不同的。卷积过程可以用张量矩阵乘法表示:
      f l , S ( H l ) = H l × 2 A Φ ( t ) l , S f^{l,S}(\boldsymbol{\mathrm{H}}^l)=\boldsymbol{\mathrm{H}}^l\times_2\boldsymbol{\mathrm{A}}^{l,S}_{\Phi(t)} fl,S(Hl)=Hl×2AΦ(t)l,S

    • l l l 层的共享部分,空间块定义为:
      f S ( H l ) = H l × 2 A Φ ( t ) S f^S(\boldsymbol{\mathrm{H}}^l)=\boldsymbol{\mathrm{H}}^l\times_2\boldsymbol{\mathrm{A}}^S_{\Phi(t)} fS(Hl)=Hl×2AΦ(t)S
      其中 A S \boldsymbol{\mathrm{A}}^S AS 被不同的层共享

4.4. Temporal graph convolutional block

时间图卷积块

  • 现状与问题:

    了解输入的历史数据对于交通流量预测至关重要。关键是处理历史交通流的时间动态,即利用历史时隙之间的时间关系。最普遍的方法是 CNN 和 RNN。然而,它们有以下缺点:

    • 首先,这些方法倾向于对不同时隙之间的局部时间关系进行建模,

    • 其次,这些方法建模的时间关系基本上是静态的,因为它在不同的时间保持相同的参数集。

      在这里插入图片描述

  • 本文解决方案:

    这项工作采用了一种完全不同的程序,其中空间关系学习模块被推广到时域,并提出了一个时域图卷积块

  • 具体运算:

    如总结构图所示,输入的 P P P 个时隙可以看作图中的 P P P 个节点,时间关系动态图 A T ∈ R N t × P × P \boldsymbol{\mathrm{A}}^T\in\R^{N_t\times P\times P} ATRNt×P×P 由动态图构造函数构建。

    • 与空间图卷积模块类似, l l l 层独立部分的时间图卷积可以定义为:
      f l , T ( H l ) i = ∑ j = 1 P A Φ ( t ) , i , j l , T H j l f^{l,T}(\boldsymbol{\mathrm{H}}^l)_i=\sum^P_{j=1}\boldsymbol{\mathrm{A}}^{l,T}_{\Phi(t),i,j}\boldsymbol{\mathrm{H}}^l_j fl,T(Hl)i=j=1PAΦ(t),i,jl,THjl

    • 其中 A l , T \boldsymbol{\mathrm{A}}^{l,T} Al,T​ 在不同的层中是不同的。卷积过程可以用张量矩阵乘法表示:
      f l , T ( H l ) = H l × 2 A Φ ( t ) l , T f^{l,T}(\boldsymbol{\mathrm{H}}^l)=\boldsymbol{\mathrm{H}}^l\times_2\boldsymbol{\mathrm{A}}^{l,T}_{\Phi(t)} fl,T(Hl)=Hl×2AΦ(t)l,T

    • l l l 层的共享部分,空间块定义为:
      f T ( H l ) = H l × 2 A Φ ( t ) T f^T(\boldsymbol{\mathrm{H}}^l)=\boldsymbol{\mathrm{H}}^l\times_2\boldsymbol{\mathrm{A}}^T_{\Phi(t)} fT(Hl)=Hl×2AΦ(t)T
      其中 A T \boldsymbol{\mathrm{A}}^T AT 被不同的层共享

4.5. Other components and training process

其他组成部分和培训流程

  • 每个层中的特征块被实现为特征维度上的全连接层。

  • 损失函数:

    Huber 损失是一种常用的损失函数,它平衡 MSE 和绝对误差之间的权衡,提供鲁棒性和可微性。因此,它在数据挖掘中得到了广泛的应用,在交通预测领域也有一些优秀的工作使用了huber损失。根据它们,huber损失被选择为此处优化期间的损失:
    L = 1 N × Q ∑ i = 1 Q ∑ j = 1 N h ( x ^ i j , x i , j ) h ( x ^ , x ) = { 1 2 ( x ^ − x ) 2 ∣ x ^ − x ∣ ≤ δ δ ∣ x ^ − x ∣ − 1 2 δ 2 ∣ x ^ − x ∣ ≤ δ L=\frac{1}{N\times Q}\sum^Q_{i=1}\sum^N_{j=1}h(\hat{x}_{ij},x_{i,j})\\ \begin{equation} h(\hat{x},x)=\left\{ \begin{aligned} & \frac{1}{2}(\hat{x}-x)^2 && |\hat{x}-x|\le\delta\\ & \delta|\hat{x}-x|-\frac{1}{2}\delta^2 && |\hat{x}-x|\le\delta \end{aligned} \right. \end{equation} L=N×Q1i=1Qj=1Nh(x^ij,xi,j)h(x^,x)= 21(x^x)2δx^x21δ2x^xδx^xδ
    其中 δ \delta δ 是用于平衡平方误差的超参数。

  • 训练过程:

    • 先前的代表性研究,如 DCRNN、STGCN 和 GraphWaveNet,使用具有不同结构的块来分别探索空间和时间关系。

    • 不同的是,GDGCN 提出以通用和统一的方式对空间依赖性和时间关系进行建模。

      • 在 GDGCN 中,所有的空间相邻矩阵和时间关系矩阵都是通过同一个动态图生成器生成的。

      • 所使用的空间图和时间图都是动态的

        因为所提出的模式将通过映射 x t − P + 1 : t \boldsymbol{\mathrm{x}}_{t-P+1:t} xtP+1:t 根据具有不同时间 t t t 的输入 Φ ( t ) \Phi(t) Φ(t) 来选择不同的空间图 A Φ ( t ) S \boldsymbol{\mathrm{A}}^S_{\Phi(t)} AΦ(t)S 和时间图 A Φ ( t ) T \boldsymbol{\mathrm{A}}^T_{\Phi(t)} AΦ(t)T

Section 5 Experiments

5.1. Datasets

数据集

此处使用的是 PeMSD3、PeMSD4、PeMSD7 和 PeMSD8,数据集细节:

  • 来自加州交通管理局绩效测量系统(PeMS)
  • 数据粒度为 5 分钟
  • 数据已进行 z 分数归一化
  • PeMSD 数据集具体包含以下类型的数据:交通流量、速度、占有率等。
  • 同时,该数据集还提供了道路元数据信息,如路段长度、车道数等。
  • PeMSD3、PeMSD4、PeMSD7 和 PeMSD8 都是PeMSD数据集的不同子集。这些子集包含了不同路段和不同时间段的交通数据,用于不同的交通预测任务。具体来说,
    • PeMSD4是旧金山湾区的交通数据,包含29条道路上的3848个检测器;
    • PeMSD7是加州高速公路系统的交通数据,包含了不同时间段的交通流量数据;
    • PeMSD8是圣贝纳迪诺的交通数据,包含8条道路的1979个检测器。

5.2. Baselines

基准线

GDGCN 和其他 23 个基线模型进行了比较。模型可以分为几个组:

  • 第一组是经典的时间序列预测方法,包括 HA(历史平均法)、ARIMA(自回归综合移动平均)、VAR(向量自回归),FC-LSTM、TCN、GRU-ED。
  • 第二组是时空方法,包括DSANet、STGCN、DCRNN、GraphWaveNet、ASTGCN(r)、MSTGCN、STG2Seq、LSGCN、STSGCN 和AGCRN。
  • 第三组是最新的时空模型,包括STFGNN、STGODE、Z-GCNETs、DSTAGNN、ST-WA、D2STGNN、STG-NCDE。

5.3. Experimental settings and hyperparameters

实验设置和超参数

  • 历史步骤 P = 12 P=12 P=12
  • 预测步骤 Q = 12 Q=12 Q=12
  • 4 个数据集上的比例: 训练集 : 验证集 : 测试集 = 6 : 2 : 2 训练集:验证集:测试集=6:2:2 训练集:验证集:测试集=6:2:2
  • N t = 288 N_t = 288 Nt=288
  • 批次大小 b a t c h _ s i z e = 32 batch\_size= 32 batch_size=32
  • 所有模型都使用 Adam 优化器
    • 耐心 p a t i e n c e = 15 patience=15 patience=15
    • 训练轮数 e p o c h s = 200 epochs = 200 epochs=200
  • 隐藏状态 d d d 的维度选自 { 16 , 32 , 64 , 128 , 256 } \{16,32,64,128,256\} {16,32,64,128,256}
  • L L L 选自 { 4 , 5 , 6 , 7 , 8 } \{4,5,6,7,8\} {4,5,6,7,8}
  • 学习率选自 { 1 × 1 0 − 4 , 5 × 1 0 − 4 , 1 × 1 0 − 3 } \{1\times10^{-4},5\times10^{-4},1\times10^{-3}\} {1×104,5×104,1×103}
  • 权重衰减系数选自 { 1 × 1 0 − 4 , 1 × 1 0 − 3 , 1 × 1 0 − 2 } \{1\times10^{-4},1\times10^{-3},1\times10^{-2}\} {1×104,1×103,1×102}
  • 硬件使用 4 个 Tesla T4 GPU

5.4. Evaluation metrics

评估指标

平均绝对误差(MAE)、平均绝对百分比误差(MAPE)和均方根误差(RMSE)用于测量不同模型的性能:
KaTeX parse error: Expected 'EOF', got '&' at position 6: MAE &̲=&\frac{1}{N\ti…
其中 x i , j ∈ R x_{i,j}\in\R xi,jR 表示在时隙 t t t 的第 i i i 段的交通流量, x ^ i , j \hat{x}_{i,j} x^i,j 表示对 x i , j x_{i,j} xi,j 的预测结果。

5.5. Comparison results

比较结果

在这里插入图片描述

在这里插入图片描述

GDGCN的优异表现可能归因于以下方面:

  • 提供了一个全新的基于图的视图来处理时间关系。
  • 构造了动态图,并设计了一种动态图卷积方法来捕捉动态时空相关性。
  • 通用框架旨在系统地跨层学习独立模式共享模式

5.6. Ablation study of key designs in proposed model

拟议模型中关键设计的消融研究

GDGCN 的三个关键模块是动态图构造函数、具有两种跨层共享机制(包括共享块和独立块)的通用框架时间动态图卷积块。为了验证所提出的组件的有效性,提出了四种变体:

  • GDGCN w/o共享块:删除了框架中所有层的共享块。
  • GDGCN w/o独立块:删除了框架中所有层的独立块。
  • GDGC N w/o dygraph:我们使用一个自适应图,没有随时间演变的机制。
  • GDGCN w/o 时态图 conv:直接移除了时间动态图卷积模块。

结果:全部很强

  • 与没有共享块的 GDGCN 相比,GDGCN 获得了更好的性能,这表明跨堆叠层的共享参数可以提取稳定的模式
  • 与没有独立块的 GDGCN 相比,GDGCN 表现得更好,证明了分层参数学习机制在不同层上的重要性。
  • 此外,在四个数据集上的结果也表明,该方法中的逐层参数机制超过了共享机制。
  • GDGCN 优于没有动态图的 GDGCN,这表明了建模分段和时隙之间的动态关系的重要性。
  • GDGCN 的性能优于不带时态图卷积的 GDGCN,这证实了所提出的时态动态图卷积块的有效性。

5.7. Study of dynamic graph

动态图的研究

  • 实验目的:

    为了展示动态图构造器如何发现节点之间的关系并有利于预测,在PeMSD3上进行了案例研究。

  • 实验结果:

    在这里插入图片描述

  • 结果分析:

    • a 段,日均流量。

      • 在时段1中,道路1和2的交通流量都在上升,并且相应的权重较高。
      • 在时段2中,道路1的交通流量保持上升,而路段2的交通流量稳定。
      • 在第 3 阶段,两条道路的交通流量都开始急剧下降,表现出很大的相关性和同步性。
    • b 段,GDGCN 学习的跨时间链路权重(已经过平滑和归一化)

      • 两条道路的趋势在周期 2 中不再相似,并且在学习的动态图中它们的相应边缘权重较低。
      • 在第 3 阶段,相应地,两个路段的边缘权重较高。

    从这个案例研究中可以看出,动态图构造器可以从数据中挖掘出合理动态的交通模式,这对于理解当前交通状况和预测未来交通趋势非常有益。

5.8. Study of temporal graph convolutional block

时态图卷积块的研究

  • 实验目的:

    为了验证时间动态图卷积块的有效性,进行了详细的比较实验。

  • 实验具体操作:

    时间动态图卷积块被几个流行的时间关系学习模块取代:

    • 使用 LSTM:用LSTM取代时间图卷积块
    • 使用 TCN:用门控TCN取代时间图卷积层块
    • 使用注意力:用时间注意力模块取代时间图卷积块
  • 实验结果:

    在这里插入图片描述

  • 结果分析:

    • GDGCN 实现了最佳性能,这表明时间图卷积块可以从数据中提取最多的信息
    • 尽管使用 LSTM 作为时间关系学习模块的变体获得的精度低于 GDGCN,但它优于表6中的其他变体。
    • 使用注意力作为时间模块会导致最差的表现,这可能是由于注意力的学习过程不稳定造成的。

5.9. Study of computational efficiency

计算效率研究

  • 实验具体操作:

    • 在 PeMSD4 上进行比较实验。
    • 比较了 GDGCN 的最佳两个基线和两个变体的计算效率。
      • 最佳的两个基线是 D2STGNN 和 ST-WA。
      • GDGCN 的两个变体是 GDGCN w-Attention 和 GDGCN-w-LSTM
        • GDGCN w-Attention 表示用注意力机制替换 GDGCN 中的时间图卷积模块
        • GDGCN-w-LSTM 表示用 LSTM 替换 GDGCN 中的时间图形卷积模块
  • 实验结果

    在这里插入图片描述

    • (a)是每个轮次(epoch)的训练时间

    • (b)是每个轮次(epoch)的推理时间。

    • 具体时间如下表所示。所有型号的批量大小保持为16。

      在这里插入图片描述

  • 结果分析:

    • D2STGNN 慢于 GDGCN 的训练速度表明 GDGCN 通用系统的预测框架具有时效性。
    • ST-WA 提出的具有线性复杂性的窗口注意力确保了其与 D2STGNN 相比在时间上的竞争力。然而,与 GDGCN 相比,ST-WA 中的注意力设计也导致其训练时间成本更高。
    • GDGCN 使用一种具有时间效率的相对有效的结构,即时间动态图卷积块来学习时间关系。表6中证实了所提出的时间动态图卷积层块的有效性。
    • 以注意力为时间块的 GDGCN 的训练时间几乎是 GDGCN 训练时间的两倍。它解释了为什么 ST-WA 比 GDGCN 花费更多的时间。此外,它还进一步展示了时间动态图卷积块的时间效率。

5.10. Study of spatial complexity

空间复杂性研究

  • 实验目的:

    为了探索所提出的模型的空间效率

  • 实验具体操作

    将GDGCN与一些具有代表性的基线在模型大小方面进行了比较。

  • 实验结果:

    • 表8显示了每个模型的总参数。

      在这里插入图片描述

    • 图8显示了模型大小与精度之间的散点图。

      在这里插入图片描述

  • 结果分析

    • ST-WA asos 以相对较小的尺寸模型实现了令人满意的性能。
    • D2STGNN 在所示的具有高空间复杂度的方法中执行得第二好。
    • GDGCN 实现了空间复杂性和性能之间的平衡。

5.11. Study of aggregation methods

聚合方法研究

  • 实验目的

    以表明使用级联操作组合六个块的输出的原因。

  • 实验具体操作:

    GDGCN中的级联分别替换为求和运算和均值运算。

  • 实验结果:

    实验结果如表9和表10所示。

    在这里插入图片描述

  • 结果分析:

    具有级联的 GDGCN 实现了最佳性能。这可能是由于级联运算可以比平均和运算保留更多的信息。

个人感想

就论文而言,格式很规整,但是感觉写的有些繁琐,几句话颠来倒去地说。实验设计非常详尽,控制变量做得很好,360度全方位验证了模型的优越性。

就模型而言,有效的发现了当前问题并相应的引入方法去解决,相当于有效的缝合了各方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/177652.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu 使用 nginx 搭建 https 文件服务器

Ubuntu 使用 nginx 搭建 https 文件服务器 搭建步骤安装 nginx生成证书修改 config重启 nginx 搭建步骤 安装 nginx生成证书修改 config重启 nginx 安装 nginx apt 安装: sudo apt-get install nginx生成证书 使用 openssl 生成证书: 到对应的路径…

【Mybatis-Plus】常见的@table类注解

目录 引入Mybatis-Plus依赖 TableName 当实体类的类名在转成小写后和数据库表名相同时 当实体类的类名在转成小写后和数据库表名不相同时 Tableld TableField 当数据库字段名与实体类成员不一致 成员变量名以is开头,且是布尔值 ​编辑 成员变量名与数据库关…

IDEA中application.properties文件中文乱码

现象: 原因: 项目编码格式与IDEA编码格式不一致导致的 解决办法: 在File->Settings->Editor->File Encodings选项中,将Global Encoding,Project Encoding,Default encoding for properties files这三个选项置为一致&a…

使用 Curl 和 DomCrawler 下载抖音视频链接并存储到指定文件夹

项目需求 假设我们需要从抖音平台上下载一些特定的视频,以便进行分析、编辑或其他用途。为了实现这个目标,我们需要编写一个爬虫程序来获取抖音视频的链接,并将其保存到本地文件夹中。 目标分析 在开始编写爬虫之前,我们需要了…

QQ文件怎么恢复?3个方法解决文件丢失问题!

无论是在学习还是工作中,我们都有可能需要接触到QQ这款软件。QQ传输文件十分方便,因此仍然有许多小伙伴喜欢用QQ来发送各种类型的文件。对于大家来说,最害怕的莫过于重要的文件出现丢失的情况。 当我们发现QQ文件意外删除或者过期时该怎么办…

k8s之集群调度

目录 调度 工作机制 调度过程 调度算法 优先级 指定调度节点 调度 Kubernetes 是通过 List-Watch 的机制进行每个组件的协作,保持数据同步的,每个组件之间的设计实现了解耦。 用户是通过 kubectl 根据配置文件,向 APIServer 发送命令…

【java学习—十】操作集合的工具类Collections(8)

文章目录 1. 操作集合的工具类: Collections2. 应用3. 查找、替换3.1. max 与 min3.2. 根据Comparator返回max(min) 3.3. frequency 与 replaceAll4. 同步控制 1. 操作集合的工具类: Collections Collections 是一个操作 Set 、List 和 Map 等集合的工具…

嵌入式Linux系统的闪存设备和文件系统学习纪要

嵌入式Linux系统的闪存设备和文件系统学习纪要 Linux下的文件系统结构如下: NAND Flash 是一种非易失性存储器(Non-Volatile Memory),常用于闪存设备和固态硬盘(SSD)中。以下是几种常见的 NAND Flash 种类&…

PTA 函数题(C语言)-- 阶乘计算升级版

题目title: 阶乘计算升级版 题目作者: 陈越 浙江大学 本题要求实现一个打印非负整数阶乘的函数。 函数接口定义: void Print_Factorial ( const int N ); 其中N是用户传入的参数,其值不超过1000。如果N是非负整数&#…

C#Onnx模型信息查看工具

效果 Netron效果 项目 代码 using Microsoft.ML.OnnxRuntime; using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms;namespace Onnx_Demo {public partial class frmMain : Form{public frmMain(){InitializeComponent();}string…

VS2022 开发方式

使用 C# 在VS 2022 上开发时,发现有多种项目类型可以创建。这些类型放一起容易搞混,于是记录一下各种类型的区别。 这里主要介绍windows控制台程序、MFC程序、WPF程序、WinForm程序的特点。 创建哪种应用? 创建控制台应用 Windows控制台程序…

【数据挖掘 | 数据预处理】缺失值处理 重复值处理 文本处理 确定不来看看?

🤵‍♂️ 个人主页: AI_magician 📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。 👨‍💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!&…

Centos虚拟机安装配置与MobaXterm工具及Linux常用命令

目录 一、Centos操作系统 1.1 Centos介绍 1.2 Centos虚拟机安装 1.3 配置centos的镜像 1.4 虚拟机开机初始设置 1.4.1 查看网络配置 1.4.2 编辑网络配置 二、MobaXterm工具 2.1 MobaXterm介绍 2.2 MobaXterm安装 2.3 切换国内源 三、Linux常用命令和模式 3.1 查看网络配置 …

“2024中国电子信息展会“百年历史展会,4月深圳,7月成都,11月上海

2024年中国电子信息博览会,将如一位游历全国的使者,跨越千山万水,让人们见证中国电子信息产业的辉煌成就。它的足迹将遍布全国多个地区,4月走进繁花似锦的深圳,7月拥抱历史悠久的成都,11月则落脚国际化的上…

CloudCompare 二次开发(20)——二次曲面拟合

目录 一、概述二、代码集成三、结果展示本文由CSDN点云侠原创,原文链接。爬虫网站自重。 一、概述 由CloudCompare——点云二次曲面拟合一文知:CloudCompare软件中的已经集成了二次曲面拟合功能,但是计算出来的拟合参数是不正确的。因此,本文在原有算法的基础上进行修改,…

LSF 概览——了解 LSF 是如何满足您的作业要求,并找到最佳资源来运行该作业的

LSF 概览 了解 LSF 是如何满足您的作业要求,并找到最佳资源来运行该作业的。 IBM Spectrum LSF ("LSF", load sharing facility 的简称) 软件是行业领先的企业级软件。LSF 将工作分散在现有的各种 IT 资源中,以创建共享的,可扩展…

Jupyter notebook如何加载torch环境

默认你已经安装了anaconda 和 pytorch 环境。 1,必须要以管理员身份打开 Anaconda prompt终端, 2,进入pytorch环境中: conda activate pytorch_393,安装必要插件: (1)conda inst…

前端如何不变形的渲染图片大小和图片上的内容

在做前端项目时可能经常会页面图片大小变形或者压缩的情况,一般情况就是height给100%,width给auto就可以了满足大部分使用情况了。有时候需要做一些比较复杂的功能,比如需要在图片上增加锚点,而且图片在适配各种屏幕大小时&#x…

Revit AddIn问题:无法运行外部运行程序“xxxxx“,请与供应商联系以获取帮助,供应商提供给Revit的身份信息为:xxxxxx

1.在二次开发的时候遇到的问题如下 2.参考的: Revit插件加载,addin文件的设置_不存在与应用程序附加模块对应的名称节点-CSDN博客 3.我的解决 确实是路径“C:\ProgramData\Autodesk\Revit\Addins\2018”下的AddIn文件出问题了。因为我安装了2019版本然…

okhttp post请求 header post参数加密遇到的两个问题

如果你对于网络请求用了https后是否还有必要对参数加密有疑问可以看我上篇的文章:网络安全https 记得耐心看完,下面说问题: Caused by: java.lang.IllegalArgumentException: Unexpected char 0x0a 一开始以为是okhttp框架对特殊字符做了现在…