给定连续数据的x,y坐标,我将如何使用RNN / LSTM来学习速度变化? (我必须使用一个循环层,因为这是一个更大的端到端模型的子问题,它也可以做其他事情)
训练数据示例:
x,y,speed_changed
0,0,0
0,0.1,0
0,0.2,0
0,0.3,0
0,0.5,1
0,0.6,0
0,0.7,0
...
到目前为止,我构建了有状态的LSTM并将其每批训练为一个项目。之后,每次速度发生变化时,我都会重置LSTM的状态,因此我了解到某个段具有相同的速度(段可以具有不同的长度)。
然后,由于段的长度不同,如何在生产中使用这种模型?
或者是否有更好的方法来训练此类数据的递归网络?也许是异常检测? (我想避免使用固定的批量大小(例如3帧的窗口))
RNN和LSTM的结构不允许您直接进行,这就是原因-RNN的激活函数为:h(t)= Tanh(W * h(t-1)+ U * x(t)+偏差)请注意,无论您使用RNN多少个时间范围,W,U和偏差都相同。因此,给定一些X向量,输出将是p1 * X1 + p2 * X2的函数,依此类推,其中X1是示例中的X,X2是Y。
但是-要检测速度变化-您需要进行其他计算。速度变化表示在时间范围1和2之间以及在时间范围2和3之间走过的距离不同。行进距离为SQRT((X1(t)-X1(t-1))^ 2 +(X2(t)-X2(t-1))^ 2)。这意味着您需要一个在某种程度上考虑X1 * X1的激活函数-这在RNN或LSTM中是不可能的。]
但是,您可以使用自定义激活函数来间接实现所需的功能,该函数可以计算最近时间范围内经过的距离。看一下this link。通过使用自定义激活函数,可以插入X1(t),X2(t),X1(t-1),X2(t-1)的向量并计算距离D。在t = 1时,您可以使用0为X1(t = 0)和X2(t = 0)。
您的自定义激活函数应类似于D =(X1(t)-X1(t-1))^ 2 +(X2(t)-X2(t-1))^ 2。这样-如果时间间隔之间的速度相同,则将为RNN提供恒定的D值,因此您希望RNN获得权重,该权重将模拟D(t)-D(t-1)的函数。