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

LSTM训练时得到4D数组怎么办?如何转换为要求的3D输入数组?

问题解决方法

你出现4D数组的核心原因是数据处理时多保留了分组维度(类别子文件夹维度/单类别下CSV的分组维度),没有把所有独立样本合并到第一维,按以下步骤调整即可:

维度定义确认

先明确你现有数据的维度属性:

  • 单份CSV共30行,对应LSTM要求的n_timesteps=30
  • 单份CSV去掉class、timestamp两列后共1662列,对应n_features=1662
  • 总样本数n_sample为所有子文件夹下CSV的总数:假设有N个类别子文件夹,每个子文件夹5份CSV,总样本数就是N*5

处理代码

直接用以下逻辑读取并拼接数据即可得到符合要求的3D数组:

import os
import numpy as np
import pandas as pd

# 配置根目录
data_root = "data"
sample_list = []
label_list = []

# 遍历类别子文件夹
for class_name in os.listdir(data_root):
    class_folder = os.path.join(data_root, class_name)
    if not os.path.isdir(class_folder):
        continue
    # 遍历当前类别下的所有CSV文件
    for csv_name in os.listdir(class_folder):
        if not csv_name.endswith(".csv"):
            continue
        # 读取CSV并提取特征列
        df = pd.read_csv(os.path.join(class_folder, csv_name))
        # 取第3列及之后的所有列为特征,形状为 (30, 1662)
        feature_arr = df.iloc[:, 2:].values
        sample_list.append(feature_arr)
        label_list.append(class_name)

# 堆叠所有样本得到最终3D输入
lstm_input = np.array(sample_list)
labels = np.array(label_list)

结果验证

打印lstm_input.shape,输出格式为(总样本数, 30, 1662)即为符合LSTM要求的3D数组。

如果你业务中单样本需要对应单个类别下的5份CSV拼接的长序列,只需要把每个类别下的5份CSV的特征按行拼接,得到形状为(30*5, 1662)的单样本特征再堆叠,最终得到的数组形状为(类别数, 150, 1662),依然是符合要求的3D结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 20:30:01