【问题标题】:Force LSTM Keras to use time series dependencies强制 LSTM Keras 使用时间序列依赖
【发布时间】:2017-10-18 20:39:17
【问题描述】:

我有两个时间序列 A 和 B:

A: 1,2,3,1,2,3,3,3,1,2,3,3,3  
B: 0,0,1,0,0,1,1,1,0,0,1,1,1

这个简单的训练集说信号 B 与 A 相关。实际上每次 A 等于 3,在同一时间戳,在 B 中,值是 1。

我介绍上面的例子只是为了解释我的问题。当我使用带有 Keras 的 LSTM 预测数据时,我希望模型能够从系列中理解这种依赖关系。

现在我使用这个配置:

model.add(keras.layers.LSTM(hidden_nodes, activation='sigmoid', input_dim=num_features, input_length=window, consume_less="mem"))
model.add(keras.layers.Dense(num_features, activation='sigmoid'))

optimizer = keras.optimizers.SGD(lr=learning_rate, decay=1e-6, momentum=0.9, nesterov=True)

但我看到 LSTM 预测值没有明显使用时间序列之间的依赖关系。如果我以 5 的窗口进行预测,以预测下一个点:

A: [1,2,3,1,2]
B: [0,0,1,0,0]

我希望 LSTM 给我 A 的值 3 和 B 的值 1,因为下面的训练集说明了这一点。

问题是我的网络似乎在使用信号时没有对信号依赖性给予适当的重视。

【问题讨论】:

    标签: python time-series keras lstm


    【解决方案1】:

    你应该只有一个系列有两个功能。

    如果 A 和 B 是列表(不是 numpy 数组):

    fullSeq = np.array(A + B)
    #this shape is (lenA + lenB,)
    
    fullSeq = fullSeq.reshape((2,len(A)))
    fullSeq = fullSeq.swapaxes(0,1).reshape((1,len(A),2))
    
    #make sure that the resulting array is something like [[[1,0],[2,0],[3,1],...]]
    

    现在您有一个带有num_features=2 的序列。 A和B现在完全依赖了。

    【讨论】:

    • 可以,但是和信号依赖有关?
    • 我不明白你的问题。
    • 好的,我试着解释得更好。另外,如果我按照您上面写的操作,似乎网络没有考虑信号 A 和信号 B 之间的依赖关系。例如,我不能在 B(或 A)上使用回归算法,因为它们是相关的。
    • 例如,这种方法将 A 和 B 视为音频信号的左右声道。当您像这样将它们放在一起(作为输入)时,它们将在一起直到模型结束。您可以使用任何回归算法,并且此回归将同时作用于两个序列。
    猜你喜欢
    • 2018-02-06
    • 1970-01-01
    • 2018-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多