LSTM 模型有一个相关的损失图,并返回一个恒定的预测值

问题描述 投票:0回答:1

我的数据集有 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)

这就是针对前 50 个测试标签值绘制的结果。

我几乎不知所措,任何帮助将不胜感激。

python keras neural-network regression lstm
1个回答
0
投票

看了评论,问题是由两个因素造成的:

  1. 您可以改进数据的预处理:(i) 执行缩放并 (ii) 确保没有丢失样本。
  2. 您可以改进模型的架构,特别是可以增加 LSTM 层中 LSTM 单元的数量。另外,尝试设置一两个级别;三个可能太多了。
© www.soinside.com 2019 - 2024. All rights reserved.