Tensorflow LSTM模型考虑数据序列的维度是什么?
我知道LSTM层需要一个三维输入(样本、时间步、特征)。但哪一个维度的数据被视为序列。 阅读一些网站,我明白这是时间步,所以我尝试创建一个简单的问题来测试。 在这个问题中,LSTM模型需要将时间步长维度中的值相加。然后,假设模型将考虑时间步长的先前值,它应该作为输出返回值的和。 我试着拟合4个样本,结果不太好。我的推理有意义吗Tensorflow LSTM模型考虑数据序列的维度是什么?,tensorflow,keras,lstm,Tensorflow,Keras,Lstm,我知道LSTM层需要一个三维输入(样本、时间步、特征)。但哪一个维度的数据被视为序列。 阅读一些网站,我明白这是时间步,所以我尝试创建一个简单的问题来测试。 在这个问题中,LSTM模型需要将时间步长维度中的值相加。然后,假设模型将考虑时间步长的先前值,它应该作为输出返回值的和。 我试着拟合4个样本,结果不太好。我的推理有意义吗 import numpy as np from keras.models import Sequential from keras.layers import Dense
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]]
首先,您是对的,
timestep
是作为数据序列的维度
接下来,我想你对这句话的意思有些困惑
假设模型将考虑以前的值
“时间步”
在任何情况下,LSTM都不采用时间步长的先前值,而是采用最后一个时间步长的输出激活函数
另外,输出错误的原因是,您使用的是一个非常小的数据集来训练模型。回想一下,无论在机器学习中使用什么算法,都需要很多数据点。在您的情况下,4个数据点不足以训练模型。我使用了更多的参数,下面是示例结果
但是,请记住,这里有一个小问题。我初始化了0到50之间的训练数据。所以,如果你对这个范围之外的任何数字进行预测,这将不再准确。距离此范围越远,精确度越低。这是因为,与加法相比,它更像是一个函数映射问题。通过函数映射,我的意思是,您的模型将学习将训练集中的所有值映射到输出(前提是它经过了足够多的历元训练)。你可以了解更多