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

TensorFlow时间序列维度问题:训练前馈NN报‘None values not supported’错

问题解决与时间序列维度处理指南

1. 报错原因

你调用model.fit()时只传入了输入数据Stock_AMZN_PRCL_Train,未指定目标标签(y值)。Keras训练模型需要明确的输入-输出对,缺失目标值会触发“None values not supported”报错。

2. 解决方案:构造监督学习格式的时间序列数据

前馈神经网络本身不具备时序建模能力,需要将一维股票价格序列转换为“历史窗口数据→未来价格”的监督学习结构。具体步骤如下:

步骤1:编写数据集转换函数

这个函数负责把一维序列切割成输入窗口(历史数据)和对应目标值(未来价格):

import numpy as np

def create_dataset(data, look_back=1):
    X, y = [], []
    # 遍历序列,生成输入窗口和目标
    for i in range(len(data) - look_back):
        # 取前look_back个时刻的价格作为输入
        X.append(data[i:(i + look_back), 0])
        # 取下一个时刻的价格作为目标
        y.append(data[i + look_back, 0])
    return np.array(X), np.array(y)

look_back是输入窗口长度,比如设为5,表示用前5天的价格预测第6天的价格,可根据需求调整。

步骤2:处理训练数据

# 假设Stock_AMZN_PRCL_Train已处理成(-1,1)形状的数组
look_back = 5
X_train, y_train = create_dataset(Stock_AMZN_PRCL_Train, look_back)

# 调整输入形状以匹配Dense层要求:(样本数, 特征数),这里特征数=look_back
X_train = X_train.reshape(-1, look_back)

步骤3:修改模型输入形状

因为输入特征数从1变成了look_back,需要同步调整模型的input_shape:

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

model = Sequential()
model.add(Dense(64, input_shape=(look_back,), activation='relu'))
model.add(Dense(32, activation='relu'))
model.add(Dense(1))
model.compile(optimizer='adam', loss='mean_squared_error', metrics=['mae'])

步骤4:正常训练模型

现在传入完整的输入-输出对即可训练:

model.fit(X_train, y_train, epochs=100, batch_size=32, validation_split=0.2)

3. TensorFlow中时间序列维度问题解析

  • 时序数据的核心是依赖关系:前馈NN无法直接处理序列的时序特性,必须将序列转换为监督学习格式,用历史窗口作为输入,对应未来值作为目标。
  • 维度匹配要求:Dense层的输入形状必须是(样本数, 特征数),所以构造输入数据时要确保每个样本的特征数等于窗口长度(look_back)。
  • 窗口长度的选择:窗口越长,模型能利用的历史信息越多,但计算成本也会上升,可通过验证集性能调整最优窗口大小。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 04:25:20