Machine learning 训练LSTM生成正弦波-梯度下降并不是将输出设置在我想要的位置

Machine learning 训练LSTM生成正弦波-梯度下降并不是将输出设置在我想要的位置,machine-learning,lstm,recurrent-neural-network,gradient-descent,Machine Learning,Lstm,Recurrent Neural Network,Gradient Descent,我正在尝试生成多对多的RNN。下面是该文件的结构 每个数据样本由4000个时间步组成。输入是一个阶跃信号,其振幅决定要生成的正弦波的频率。输出为该频率的正弦波。我希望模型使用其“内存”中的最后n个输入在时间步n生成输出 该模型是使用Keras顺序API构建的。下面是它的代码: time_samples = 4000 model = tf.keras.Sequential() model.add(tf.keras.layers.LSTM(20, batch_input_shape = (1,t

我正在尝试生成多对多的RNN。下面是该文件的结构

每个数据样本由4000个时间步组成。输入是一个阶跃信号,其振幅决定要生成的正弦波的频率。输出为该频率的正弦波。我希望模型使用其“内存”中的最后n个输入在时间步n生成输出

该模型是使用Keras顺序API构建的。下面是它的代码:

time_samples = 4000

model = tf.keras.Sequential()

model.add(tf.keras.layers.LSTM(20, batch_input_shape = (1,time_samples, 1), 
                               kernel_initializer = 'random_uniform',
                               bias_initializer = 'random_uniform', 
                               return_sequences = True,  activation = 'tanh'))

model.add(tf.keras.layers.TimeDistributed(Dense(1, 
                                                kernel_initializer = 'random_uniform',
                                                bias_initializer = 'random_uniform')))

model.compile(loss = 'mse', optimizer = 'adam')

epochs = 50

history = model.fit(x_train, y_train, epochs = epochs, batch_size = 1, verbose = 2, shuffle = False)
如果我理解正确,时间分布层将最终密集层的相同权重应用于时间步长中的每个输出。LSTM将返回每个时间步的输出,而不是最后一个时间步的输出,因为我要求它返回序列

我的想法是,在每个历元中,我每次从上面显示的5个样本中抽取一个样本(一个历元中有5个样本),然后进行训练。因此,在每个历元中,权重有5次更新。问题是梯度下降高原;它正在学习找到正弦曲线的平均点,并在那里画一条常数线()

不幸的是,我不明白为什么模型会这样做。我认为我不应该使用状态模型——批之间的样本彼此独立。它是否与我的初始重量和偏差分布,或MSE损失函数有关