Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tensorflow LSTM模型考虑数据序列的维度是什么?_Tensorflow_Keras_Lstm - Fatal编程技术网

Tensorflow LSTM模型考虑数据序列的维度是什么?

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

我知道LSTM层需要一个三维输入(样本、时间步、特征)。但哪一个维度的数据被视为序列。 阅读一些网站,我明白这是时间步,所以我尝试创建一个简单的问题来测试。 在这个问题中,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]]

首先,您是对的,
timestep
是作为数据序列的维度

接下来,我想你对这句话的意思有些困惑

假设模型将考虑以前的值 “时间步”

在任何情况下,LSTM都不采用时间步长的先前值,而是采用最后一个时间步长的输出激活函数

另外,输出错误的原因是,您使用的是一个非常小的数据集来训练模型。回想一下,无论在机器学习中使用什么算法,都需要很多数据点。在您的情况下,4个数据点不足以训练模型。我使用了更多的参数,下面是示例结果

但是,请记住,这里有一个小问题。我初始化了0到50之间的训练数据。所以,如果你对这个范围之外的任何数字进行预测,这将不再准确。距离此范围越远,精确度越低。这是因为,与加法相比,它更像是一个函数映射问题。通过函数映射,我的意思是,您的模型将学习将训练集中的所有值映射到输出(前提是它经过了足够多的历元训练)。你可以了解更多