Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 教授LSTM不同频率的概念_Python_Tensorflow_Neural Network_Keras_Lstm - Fatal编程技术网

Python 教授LSTM不同频率的概念

Python 教授LSTM不同频率的概念,python,tensorflow,neural-network,keras,lstm,Python,Tensorflow,Neural Network,Keras,Lstm,在正弦波上训练LSTM非常简单。LSTM很容易理解如何预测未来数百个时间步的波浪 然而,一旦我试图让LSTM预测一个不同频率的正弦波,它就变得非常不合适了。即使我尝试在不同频率的许多波上训练它,它也会忘记第一个波来学习下一个波。当我更改测试数据的频率时,我的LSTM如何失败的示例: 如何训练我的LSTM识别频率的概念并处理任何正弦信号 编辑: 我正在使用的模型: inputs = Input(shape=(self.timesteps, self.features)) bd_seq = Bi

在正弦波上训练LSTM非常简单。LSTM很容易理解如何预测未来数百个时间步的波浪

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

如何训练我的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)
“…它忘记了第一次浪潮而学习下一次…”

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

当然,对于任何模型的任何问题,这都会失败

您必须在同一批中训练许多序列,或者,如果一次训练一个序列,则每个历元的训练次数不得超过一次

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

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

帮助模型的可能技巧:

  • 在输入数据中添加频率作为特征(对于所有步骤)(如果您知道它是输入)
  • 使模型输出频率(如果您知道它是输出),并对其进行频率培训
  • 您可以将识别频率的模型与读取这些频率以预测所需输出的模型相结合

好问题!你试过多层LSTM吗?也就是说,一个LSTM RNN的输出馈送到另一个LSTM(第二层)的输入,依此类推,直到最后一层输出到损耗函数。这是一种常见的架构,可以提高精度,在这种情况下可能会有所不同。完整模型高于Hi-Dan,+1目前,我仍然需要等待我的模型完成培训,然后我将其标记为已接受。如果您能将您的答案稍微扩展一点,包括处理在整个信号中变化的不同振幅/振幅,我将非常感激。谢谢这会变得更复杂。。。你的意思是,仅仅看到一个序列并尝试扩展它?或者你的意思是增加更多的参数,并试图以某种方式控制它?看一个序列,并尝试扩展它,然后它只是训练的例子。如果图层成倍增加,那么您使用的两个分支的想法可能会很好?就像一个层的振幅参数很少,另一个层的正弦波参数很多?(这就是现在的specultation)你认为标准化数据是处理振幅的好方法吗?