如何将 Pandas DataFrame 加载到 LSTM 模型中?

How can I load a Pandas DataFrame into a LSTM model?

我只是在玩 RNN,在将我的数据转换为适合我的模型的正确格式时遇到了问题。我有以下数据框:

    Apple   Pears   Oranges ID
0   1.00    2.09    4.11    0
1   1.38    1.73    5.13    1
2   1.68    2.28    6.91    2
3   1.50    2.69    8.93    3
4   1.35    2.63    12.25   4
5   1.52    3.09    12.20   5
6   1.63    3.63    13.68   6
7   2.01    4.92    16.21   7
8   2.52    4.01    18.79   8
9   3.10    5.49    24.05   9

ID 是 order/timesteps 我的数据。

我运行此命令尝试将其加载到时间序列数据集中:

Dataset = keras.preprocessing.timeseries_dataset_from_array(priceHistorydf, basketHistorydf, sequence_length=10)

但是当我尝试以此训练模型时,出现以下错误:

from tensorflow import keras
import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import *

X_train = priceHistorydf
y_train = basketHistorydf

model = Sequential()
model.add(TimeDistributed(Dense(10), input_shape=(X_train.shape[1:])))
model.add(Bidirectional(LSTM(8)))

model.add(Dense(8, activation='tanh'))
model.add(Dense(8, activation='tanh'))
model.add(Dense(y_train.shape[-1], activation='softmax'))

model.compile(loss='categorical_crossentropy', optimizer="adam")

# history = model.fit(X_train, y_train, epochs=2, batch_size=8)
history = model.fit(Dataset, epochs=2, batch_size=8)

错误:

 ValueError: `TimeDistributed` Layer should be passed an `input_shape ` with at least 3 dimensions, received: [None, 4]

我只是在猜测,但我意识到我没有明确让模型知道 ID 是时间步;但我不确定如何使用我的数据框将它传递给模型。

有什么建议吗?

主要问题是您设置的 input_shape 参数不正确(即 X_train 是原始数据,而不是生成的时间序列;因此 X_train.shape[1:] 不正确,因为输入形状)。由于您使用了 sequence_lenght=10 并且每个时间步都有 3 个特征,因此我们应该有 input_shape=(10,3)(当然,假设您首先从数据中删除 ID 列,因为那不是一个特征据说)。

旁注: Dense(...)TimeDistributed(Dense(...)) 完全相同,因为 Dense 层应用在最后一个默认轴。有关详细信息和说明,请参阅