教LSTMs不同频率的概念

时间:2018-04-21 14:46:59

标签: python tensorflow neural-network keras lstm

在正弦波上训练LSTM非常简单。 LSTM很容易理解如何预测未来几百次的波浪。

然而,一旦我试图让它预测不同频率的正弦波,LSTM就变得非常无能。即使我尝试在不同频率的许多波浪上训练它,它也会忘记第一波学习下一波。我改变测试数据频率时LSTM失败的一个例子:

enter image description here

如何训练我的LSTM识别频率的概念并对任何正弦曲线起作用?

编辑:

我正在使用的模型:

inputs = Input(shape=(self.timesteps, self.features))

bd_seq = Bidirectional(LSTM(128, return_sequences=True,
                                    kernel_regularizer='l2'),
                               merge_mode='sum')(inputs)
bd_sin = Bidirectional(LSTM(32, return_sequences=True,
                                    kernel_regularizer='l2'),
                               merge_mode='sum')(bd_seq)

bd_1 = Bidirectional(LSTM(self.features, activation='linear'),
                             merge_mode='sum')(bd_seq)
bd_2 = Bidirectional(LSTM(self.features, activation='tanh'),
                             merge_mode='sum')(bd_sin)
output = Add()([bd_1, bd_2])

self.model = Model(inputs=inputs, outputs=output)

1 个答案:

答案 0 :(得分:1)

  

“......它忘记了第一波学习下一个......”

这让我觉得......你在训练一个序列,然后是另一个序列,然后是另一个序列?

对于任何模型的任何问题,自然会失败。

您必须在同一批次中训练大量序列,或者,如果一次一个序列,则每个时期永远不会超过一次。

freqs = list_of_frequencies
sinusoids = []
for freq in freqs:
    sinusoids.append(create_a_sinusoid(freq))

training_data = np.array(sinusoids).reshape((freqs,timesteps,features))

帮助该模型的可能技巧:

  • 在输入数据中添加频率作为功能(适用于所有步骤)(如果您知道它作为输入)
  • 使模型输出频率(如果您知道它作为输出)并在频率上训练它。
  • 您可以将识别频率的模型与读取这些频率的模型相结合,以预测所需的输出