Machine learning 训练LSTM生成正弦波-梯度下降并不是将输出设置在我想要的位置
我正在尝试生成多对多的RNN。下面是该文件的结构 每个数据样本由4000个时间步组成。输入是一个阶跃信号,其振幅决定要生成的正弦波的频率。输出为该频率的正弦波。我希望模型使用其“内存”中的最后n个输入在时间步n生成输出 该模型是使用Keras顺序API构建的。下面是它的代码: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
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损失函数有关