keras中的LSTM、输入形状、时间步长与nfeatures

keras中的LSTM、输入形状、时间步长与nfeatures,keras,lstm,Keras,Lstm,我正在使用LSTM层与keras一起开发一个预测模型,但在理解如何格式化输入数据时遇到了问题(模型也会根据输入格式返回nan) 我会尽量给你一个清楚的解释 让我们调用X我的输入数据,y我的输出数据。两者都是形状相同的数组 X.shape = (20, 1001) y.shape = (20, 1001) 基本上是20个样本,每个样本有1001个值 现在,让我们定义一个简单的LSTM模型: model = Sequential() model.add(LSTM(32,activation='

我正在使用LSTM层与keras一起开发一个预测模型,但在理解如何格式化输入数据时遇到了问题(模型也会根据输入格式返回nan)

我会尽量给你一个清楚的解释

让我们调用X我的输入数据,y我的输出数据。两者都是形状相同的数组

X.shape = (20, 1001)  
y.shape = (20, 1001)
基本上是20个样本,每个样本有1001个值

现在,让我们定义一个简单的LSTM模型:

model = Sequential()
model.add(LSTM(32,activation='relu', input_shape=XXX ))
model.add(Dense(y.shape[1]))
输入形状(XXX)暂时保留为空白

密集层是输出数据。因此,其长度为一个样本(1001)

LSTM层的输入形状为3D:(样本、时间步长、特征)

因此,我的输入数据可以重新格式化,也可以考虑使用1001个特性的1 timestep示例

X=trainX.reshape( (trainX.shape[0], 1, trainX.shape[1]) )
这将在图层定义中提供一个输入形状

input_shape=(1, trainX.shape[1])
或者考虑使用1个功能的1001个时间步

X=trainX.reshape( (trainX.shape[0], trainX.shape[1], 1) )
以及相应的输入_形状

input_shape=(trainX.shape[1], 1)
第一个配置(1个timestep,1001个特性)可以工作

第二种配置(1001个时间步,1个功能)不起作用。训练很快返回nan值

我的问题是,为什么第二个解决方案会返回nan值(我猜我可能误解了timesteps的含义)

从概念上讲,将输入数组视为一个功能和几个时间步对我来说比相反更有意义

在最好的情况下,我会尝试两种方法以获得最好的结果

还有一件事!假定LSTM保留一些内存(考虑到该值具有读取方向,然后可以使用双向嵌入层以相反方向读取)。 如果数据显示为一个时间步,但有几个特征,那么数组的“方向性”是否仍然有意义


很抱歉发了这么长的帖子,希望有人能对此有所了解

1001的时间序列太大,如果你使用它,你会有消失梯度问题或爆炸梯度问题,在你的情况下,爆炸梯度使你的值太大。

好的,这将解释问题。可以使用的时间步长范围是多少?这个问题没有具体的答案,但您可以尝试不同的长度。