嘿大家,
我正在研究 TensorFlow 中的 LSTM 网络,该网络根据前 12 个月的相同值预测一个月内不同产品类别的价格指数值。不幸的是,我在尝试预测时遇到了一些问题。我的数据集(数据)基本上如下所示:
产品 1 价格指数 | 产品 2 价格指数 | ... | 产品 128 价格指数 | 产品 129 价格指数 | ||
---|---|---|---|---|---|---|
第 1 个月 | 99.1 | 99.5 | ... | 100 | 100.2 | |
第 2 个月 | 100.6 | 101 | ... | 100.3 | 100.6 | |
... | ... | ... | ... | ... | ... | |
第 305 个月 | 150 | 124 | ... | 135 | 136 | |
第 306 个月 | 151 | 126 | ... | 137 | 136.2 |
我做了一些预处理,但没有进行任何重新缩放/标准化,因为输入/输出值都是从 100 开始的所有索引,因此具有相同的比例:
#Split in training and test set
train_size = int(len(data) * 0.9)
test_size = len(data) - train_size
train, test = data.iloc[0:train_size], data.iloc[train_size:len(data)]
print(len(train), len(test))
#Create dataset
def create_dataset(X, time_steps=1):
Xs, ys = [], []
for i in range(len(X) - time_steps):
v = X.iloc[i:(i + time_steps)].values
Xs.append(v)
ys.append(X.iloc[i + time_steps])
return np.array(Xs), np.array(ys)
time_steps = 12
X_train, y_train = create_dataset(train, time_steps)
X_test, y_test = create_dataset(test, time_steps)
print(X_train.shape, y_train.shape)
产生以下输出:
(263, 12, 129) (263, 129)
我的模型如下所示:
tf.keras.backend.clear_session
model = tf.keras.Sequential([
tf.keras.layers.LSTM(50, input_shape=(X_train.shape[1],X_train.shape[2])),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(129)
])
model.compile(loss='mae', optimizer='adam')
history = model.fit(X_train, y_train, epochs=500, batch_size=270, validation_data=(X_test, y_test), verbose=1, shuffle=False)
它没有错误并且可以训练。但是,当它完成训练并且我尝试使用 predict 来获取 X_train 的预测值(将它们与实际值进行对比)时,我得到以下输出:
array([[3.1375432, 2.9852755, 3.4141188, ..., 3.3334997, 3.0094063,
2.5739233],
[3.1375432, 2.9852755, 3.4141188, ..., 3.3334997, 3.0094063,
2.5739233],
[3.1375432, 2.9852755, 3.4141188, ..., 3.3334997, 3.0094063,
2.5739233],
...,
[3.1375432, 2.9852755, 3.4141188, ..., 3.3334997, 3.0094063,
2.5739233],
[3.1375432, 2.9852755, 3.4141188, ..., 3.3334997, 3.0094063,
2.5739233],
[3.1375434, 2.9852755, 3.4141188, ..., 3.3334997, 3.0094063,
2.5739233]], dtype=float32)
对于不同月份的预测,这基本上为我提供了完全相同的输出。此外,如果我尝试预测一个月,例如 X_train[1],我会从网络收到以下错误:
ValueError: Input 0 of layer sequential_11 is incompatible with the layer: expected ndim=3, found ndim=2. Full shape received: (None, 129)
虽然 X_train 的形状 = (12,129),但与网络预期的形状相同。有没有人可以指出我正确的方向并告诉我我做错了什么?
谢谢!