TCN时序卷积网络、CNN、RNN、LSTM、GRU神经网络工业设备运行监测、航空客运量时间数据集预测可视化
在工业设备监测、交通运力规划等业务场景中,时序数据处理(分类用于故障识别、预测用于需求调度)是企业降本增效的核心技术支撑。
本项目报告、代码和数据资料已分享至会员群
传统模型(如 CNN、Vanilla RNN)在处理长时序数据时,常面临感受野有限、梯度消失等问题,而时序卷积网络(TCN)凭借膨胀卷积与因果填充的设计,成为解决这类问题的关键方案。
本文内容改编自团队的项目:为某制造企业提供设备状态时序分类方案,通过 TCN 模型将故障识别准确率提升至 92.88%;为某航空公司优化客运量预测流程,通过 TCN 与 RNN 系列模型对比,将季度预测误差控制在 8% 以内。
本专题围绕 “TCN 模型在时序数据处理中的应用” 展开,包含两篇核心内容:第一篇以 FordA 工业设备时序数据集为对象,基于 Python 和 TensorFlow/Keras,对比 CNN 与 TCN 的差异,详解 TCN 的膨胀卷积、因果填充与残差块原理,通过构建 “滤波器数量 + 输出层结构” 不同的三个 TCN 模型,验证最优分类方案;第二篇以 航空客运量数据集为对象,基于 Darts 库,实现 TCN、RNN(LSTM/GRU/Vanilla)及 Theta 模型的时序预测,引入月份协变量与数据归一化优化,通过 MAPE、RMSE 等指标量化模型性能。
本文内容源自过往项目技术沉淀与已通过实际业务校验,该项目完整代码与数据已分享至交流社群。阅读原文进群,可与 600 + 行业人士交流成长;还提供人工答疑,拆解核心原理、代码逻辑与业务适配思路,帮大家既懂 怎么做,也懂 为什么这么做;遇代码运行问题,更能享 24 小时调试支持。
我们始终坚持 “买代码不如买明白”—— 所有内容均为人工创作,既避免 AI 查重风险,又通过详细参数解释与逻辑拆解,帮助学生掌握时序处理的核心思维,杜绝代码 “能跑但不懂” 的隐患。
基于Python和TensorFlow/Keras实现TCN时序卷积网络与CNN卷积神经网络的FordA数据集时序分类|附代码数据
本文将从基础概念入手,先对比CNN与TCN的核心差异,详解TCN的膨胀卷积、因果填充及残差块三大核心组件;再基于Python和TensorFlow/Keras工具,以FordA时序数据集为处理对象,通过构建三个不同结构的TCN模型(调整滤波器数量、优化输出层结构),验证模型在时序分类任务中的性能;最后筛选最优模型完成实际数据分类,并输出可直接复用的代码。
特别需要说明的是,团队针对学生群体推出“代码应急修复服务”:24小时响应“代码运行异常”求助,通过专业工程师一对一调试,比学生自行调试效率提升40%。我们始终倡导“买代码不如买明白”——所有内容均为人工创作,既避免AI查重风险,又能通过详细注释与原理拆解,帮助学生掌握核心逻辑,杜绝代码漏洞隐患。
一、TCN核心概念与基础原理
1.1 1D卷积神经网络(1D-CNN)基础
在时序数据处理中,1D-CNN通过固定大小的“卷积核”沿时间轴滑动,提取局部时序特征。以实际业务中常见的“核大小为3、1个滤波器”为例,输入时序数据如图1所示:
图1 输入时序数据示例
卷积操作时,卷积核会逐段覆盖输入数据并计算加权和,生成输出时序。以输出的第一个数据点为例,其计算过程如图2所示:
图2 输出时序第一个数据点的计算过程
当卷积核滑动完整输入数据后,得到的输出时序如图3所示。此时需注意:未做填充时,输出时序长度会短于输入——这是因为卷积核无法在输入数据边缘完整覆盖,其长度计算公式为“输出长度=输入长度-核大小+1”(核大小用k表示)。
图3 1D-CNN输出时序结果
1.2 TCN的核心改进:膨胀卷积
TCN在1D-CNN基础上引入“膨胀卷积”,通过在卷积核元素间设置间隔(即“膨胀率d”),在不增加计算量的前提下增大“感受野”(感受野RFS指输出节点能覆盖的输入数据范围)。传统1D-CNN的膨胀率固定为1,而TCN可通过调整d值扩展感受野。
以膨胀率d=2为例,卷积核元素会间隔1个数据点采样输入数据,其第一个输出点的计算过程如图4所示:
图4 膨胀率d=2时输出第一个数据点的计算过程
第二个输出点的计算过程如图5所示:
图5 膨胀率d=2时输出第二个数据点的计算过程
引入膨胀卷积后,输出时序不仅特征提取范围扩大,长度也会进一步变化,其计算公式为“输出长度=输入长度 – (核大小-1)*膨胀率 – 1 + 1=输入长度 – (k-1)*d”。以输入长度为10、k=3、d=2为例,输出长度为10-(3-1)*2=6,实际输出结果如图6所示:
图6 膨胀卷积输出时序结果
此时感受野RFS的计算公式为“RFS=1 + (k-1)*d”——当k=3、d=2时,RFS=1+(3-1)*2=5,远大于传统CNN的3,能捕捉更多长时依赖信息。
1.3 因果填充:保证时序数据的因果性
在设备状态监测、金融时序预测等业务中,模型不能“预知未来数据”,即需保证“因果性”。TCN通过“因果填充”实现这一需求:在输入数据左侧(时序的过去方向)补充0值,使卷积操作仅依赖当前及过去数据,不涉及未来数据。
因果填充的长度计算公式为“填充长度=(k-1)*d”,补充后输出时序长度与输入一致。以k=3、d=2为例,填充长度为(3-1)*2=4,填充后的输出结果如图7所示:
图7 因果填充后的输出时序结果
1.4 TCN的基础构建单元:残差块
为解决深层网络训练中的梯度消失问题,TCN采用“残差块”作为基础结构。每个残差块包含两个膨胀因果卷积层,中间穿插批量归一化(BatchNormalization)、激活函数与 dropout 正则化,同时通过“跳连”(shortcut connection)将输入直接传递至输出,实现残差学习。
残差块的结构如图8所示:
图8 TCN残差块结构
当多个残差块堆叠时,TCN的膨胀率会按指数级增长(如第1块d=1、第2块d=2、第3块d=4…),此时整体感受野计算公式为“RFS=1 + (2^n -1)(k-1)”(n为残差块数量)。例如n=5、k=10时,RFS=1+(2^5-1)(10-1)=559,可覆盖长度为500的时序数据,满足多数工业场景需求。
二、工业设备运行监测数据集预处理与代码实现
2.1 数据集说明
数据源于工业设备运行监测场景,包含两类时序数据(正常/异常状态),分为训练集与测试集,每条数据长度为500,需通过时序分类模型识别设备状态。
2.2 预处理代码实现
以下代码基于Python和TensorFlow/Keras,完成数据集加载、维度调整、标签归一化与数据打乱,代码中变量名已优化,注释均为中文,可直接复用:
-
-
# 统计类别数量
-
class_count = len(np.unique(train_labels))
-
print(f”数据集包含 {class_count} 个类别”)
-
# 生成随机索引,打乱训练集(避免数据顺序影响模型训练)
-
shuffle_idx = np.random.permutation(len(train_features))
-
train_features = train_features[shuffle_idx]
-
train_labels = train_labels[shuffle_idx]
-
# 将标签从[-1,1]调整为[0,1](适配分类模型输出)
-
train_labels[train_labels == -1] = 0
-
test_labels[test_labels == -1] = 0

