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

TensorFlow中时间序列数据的输入方式与模型适配咨询

数据输入调整与模型结构改造方案

一、维度对应关系梳理

传统图像CNN(如处理(64,64,3)的模型)的输入是4D张量:(样本数, 空间维度1, 空间维度2, 通道数)。对应你的数据:

  • 961:总样本数(日期数)
  • 4:自变量特征数(对应「空间维度1」)
  • 1865:企业数量(对应「空间维度2」)

我们可以把每个日期的样本看作一张「4行(自变量)、1865列(企业)」的灰度图,通道数设为1,完全匹配传统CNN的输入逻辑。

二、数据形状调整

1. 调整xtrain

将原3D张量转换为符合CNN要求的4D张量,添加通道维度:

import numpy as np

# 最终形状:(961, 4, 1865, 1)
xtrain_reshaped = np.expand_dims(xtrain, axis=-1)

2. 调整ytrain

对应xtrain的结构,同步将ytrain转换为4D张量:

# 最终形状:(961, 1, 1865, 1)
ytrain_reshaped = np.expand_dims(ytrain, axis=-1)

三、模型结构改造

替换原Conv1D+LSTM结构,改用传统CNN的Conv2D+池化+全连接/上采样组合,适配4D输入并输出匹配ytrain的形状。以下提供两种实用方案:

方案1:保留空间关联性的CNN结构

适合需要挖掘企业间特征关联的场景:

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, UpSampling2D

model = Sequential([
    # 提取自变量与企业间的局部特征
    Conv2D(filters=64, kernel_size=(4, 3), activation='relu', padding='same', input_shape=(4, 1865, 1)),
    # 压缩企业维度,降低计算量
    MaxPooling2D(pool_size=(1, 2)),
    # 提取高层特征
    Conv2D(filters=32, kernel_size=(1, 3), activation='relu', padding='same'),
    MaxPooling2D(pool_size=(1, 2)),
    # 恢复企业维度原始长度
    UpSampling2D(size=(1, 2)),
    Conv2D(filters=32, kernel_size=(1, 3), activation='relu', padding='same'),
    UpSampling2D(size=(1, 2)),
    # 输出匹配ytrain的形状
    Conv2D(filters=1, kernel_size=(4, 1), activation='linear', padding='valid')
])

方案2:轻量化卷积+全连接结构

适合追求训练效率的场景:

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Reshape, Dropout

model = Sequential([
    Conv2D(filters=64, kernel_size=(2, 3), activation='relu', padding='same', input_shape=(4, 1865, 1)),
    MaxPooling2D(pool_size=(1, 2)),
    Conv2D(filters=128, kernel_size=(2, 3), activation='relu', padding='same'),
    MaxPooling2D(pool_size=(1, 2)),
    # 展平特征接入全连接层
    Flatten(),
    Dense(512, activation='relu'),
    Dropout(0.3),  # 抑制过拟合
    # 输出1865个企业的预测值
    Dense(1865, activation='linear'),
    # 重塑为与ytrain匹配的形状
    Reshape((1, 1865, 1))
])

四、模型编译与训练

作为回归任务,使用MSE作为损失函数,搭配Adam优化器即可:

model.compile(optimizer='adam', loss='mean_squared_error', metrics=['mean_absolute_error'])
# 启动训练
model.fit(xtrain_reshaped, ytrain_reshaped, epochs=50, batch_size=16, validation_split=0.2)

内容的提问来源于stack exchange,提问作者Pablo Ferrer Gonzalez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 16:58:57