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

TensorFlow Keras LSTM单股票预测报错:Empty batch_outputs问题求助

解决单股票数据运行LSTM模型的Empty batch_outputs错误

问题根源

LSTM模型要求输入数据为三维张量:(样本数, 时间步长, 特征数)。当你传入单只股票的Series时,生成的训练数据大概率是二维数组(缺少特征维度),模型无法正确处理批次数据,进而触发Empty batch_outputs错误。多只股票的DataFrame因包含多个特征列,天然满足三维输入要求(特征数=股票数量),所以能正常运行。

具体解决步骤

  1. 转换单股票数据为二维DataFrame
    把单只股票的Series包装成仅含一列的DataFrame,保留特征维度:

    # 假设ctsh_series是你的单只股票价格Series
    ctsh_df = pd.DataFrame(ctsh_series, columns=['Close'])
    
  2. 确保训练数据是三维张量
    在生成序列数据的函数中,保证输出的X为三维结构。若生成的是二维数组,手动添加特征维度:

    def create_sequences(data, time_steps=5):
        X, y = [], []
        for i in range(len(data) - time_steps):
            X.append(data.iloc[i:i+time_steps].values)
            y.append(data.iloc[i+time_steps]['Close'])
        # 转换为三维数组:(样本数, 时间步长, 特征数)
        return np.array(X), np.array(y)
    
    X, y = create_sequences(ctsh_df)
    # 验证形状,应类似 (n_samples, 5, 1)
    print(X.shape)
    
  3. 匹配模型输入层的shape
    定义模型时,输入层的input_shape要对应单只股票的特征数(此处为1):

    from tensorflow.keras.models import Sequential
    from tensorflow.keras.layers import LSTM, Dense
    
    time_steps = 5
    model = Sequential()
    # 输入形状为(时间步长, 特征数)
    model.add(LSTM(50, input_shape=(time_steps, 1)))
    model.add(Dense(1))
    model.compile(optimizer='adam', loss='mse')
    
  4. 预测时保持输入形状一致
    预测前需将测试数据调整为三维结构:

    # 取最后time_steps个数据作为测试输入
    test_input = ctsh_df.iloc[-time_steps:].values.reshape(1, time_steps, 1)
    prediction = model.predict(test_input)
    

额外检查点

  • 确认训练数据无空值或异常值,避免生成无效空批次。
  • 若之前用多股票数据训练过模型,需重新初始化模型(因输入维度已改变)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 06:07:32