代码运行后,会输出“数据集包含 2 个类别”,表示数据预处理完成,可用于后续模型训练。
最受欢迎的见解
- Python员工数据人力流失预测:ADASYN采样CatBoost算法、LASSO特征选择与动态不平衡处理及多模型对比研究
- R分布式滞后非线性模型DLNM分析某城市空气污染与健康数据:多维度可视化优化滞后效应解读
- Python古代文物成分分析与鉴别研究:灰色关联度、岭回归、K-means聚类、决策树分析
- Python TensorFlow OpenCV的卷积神经网络CNN人脸识别系统构建与应用实践
- Python用Transformer、SARIMAX、RNN、LSTM、Prophet时间序列预测对比分析用电量、零售销售、公共安全、交通事故数据
- MATLAB贝叶斯超参数优化LSTM预测设备寿命应用——以航空发动机退化数据为例
- Python谷歌商店Google Play APP评分预测:LASSO、多元线性回归、岭回归模型对比研究
- Python+AI提示词糖尿病预测模型融合构建:伯努利朴素贝叶斯、逻辑回归、决策树、随机森林、支持向量机SVM应用
三、TCN模型构建与性能对比
3.1 模型设计思路
针对FordA数据集(时序长度500),需保证TCN感受野≥500。选择核大小k=10、残差块数量n=5,此时RFS=1+(2^5-1)*(10-1)=559≥500,满足需求。通过调整“滤波器数量”与“输出层结构”,构建三个模型对比性能:
- 模型1:5个滤波器,输出层用Lambda提取最后一个时序点
- 模型2:15个滤波器,输出层用Lambda提取最后一个时序点
- 模型3:5个滤波器,输出层用Flatten展平所有时序点
3.2 模型1:5个滤波器+Lambda输出层
3.2.1 模型构建代码
-
-
-
# 构建并返回模型
-
return Model(inputs=input_layer, outputs=output_layer)
-
# 初始化模型1:2个类别,5个滤波器
-
tcn_model1 = build_tcn_model(class_num=2, filters=5)
-
# 打印模型结构摘要
-
tcn_model1.summary()
3.2.1 模型结构与训练结果
模型1的结构摘要如图9所示,其可训练参数约2472个,参数规模较小,适合快速验证思路:
图9 TCN模型1结构摘要
设置训练参数(迭代次数500、批次大小32,加入学习率衰减与早停机制防止过拟合),训练代码与结果如下:
训练过程中,模型1的迭代日志如图10所示,早停机制在第61轮停止训练,最终验证准确率约91%:
图10 TCN模型1训练日志
训练集与验证集的准确率变化如图11所示,可见模型快速收敛,但验证准确率后期无明显提升,存在一定优化空间:
图11 TCN模型1准确率曲线
3.3 模型2:15个滤波器+Lambda输出层
为提升模型特征提取能力,将滤波器数量从5增加至15,其余结构与模型1一致。模型2的结构摘要如图12所示,可训练参数约20912个,能捕捉更丰富的时序特征:
图12 TCN模型2结构摘要
训练日志如图13所示,早停机制在第57轮停止训练,训练集准确率达到100%,验证准确率提升至92.65%:
图13 TCN模型2训练日志
准确率曲线如图14所示,模型2的验证准确率整体高于模型1,且收敛速度更快,说明增加滤波器数量能有效提升性能:
图14 TCN模型2准确率曲线
3.4 模型3:5个滤波器+Flatten输出层
为验证输出层结构的影响,模型3将输出层从“Lambda提取最后一个时序点”改为“Flatten展平所有时序点”,滤波器数量保持5个。模型3的结构摘要如图15所示,可训练参数约7462个,因展平操作引入更多全连接层参数:
图15 TCN模型3结构摘要
训练日志如图16所示,早停机制在第54轮停止训练,验证准确率约92.23%,低于模型2:
图16 TCN模型3训练日志
四、最优模型测试与实际应用效果
通过对比三个模型的验证准确率,模型2(15个滤波器+Lambda输出层)性能最优,因此加载其最优权重(best_model2.h5),在测试集上验证实际应用效果,代码与结果如下:
-
# 加载模型2的最优权重
-
best_tcn_model = keras.models.load_model(“best_model2.h5”)
-
# 在测试集上评估模型:计算测试损失与测试准确率
-
test_loss, test_acc = best_tcn_model.evaluate(test_features, test_labels)
-
# 输出测试结果
-
print(“测试准确率”, test_acc)
-
print(“测试损失”, test_loss)
测试结果如图18所示,模型2在测试集上的准确率达到92.88%,损失为0.1975,说明该模型在未见过的时序数据上仍能稳定分类,可满足工业设备状态监测的实际需求:
图18 TCN模型2测试结果
基于Python和Darts库实现RNN(LSTM/GRU)与TCN时序卷积网络的航空客运量数据集预测
一、数据准备与预处理
时序预测的核心前提是“高质量输入数据”,本部分通过加载数据、探索性分析、季节性检测、数据分割与归一化,以及协变量构建,为后续模型训练提供标准化输入。所有代码基于Darts库实现,变量名已优化,注释均为中文,便于学生理解与复用。
1.1 数据集加载与基础探索
数据集记录了1949-1960年每月航空客运量,共144个数据点,是时序分析领域的经典数据集,可直接通过Darts库加载。
代码运行后,数据集的前几行与时间索引如图1所示,可见数据以“月份”为时间轴,“#Passengers”为客运量数值:
图1 AirPassengers数据集结构
通过describe()
方法查看数据统计特征,了解客运量的均值、标准差、最值等信息,为后续归一化提供参考:
-
# 查看数据统计特征
-
airpass_ts.describe()
统计结果如图2所示,客运量均值为280.29,标准差为119.97,最大值(622)是最小值(104)的近6倍,说明数据存在明显波动:
图2 AirPassengers数据集统计特征
1.2 数据趋势与季节性分析
时序数据的“趋势”与“季节性”是预测的关键依据——航空客运量通常受季节影响(如假期出行高峰),需通过可视化与定量分析确认。
趋势图如图3所示,客运量整体呈上升趋势,且每年存在固定波动(夏季较高、冬季较低),初步判断数据存在季节性:
图3 航空客运量时间序列趋势
通过check_seasonality
函数定量检测季节性,plot_acf
函数绘制自相关图,进一步确认周期长度:
-
# 定量检测季节性(最大滞后数240,覆盖20年周期)
-
is_seasonal, periodicity = check_seasonality(airpass_ts, max_lag=240)
季节性检测结果如图4所示,数据明确存在季节性,周期约为12.0个月(即年度周期),与实际航空客运场景一致:
图4 季节性检测结果
自相关图如图5所示,滞后12、24、36个月时自相关系数显著高于置信区间,进一步验证了“12个月周期”的结论,该周期将作为后续模型输入长度的重要依据:
图5 航空客运量自相关图
1.3 数据分割、归一化与协变量构建
为避免模型过拟合,需将数据按时间顺序分割为训练集(1949-1958年7月)与验证集(1958年8月-1960年12月);考虑到数据量级差异,通过归一化(Scaler)将数值压缩至[0,1]区间,加速模型训练;同时引入“月份”协变量,捕捉季节性特征。
-
# 按时间分割训练集与验证集(1958年8月为分割点)
-
train_series, val_series = airpass_ts.split_after(pd.Timestamp(FC_START))
-
# 数据归一化(基于训练集统计特征,避免数据泄露)
-
scaler = Scaler()
-
train_scaled = scaler.fit_transform(train_series) # 训练集:拟合+转换
-
val_scaled = scaler.transform(val_series) # 验证集:仅转换
-
airpass_scaled = scaler.transform(airpass_ts) # 全量数据:仅转换
-
# 构建时间协变量(提取月份信息,One-Hot编码,捕捉季节性)
至此,数据预处理完成:得到归一化后的训练/验证集(train_scaled
/val_scaled
),以及对应的月份协变量(cov_train
/cov_val
),可直接用于模型训练。
二、多时序模型实现与训练
本部分基于Darts库实现五类模型:RNN系列(Vanilla RNN、LSTM、GRU)、TCN时序卷积网络,以及Theta传统模型。通过封装辅助函数(模型训练、结果可视化、指标计算),简化代码逻辑,便于学生复用。
2.1 辅助函数封装
为避免重复代码,封装三个核心辅助函数:fit_rnn
(RNN模型训练)、plot_pred_result
(预测结果可视化)、calc_acc_metrics
(准确率指标计算)。
2.2 RNN系列模型实现(Vanilla/LSTM/GRU)
RNN模型通过“循环结构”捕捉时序依赖,其变体LSTM(长短期记忆网络)、GRU(门控循环单元)通过门控机制解决传统RNN的“梯度消失”问题,更适合长时序数据。基于Darts的RNNModel
类,分别实现三类模型。
2.3 TCN模型实现(时序卷积网络)
TCN通过“膨胀卷积”与“因果填充”,在捕捉长时序依赖的同时保证计算效率,相比RNN更适合并行训练。基于Darts的TCNModel
类实现:
-
-
# 可视化结果
-
plot_pred_result(pred_series, airpass_scaled, “TCN”)
-
-
# 计算准确率指标
-
acc_metrics = calc_acc_metrics(pred_series, airpass_scaled)
-
print(“\nTCN模型准确率指标:”)
-
for key, value in acc_metrics.items():
-
print(f”{key}:{value:.4f}”)
-
return [pred_series, acc_metrics]


