我知道LSTM层需要3维输入(样本,时间步长,特征)。但是,数据的哪个维度被视为一个序列。 阅读一些我理解的站点是及时的,所以我尝试创建一个简单的问题进行测试。 在此问题中,LSTM模型需要将时间步维中的值相加。然后,假设模型将考虑时间步长的先前值,则模型应将这些值的总和作为输出返回。
我尝试拟合4个样本,结果不佳。我的推理有意义吗?
import numpy as np
from keras.models import Sequential
from keras.layers import Dense, LSTM
X = np.array([
[5.,0.,-4.,3.,2.],
[2.,-12.,1.,0.,0.],
[0.,0.,13.,0.,-13.],
[87.,-40.,2.,1.,0.]
])
X = X.reshape(4, 5, 1)
y = np.array([[6.],[-9.],[0.],[50.]])
model = Sequential()
model.add(LSTM(5, input_shape=(5, 1)))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')
model.fit(X, y, epochs=1000, batch_size=4, verbose=0)
print(model.predict(np.array([[[0.],[0.],[0.],[0.],[0.]]])))
print(model.predict(np.array([[[10.],[-10.],[10.],[-10.],[0.]]])))
print(model.predict(np.array([[[10.],[20.],[30.],[40.],[50.]]])))
输出:
[[-2.2417212]]
[[7.384143]]
[[0.17088854]]
答案 0 :(得分:3)
首先,是的,没错,timestep
是维作为数据序列。
接下来,我认为您对这一行的含义有些困惑
”,假设模型将考虑 时间步长”
在任何情况下,LSTM都不采用时间步长的先前值,而是采用最后一个时间步长的输出激活功能。
此外,输出错误的原因是因为您使用的数据集非常小,无法训练模型。回想一下,无论您在机器学习中使用哪种算法,都将需要许多数据点。在您的情况下,仅4个数据点不足以训练模型。我使用了一些参数,这是示例结果。
但是,请记住这里有一个小问题。我在0到50之间初始化了训练数据。因此,如果您对该范围之外的任何数字进行预测,那么它将不再准确。数字离该范围越远,精度越低。这是因为,与加法相比,它已成为更多的功能映射问题。通过函数映射,我的意思是您的模型将学习将训练集中的所有值(假设已在足够的纪元时间内进行训练)映射到输出。您可以进一步了解here。