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

如何将多时序位置数据适配Keras LSTM进行时间序列分类?

适配Keras LSTM层的时间序列二分类方案

嘿,这个问题其实比你想的要省心——你的数据结构刚好完美匹配Keras LSTM的输入要求!我来给你拆解清楚:

首先,你提到Keras LSTM的输入形状是(timestep, dim),这个其实是单个样本的形状,而模型整体期望的输入张量形状是(batch_size, timesteps, features):

  • batch_size:每次训练喂入的样本数量(训练时会自动处理,不用提前固定)
  • timesteps:每个时间序列的步数,你的数据里是5(每组5个[x,y]位置)
  • features:每个时间步的特征维度,你的是2(x和y两个坐标)

你的X_datas结构[[[xa, ya],[xb, yb],...,[xe, ye]], [...], ...],本质上就是三维结构:外层是所有样本,中间层是每个样本的5个时间步,内层是每个时间步的2维特征。只需要把它转换成numpy数组,就能直接喂给LSTM了。

具体步骤代码示例

  1. 将列表数据转换为numpy张量
    Keras模型需要张量输入(numpy数组或TensorFlow张量),所以先把你的列表转成数组:
import numpy as np

# 把X_datas和Y_labels转成numpy数组
X = np.array(X_datas)
y = np.array(Y_labels)

转换后X的形状应该是(num_samples, 5, 2),完全符合LSTM的输入要求。

  1. 定义LSTM二分类模型
    在第一个LSTM层里,只需要通过input_shape指定单个样本的形状(5, 2)即可,不用管batch_size:
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense

# 初始化序列模型
model = Sequential()

# 第一个LSTM层:32个神经元,输入形状(5,2)
model.add(LSTM(units=32, input_shape=(5, 2), return_sequences=False))

# 二分类输出层:1个神经元+ sigmoid激活
model.add(Dense(1, activation='sigmoid'))

# 编译模型:二分类用binary_crossentropy损失
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

关键参数说明

  • units=32:LSTM层的神经元数量,你可以根据任务复杂度调整(比如16、64都可以)
  • return_sequences=False:因为我们只需要LSTM最后一个时间步的输出用来做分类,所以设为False;如果后面还要接另一个LSTM层,才需要设为True
  • Dense(1, activation='sigmoid'):二分类任务的标准输出层,sigmoid会输出0-1之间的概率值,方便判断类别

之后你就可以用model.fit(X, y, epochs=10, batch_size=32)这类代码开始训练了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:15:55