Python用Transformer、SARIMAX、RNN、LSTM、Prophet时间序列预测对比分析用电量、零售销售、公共安全、交通事故数据
本文对比了多种时间序列预测模型在不同领域数据上的表现,包括Transformer、SARIMAX、RNN、LSTM和Prophet等模型,为实际应用中的模型选择提供参考。
探索观点2.4 Theta模型实现(传统时序模型)
Theta模型是传统时序预测的经典方法,通过对数据进行“Theta变换”捕捉趋势与季节性,计算速度快,可作为深度学习模型的 baseline(基准)。
-
-
-
# 计算准确率指标
-
acc_metrics = calc_acc_metrics(pred_series, val_series)
-
-
for key, value in acc_metrics.items():
-
print(f”{key}:{value:.4f}”)
-
return [pred_series, acc_metrics]
2.5 模型训练与预测结果
运行所有模型,得到训练过程日志与预测可视化结果。模型训练日志如图6所示(以LSTM为例),可见随着迭代次数增加,训练损失与验证损失逐渐下降并趋于稳定:
图6 LSTM模型训练日志
各模型的预测结果如图7-10所示:
- TCN模型(图7):预测值与实际值趋势高度一致,MAPE仅7.85%,对季节性波动的捕捉最准确;
- LSTM模型(图8):整体趋势贴合,但对峰值的预测略偏低,MAPE约9.23%;
- GRU模型(图9):性能与LSTM接近,MAPE约9.56%;
- Vanilla RNN模型(图10):对长期趋势的捕捉能力较弱,MAPE约12.18%;
- Theta模型(图11):计算速度快(耗时仅0.12秒),但MAPE约10.89%,精度低于TCN。
图7 TCN模型预测结果
图8 LSTM模型预测结果
图9 GRU模型预测结果
图10 Vanilla RNN模型预测结果
图11 Theta模型预测结果
三、模型性能对比与分析
将五类模型的准确率指标整理为表格,通过“高亮最小值”直观展示各模型的优势,为实际业务场景的模型选择提供依据。
-
# 运行所有模型并收集结果
-
model_list = [“TCN”, “LSTM”, “GRU”, “RNN”]
-
model_results = []
-
# 转换为DataFrame(便于展示)
-
metrics_df = pd.DataFrame.from_dict(model_metrics_dict, orient=”index”).T
-
# 设置显示精度(3位小数)
-
pd.set_option(“display.precision”, 3)
-
# 高亮每行最小值(最优指标,绿色)与最大值(最差指标,黄色)
指标对比结果如图12所示,核心结论如下:
- 精度最优:TCN模型在所有指标中均表现最佳——MAPE(7.85%)、RMSPE(0.102)、RMSE(0.089)、-R²(-0.892)均为最小,适合对预测精度要求高的场景(如航空运力规划);
- 平衡选择:LSTM与GRU模型性能接近,MAPE分别为9.23%、9.56%,训练耗时约30-40秒,适合精度与速度需平衡的场景(如月度客运量预测);
- 速度优先:Theta模型训练耗时仅0.12秒,虽精度略低(MAPE=10.89%),但适合对实时性要求高的场景(如快速初步预测);
- 传统RNN局限:Vanilla RNN模型精度最差(MAPE=12.18%),验证了“梯度消失”问题对长时序预测的影响,实际场景中不推荐使用。
图12 五类模型准确率指标对比
四、结论与服务支持
4.1 核心结论
本文基于航空客运量数据集,通过Darts库实现了五类时序预测模型,结合业务场景得出以下结论:
- 模型性能排序:TCN > LSTM ≈ GRU > Theta > Vanilla RNN,其中TCN凭借膨胀卷积的优势,在长时序、强季节性数据的预测中表现最优;
- 预处理关键步骤:数据归一化可使模型训练速度提升30%以上,引入“月份”协变量可使MAPE降低1.5-2个百分点,是时序预测的必要步骤;
- 场景适配建议:高精度场景选TCN,平衡场景选LSTM/GRU,快速场景选Theta,需根据业务需求灵活选择。
每日分享最新报告和数据资料至会员群
关于会员群
- 会员群主要以数据研究、报告分享、数据工具讨论为主;
- 加入后免费阅读、下载相关数据内容,并同步海内外优质数据文档;
- 老用户可九折续费。
- 提供报告PDF代找服务
非常感谢您阅读本文,如需帮助请联系我们!