Python 具有一个热编码数据的LSTM的输入形状

Python 具有一个热编码数据的LSTM的输入形状,python,machine-learning,keras,deep-learning,time-series,Python,Machine Learning,Keras,Deep Learning,Time Series,示例数据集包含用户的位置点 df.head() user tslot Location_point 0 0 2015-12-04 13:00:00 4356 1 0 2015-12-04 13:15:00 4356 2 0 2015-12-04 13:30:00 3659 3 0 2015-12-04 13:45:00 4356 4 0 2015-12-04 14:00:00

示例数据集包含用户的位置点

df.head()

   user           tslot         Location_point
0   0   2015-12-04 13:00:00     4356
1   0   2015-12-04 13:15:00     4356
2   0   2015-12-04 13:30:00     3659
3   0   2015-12-04 13:45:00     4356
4   0   2015-12-04 14:00:00     8563

df.shape 

(288,3)
由于位置点是分类值,因此它们是一个热编码

encoded = to_categorical(df['Location_point'])
编码值如下所示

[[0. 0. 0. ... 0. 0. 0.]
 [0. 0. 0. ... 0. 0. 0.]
 [0. 0. 0. ... 0. 0. 0.]
 ...
 [0. 0. 0. ... 0. 0. 0.]
 [0. 0. 0. ... 0. 0. 0.]
 [0. 0. 0. ... 0. 0. 0.]]
编码值的形状为2888564

我试图塑造训练数据

X_trai = []
y_trai = []
for i in range(96, 288):
    X_trai.append(encoded[i-96:i])
    y_trai.append(encoded[i])
X_trai, y_trai = np.array(X_trai), np.array(y_trai)

X_trai = np.reshape(X_trai, (X_trai.shape[0], X_trai.shape[1], 1))
模型是

regressor = Sequential()

regressor.add(LSTM(units = 50, return_sequences = True, input_shape = (X_trai.shape[1], 1)))
regressor.add(Dropout(0.2))

regressor.add(LSTM(units = 50, return_sequences = True))
regressor.add(Dropout(0.2))

regressor.add(LSTM(units = 50, return_sequences = True))
regressor.add(Dropout(0.2))

regressor.add(LSTM(units = 50))
regressor.add(Dropout(0.2))

regressor.add(Dense(units = 1))

regressor.compile(optimizer = 'adam', loss = 'mean_squared_error')

regressor.fit(X_trai, y_trai, epochs = 100, batch_size = 32)
这不是正确的型号。我对深度学习还不熟悉。我试图看到一些例子,但无法理解一个热编码。如果有人能解释输入形状、输出形状和正确的模型,我将不胜感激

The input is the sequence of the location points and the output is to predict
 the next location point for that user.

输入形状取决于您的数据,如果您有一个具有288个时间步长和8564个特征的单个样本,则您的输入形状将为batch_size=1,timesteps=288,n_features=8564,如果您有一个时间步长的288个样本,则将为batch_size=288,timesteps=1,n_features=8564

无论如何,这里有一个关于如何为LSTM模型准备数据的教程。

LSTM的输入形状如下所示:

具有形状批次大小、时间步长、输入尺寸的三维张量,具有形状批次大小、输出尺寸的可选二维张量

Timesteps将是您的时间序列长度,输入的功能数量取决于您拥有的功能数量,在这种情况下,因为它们是一个热编码的,所以将是8564

输出形状将取决于模型的体系结构

第一层提供批处理大小、时间步长和单位的输出 第二层:批量大小、时间步长、单位 第三层:批量大小,单位 最后一层:批量大小,1 但是,您可以使用以下工具检查模型输入/输出形状:

regressor.input\u shape和regressor.output\u shape


<>最后,你为什么不把你的Loop-SoPoT当作一个数字变量?

也可以,请你发布错误。我认为它需要输入的三维形状。是的,但我不知道如何将数据转换成三维。你能根据我的数据建议我的输入吗?你能发布错误吗?ValueError:检查输入时出错:预期密集的3_输入为二维,但得到了形状为12888654的数组。错误是关于输入的形状。我想Kevin已经尝试回答了这个问题。Hello@Kevin,很抱歉回答得太晚。我看了你上面提到的那本书,但找不到解决我问题的办法。我尝试了所有的输入形状,但失败了。我不能把定位点看作数值。在预测值时,模型输出随机值,但位置点是特定的分类值,应使用一个热编码进行预测。你能详细写出输入的形状吗?如果有什么事,请告诉我。谢谢