我的数据集有 597515 行、31 列,测量一个变量。所以输入形状 (31,1)。
import pandas as pd
import tensorflow as tf
gpu_devices = tf.config.experimental.list_physical_devices("GPU")
for device in gpu_devices:
tf.config.experimental.set_memory_growth(device, True)
raw_dataset = pd.read_csv('data.csv').drop(columns=['Unnamed: 0'])
train_set = raw_dataset.sample(frac=0.8, random_state=42)
test_set = raw_dataset.drop(train_set.index)
import numpy as np
train_features = train_set.copy()
test_features = test_set.copy()
train_labels = train_features.pop('T+1')
test_labels = test_features.pop('T+1')
train_features = train_features.to_numpy().reshape(train_features.shape[0], 31, 1)
test_features = test_features.to_numpy().reshape(test_features.shape[0], 31, 1)
这是我的模型。参数是通过 Optuna 确定的,尽管我发现不同的配置会导致相同的现象,只是值不同。
model = tf.keras.Sequential()
model.add(tf.keras.layers.LSTM(11,return_sequences=True))
model.add(tf.keras.layers.LSTM(4, return_sequences=True))
model.add(tf.keras.layers.LSTM(13, return_sequences=False))
model.add(tf.keras.layers.Dense(1))
model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.0940840143887362),
loss=tf.keras.losses.MeanAbsoluteError(),
metrics=['mae', 'mse']
)
history = model.fit(train_features,
train_labels,
validation_split=0.2,
batch_size=65536,
epochs=100,
verbose=True
)
最终得到如下损失图
查看预测,我得到以下相同的值
array([[-9.407474],
[-9.407474],
[-9.407474],
...,
[-9.407474],
[-9.407474],
[-9.407474]], dtype=float32)
我几乎不知所措,任何帮助将不胜感激。
看了评论,问题是由两个因素造成的: