如何将 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
层应用在最后一个默认轴。有关详细信息和说明,请参阅 。
我只是在玩 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
层应用在最后一个默认轴。有关详细信息和说明,请参阅