You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用多组同结构数据集训练同一Keras LSTM模型?

解决多时间序列数据集训练同一LSTM的问题

方案1:合并所有数据集后一次性训练

把所有同规格的输入和标签数据合并成大矩阵,一次性完成训练,适合数据量能放入内存的场景。

import numpy as np

# 假设x1~x120均为形状(n_samples, 5, 4)的数组,y1~y120为(n_samples, 1)的数组
# 合并所有输入数据
X_all = np.concatenate([x1, x2, x3, ..., x120], axis=0)
# 合并所有标签数据
y_all = np.concatenate([y1, y2, y3, ..., y120], axis=0)

# 模型初始化与编译仅执行一次
model_seq = Sequential()
model_seq.add(InputLayer((5,4)))
model_seq.add(LSTM(64))
model_seq.add(Dense(8,"relu"))
model_seq.add(Dense(1,"linear"))

opti2=Adam(learning_rate=0.0001)
model_seq.compile(loss="mse", optimizer=opti2, metrics="mae")

# 用合并后的数据集训练,开启shuffle打乱数据避免模型连续学习单一数据集规律
model_seq.fit(X_all, y_all, epochs=50, batch_size=16, verbose=1, shuffle=True)

方案2:循环遍历数据集逐步累积训练

如果数据量过大无法一次性加载,可循环遍历每个数据集训练,但必须确保仅编译模型一次,避免重置权重和优化器状态。

# 初始化并编译模型(仅执行一次)
model_seq = Sequential()
model_seq.add(InputLayer((5,4)))
model_seq.add(LSTM(64))
model_seq.add(Dense(8,"relu"))
model_seq.add(Dense(1,"linear"))

opti2=Adam(learning_rate=0.0001)
model_seq.compile(loss="mse", optimizer=opti2, metrics="mae")

# 将所有数据集存入列表
datasets = [(x1,y1), (x2,y2), ..., (x120,y120)]

# 循环训练每个数据集
for idx, (x, y) in enumerate(datasets):
    print(f"训练第{idx+1}组数据集")
    # 每组数据训练的轮数可按需调整,shuffle=True打乱当前数据集
    model_seq.fit(x, y, epochs=2, batch_size=16, verbose=1, shuffle=True)

方案3:用tf.data.Dataset构建流式数据集(超大数据场景)

若总数据量远超内存容量,可借助TensorFlow的流式数据集实现分批加载训练。

import tensorflow as tf

# 将每个数据集转为tf.data.Dataset格式
dataset_list = [tf.data.Dataset.from_tensor_slices((x, y)) for x, y in datasets]

# 合并所有数据集,打乱后分批
combined_dataset = tf.data.Dataset.concatenate(*dataset_list)
combined_dataset = combined_dataset.shuffle(buffer_size=10000).batch(16)

# 模型初始化与编译(仅执行一次)
model_seq = Sequential()
model_seq.add(InputLayer((5,4)))
model_seq.add(LSTM(64))
model_seq.add(Dense(8,"relu"))
model_seq.add(Dense(1,"linear"))

opti2=Adam(learning_rate=0.0001)
model_seq.compile(loss="mse", optimizer=opti2, metrics="mae")

# 训练流式数据集
model_seq.fit(combined_dataset, epochs=50, verbose=1)

额外注意:数据归一化

由于各时间序列终点值差异大,数据分布不均可能导致模型训练不稳定,建议:

  • 对每个时间序列单独做归一化(如缩放到[0,1]区间),预测时再反归一化还原真实值;
  • 若数据集整体分布差异不大,可计算全局均值和标准差做统一归一化。

内容的提问来源于stack exchange,提问作者omer_tb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 18:43:12