MATLAB实现TCN神经网络数值预测

MATLAB实现TCN神经网络数值预测

1.TCN神经网络

时间卷积网络(Temporal Convolutional Network, TCN)是一类专门处理序列数据的深度神经网络架构,其核心思想是使用一维卷积来替代循环结构。TCN 采用 因果卷积 ,保证模型在预测当前时刻时只使用过去的信息,不会泄露未来数据;同时引入 膨胀卷积(Dilated Convolution) ,通过在卷积核之间插入空洞扩大感受野,使网络能够在较少层数的情况下捕获更长序列的依赖关系。此外,TCN 通常包含 残差连接、层归一化与 ReLU 结构,增强训练稳定性与网络表达能力。相比 RNN、LSTM 等循环网络,TCN 具有并行计算、高效训练、长期依赖建模能力强等优点,特别适用于时间序列预测、信号处理、语音识别、工业过程监测等任务。

2.MATLAB代码

复制代码
%% TCN 时间卷积网络(因果+膨胀)数值预测
clc;close all;clear all;warning off;%清除变量
rand('seed', 100);
randn('seed', 100);
format long g;

%% ---------- 1) 生成数据:有规律 + 随机噪声 ----------
N  = 1200;                 % 序列长度
t  = (1:N).';
% 规律: 叠加两个不同周期的正弦 + 缓慢漂移 + 小幅非线性项
y_clean = 0.6*sin(2*pi*t/50) + 0.35*sin(2*pi*t/17) + 0.002*t + 0.15*sin(2*pi*t/200).^2;
noise   = 0.12*randn(N,1);
y       = y_clean + noise;

% 训练/验证/测试划分
Ntr = 800; Nva = 200; Nts = N - Ntr - Nva;          % 800/200/200
y_tr = y(1:Ntr);                    % 训练
y_va = y(Ntr+1:Ntr+Nva);            % 验证
y_ts = y(Ntr+Nva+1:end);            % 测试(滚动多步预测)

% 输入序列窗口长度(感受野基础长度)
win = 64;                            % 可调:越大包含历史越多
% 多步前向预测步数(在测试集尾部从上下文滚动预测)
H   = 120;

%% ---------- 2) 组装 TCN 网络 ----------
% TCN 超参数
numBlocks    = 4;        % 残差块个数
numFilters   = 64;       % 每块卷积通道数
kernelSize   = 3;        % 卷积核大小
dropProb     = 0.1;      % Dropout 概率
inFeat       = 1;        % 输入特征维度(单变量时间序列)

% 构建 TCN 的 layerGraph(避免重复连接,逐块显式连接)
lgraph = layerGraph();
lgraph = addLayers(lgraph, sequenceInputLayer(inFeat,"Name","input"));  % [F x T] cell

tail = "input";  % 当前流水线末端层名(下一块的输入)

for b = 1:numBlocks
    prefix   = "tcnB"+b;
    dilation = 2^(b-1);  % 膨胀系数:1,2,4,8,...

    % 主支路:Conv1 -> LN -> ReLU -> Drop -> Conv2 -> LN
    mainLayers = [
        convolution1dLayer(kernelSize, numFilters, ...
            "Padding","causal", ...
            "DilationFactor",dilation, ...
            "Name", prefix+"_conv1")
        %%
加我q1579325979获取完整代码
%%
        convolution1dLayer(kernelSize, numFilters, ...
            "Padding","causal", ...
            "DilationFactor",dilation, ...
            "Name", prefix+"_conv2")
        layerNormalizationLayer("Name", prefix+"_ln2")
    ];

    % 残差路径:1x1投影(保证通道数匹配)
    proj = convolution1dLayer(1, numFilters, "Padding","same", "Name", prefix+"_proj");

    % 融合与激活
    addL = additionLayer(2,"Name", prefix+"_add");
    relu2= reluLayer("Name", prefix+"_relu2");

    lgraph = addLayers(lgraph, mainLayers);
    lgraph = addLayers(lgraph, proj);
    lgraph = addLayers(lgraph, addL);
    lgraph = addLayers(lgraph, relu2);

    % 连接:来自上一尾部的输入 -> 主支路首层 & 残差投影
    lgraph = connectLayers(lgraph, tail, prefix+"_conv1");
    lgraph = connectLayers(lgraph, tail, prefix+"_proj");

    % 主支路串联
    lgraph = connectLayers(lgraph, prefix+"_ln2",  prefix+"_add/in2");
    % 残差支路到加法
    lgraph = connectLayers(lgraph, prefix+"_proj", prefix+"_add/in1");
    % 加法到激活,更新流水线尾部
    lgraph = connectLayers(lgraph, prefix+"_add",  prefix+"_relu2");
    tail  = prefix+"_relu2";
end

% 输出头:1x1 卷积到标量(每时刻)-> 回归
headLayers = [
    convolution1dLayer(1, 1, "Padding","same", "Name","head_conv1x1")
    regressionLayer("Name","regressionoutput")
];
lgraph = addLayers(lgraph, headLayers);
lgraph = connectLayers(lgraph, tail, "head_conv1x1");

% 可视化检查(可选)
% figure; plot(lgraph); title('TCN LayerGraph');

%% ---------- 3) 构造训练/验证样本(序列到序列,因果对齐) ----------
% 采用"窗口切片"生成样本。每个样本:输入x为长度win的片段,
% 目标y为同长度的片段(因果卷积已保证不会看见未来)。
[Xtr, Ytr] = makeSeqXY(y_tr, win);
[Xva, Yva] = makeSeqXY([y_tr(end-win+1:end); y_va], win);  % 验证含与训练尾部拼接,保持上下文连续

%% ---------- 4) 训练 ----------
miniBatchSize = 64;
opts = trainingOptions("adam", ...
    "MaxEpochs", 25, ...
    "InitialLearnRate", 2e-3, ...
    "MiniBatchSize", miniBatchSize, ...
    "Shuffle","every-epoch", ...
    "ValidationData",{Xva, Yva}, ...
    "Plots","training-progress", ...
    "Verbose",false);

net = trainNetwork(Xtr, Ytr, lgraph, opts);

%% ---------- 5) 多步滚动预测 ----------
% 取测试段开始前的长度win上下文作为起点,逐步把预测值拼回去
context = [y(1:Ntr+Nva)];     % 训练+验证全部历史作为上下文
hist    = context(end-win+1:end);    % 最后win个点作为模型输入窗口
y_fore  = zeros(H,1);

for h = 1:H
    Xwin = {reshape(hist,1,[])};         % [1 x win]
    Yhat = predict(net, Xwin, "MiniBatchSize",1);
    next = Yhat{1}(end);                  % 取窗口最后一个时刻的预测作为下一时刻点
    y_fore(h) = next;
    hist = [hist(2:end); next];          % 更新窗口(滚动)
end

% 拼接得到"真实+预测"全序列,便于绘图
y_hat_full = [y(1:Ntr+Nva); y_fore];   % 测试段预测
t_full     = (1:(Ntr+Nva+H)).';

%% ---------- 6) 评估 & 绘图 ----------
% 只在与测试段重叠处评估
y_true_test = y_ts(1:min(H,numel(y_ts)));
y_pred_test = y_fore(1:numel(y_true_test));
mse_ts = mean((y_true_test - y_pred_test).^2);
mae_ts = mean(abs(y_true_test - y_pred_test));

fprintf('测试段多步预测:MAE = %.4f, MSE = %.4f\n', mae_ts, mse_ts);

figure('Color','w','Position',[100 100 1100 420]);
subplot(1,2,1);
plot(t, y, '-', 'LineWidth',1.0); hold on;
xline(Ntr,'--'); xline(Ntr+Nva,'--');
plot(t_full, y_hat_full, '-', 'LineWidth',1.2);
legend('真实序列','训练/验证分界','验证/测试分界','预测(滚动)','Location','best');
xlabel('时间步'); ylabel('数值'); title('TCN 多步滚动预测(整体可视)'); grid on;

subplot(1,2,2);
tt = (Ntr+Nva+1):(Ntr+Nva+numel(y_pred_test));
plot(tt, y_true_test, 'o-','LineWidth',1.2); hold on;
plot(tt, y_pred_test, 's-','LineWidth',1.2);
xlabel('时间步'); ylabel('数值');
title(sprintf('测试前 %d 步预测对比 (MAE=%.4f)', numel(y_pred_test), mae_ts));
legend('真实','预测','Location','best'); grid on;

%% ---------- 7)(可选)一图看"清洁信号 vs 含噪信号" ----------
figure('Color','w','Position',[100 560 1100 300]);
plot(t, y_clean, 'LineWidth',1.0); hold on;
plot(t, y, 'LineWidth',0.8);
legend('无噪基准','含噪观测'); grid on;
title('数据生成示意(用于直观理解难度)');
xlabel('时间步'); ylabel('数值');

%% ===== 辅助函数 =====
function [Xcell, Ycell] = makeSeqXY(y_vec, win)
% 将单变量向量 y_vec 切成长度为 win 的样本序列(输入与目标同长)
% 输出为 cell 数组,元素大小:[1 x win] 的数值数组(Deep Learning Toolbox 期望的格式)
    y_vec = y_vec(:);
    T = numel(y_vec);
    numSeq = T - win + 1;
    Xcell = cell(numSeq,1);
    Ycell = cell(numSeq,1);
    for i = 1:numSeq
        seg = y_vec(i:i+win-1).';
        Xcell{i} = seg;   % [1 x win]
        Ycell{i} = seg;   % 序列到序列(因果卷积不会"偷看未来")
    end
end

3.程序结果

4.代码、程序订制(MATLAB、Python) →QQ:1579325979

4.1 各类智能算法

|-----------|--------------------------------------|---------|----------|
| 中文名称 | 英文全称 | 缩写 | 出现年份 |
| 遗传算法 | Genetic Algorithm | GA | 1975 |
| 粒子群优化算法 | Particle Swarm Optimization | PSO | 1995 |
| 蚁群优化算法 | Ant Colony Optimization | ACO | 1992 |
| 模拟退火算法 | Simulated Annealing | SA | 1983 |
| 免疫优化算法 | Immune Optimization Algorithm | IA | 1986 |
| 贪婪算法 | Greedy Algorithm | - | 1970 |
| 差分进化算法 | Differential Evolution | DE | 1997 |
| 混合蛙跳算法 | Shuffled Frog Leaping Algorithm | SFLA | 2003 |
| 人工蜂群算法 | Artificial Bee Colony | ABC | 2005 |
| 人工鱼群算法 | Artificial Fish Swarm Algorithm | AFSA | 2002 |
| 萤火虫算法 | Glowworm Swarm Optimization | GSO | 2005 |
| 果蝇优化算法 | Fruit Fly Optimization Algorithm | FOA | 2011 |
| 布谷鸟搜索算法 | Cuckoo Search | CS | 2009 |
| 猴群算法 | Monkey Algorithm | MA | 2008 |
| 免疫网络算法 | Immune Network Algorithm | aiNet | 2000 |
| 水滴算法 | Intelligent Water Drops Algorithm | IWD | 2007 |
| 和声搜索算法 | Harmony Search | HS | 2001 |
| 克隆选择算法 | Clonal Selection Algorithm | CLONALG | 2000 |
| 禁忌搜索算法 | Tabu Search | TS | 1986 |
| 爬山算法 | Hill Climbing | HC | 1940 |
| 引力搜索算法 | Gravitational Search Algorithm | GSA | 2009 |
| 细菌觅食优化算法 | Bacterial Foraging Optimization | BFO | 2002 |
| 蝙蝠算法 | Bat Algorithm | BA | 2010 |
| 邻域搜索算法 | Neighborhood Search | NS | 1960 |
| 变邻域搜索算法 | Variable Neighborhood Search | VNS | 1997 |
| 蜜蜂交配优化算法 | Honey Bees Mating Optimization | HBMO | 2001 |
| 文化基因算法 | Memetic Algorithm | MA | 1989 |
| 烟花算法 | Fireworks Algorithm | FWA | 2010 |
| 思维进化算法 | Mind Evolutionary Algorithm | MEA | 1998 |
| 蜻蜓算法 | Dragonfly Algorithm | DA | 2016 |
| 虚拟力场算法 | Virtual Force Field Algorithm | VFF | 1989 |
| 遗传规划 | Genetic Programming | GP | 1992 |
| 鲸鱼优化算法 | Whale Optimization Algorithm | WOA | 2016 |
| 灰狼优化算法 | Grey Wolf Optimizer | GWO | 2014 |
| 狼群算法 | Wolf Pack Algorithm | WPA | 2007 |
| 鸡群优化算法 | Chicken Swarm Optimization | CSO | 2014 |
| 生物地理学优化算法 | Biogeography-Based Optimization | BBO | 2008 |
| 分布估计算法 | Estimation of Distribution Algorithm | EDA | 1996 |
| 帝国竞争算法 | Imperialist Competitive Algorithm | ICA | 2007 |
| 天牛须搜索算法 | Beetle Antennae Search Algorithm | BAS | 2017 |
| 头脑风暴优化算法 | Brain Storm Optimization | BSO | 2011 |
| 人工势场法 | Artificial Potential Field | APF | 1986 |
| 猫群算法 | Cat Swarm Optimization | CSO | 2006 |
| 蚁狮优化算法 | Ant Lion Optimizer | ALO | 2015 |
| 飞蛾火焰优化算法 | Moth-Flame Optimization | MFO | 2015 |
| 蘑菇繁殖优化算法 | Mushroom Reproduction Optimization | MRO | 2020 |
| 麻雀搜索算法 | Sparrow Search Algorithm | SSA | 2020 |
| 水波优化算法 | Water Wave Optimization | WWO | 2015 |
| 斑鬣狗优化算法 | Spotted Hyena Optimizer | SHO | 2017 |
| 雪融优化算法 | Snow Ablation Optimization | SAO | 2022 |
| 蝴蝶优化算法 | Butterfly Optimization Algorithm | BOA | 2019 |
| 磷虾群算法 | Krill Herd Algorithm | KHA | 2012 |
| 黏菌算法 | Slime Mould Algorithm | SMA | 2020 |
| 人类学习优化算法 | Human Learning Optimization | HLO | 2014 |
| 母亲优化算法 | Mother Optimization Algorithm | MOA | 2023 |

4.2各类优化问题

|---------------|------------|
| 各种优化课题 | 各种优化课题 |
| 车间调度 | 路由路网优化 |
| 机场调度 | 顺序约束项目调度 |
| 工程项目调度 | 双层规划 |
| 港口调度 | 零件拆卸装配问题优化 |
| 生产线平衡问题 | 水资源调度 |
| 用电调度 | 库位优化 |
| 公交车发车调度 | 库位路线优化 |
| 车辆路径物流配送优化 | 武器分配优化 |
| 选址配送优化 | 覆盖问题优化 |
| 物流公铁水问题优化 | 管网问题优化 |
| 供应链、生产计划、库存优化 | PID优化 |
| 库位优化、货位优化 | VMD优化 |

4.3各类神经网络、深度学习、机器学习

|--------|----------------------|--------------|-------------|
| 序号 | 模型名称 | 核心特点 | 适用场景 |
| 1 | BiLSTM 双向长短时记忆神经网络分类 | 双向捕捉序列上下文信息 | 自然语言处理、语音识别 |
| 2 | BP 神经网络分类 | 误差反向传播训练 | 通用分类任务 |
| 3 | CNN 卷积神经网络分类 | 自动提取空间特征 | 图像、视频分类 |
| 4 | DBN 深度置信网络分类 | 多层受限玻尔兹曼机堆叠 | 特征学习、降维 |
| 5 | DELM 深度学习极限学习机分类 | 结合 ELM 与深度架构 | 复杂分类任务 |
| 6 | ELMAN 递归神经网络分类 | 含反馈连接的递归结构 | 时间序列、语音 |
| 7 | ELM 极限学习机分类 | 随机生成隐藏层,快速训练 | 小样本学习 |
| 8 | GRNN 广义回归神经网络分类 | 基于径向基函数回归 | 函数逼近、时间序列 |
| 9 | GRU 门控循环单元分类 | 门控机制简化 LSTM | 序列建模 |
| 10 | KELM 混合核极限学习机分类 | 结合多核 ELM | 高维复杂数据 |
| 11 | KNN 分类 | 基于距离的分类方法 | 模式识别 |
| 12 | LSSVM 最小二乘法支持向量机分类 | 最小二乘优化 SVM | 小样本分类 |
| 13 | LSTM 长短时记忆网络分类 | 门控机制处理长期依赖 | 语言建模 |
| 14 | MLP 全连接神经网络分类 | 多层感知机 | 通用分类 |
| 15 | PNN 概率神经网络分类 | 基于贝叶斯原理 | 模式识别 |
| 16 | RELM 鲁棒极限学习机分类 | 增强鲁棒性的 ELM | 噪声数据 |
| 17 | RF 随机森林分类 | 多棵决策树集成 | 高维、非线性数据 |
| 18 | SCN 随机配置网络模型分类 | 随机生成网络结构 | 快速训练 |
| 19 | SVM 支持向量机分类 | 寻找最优分类超平面 | 二分类、多分类 |
| 20 | XGBOOST 分类 | 梯度提升决策树 | 大规模结构化数据 |
| 21 | ANFIS 自适应模糊神经网络预测 | 融合模糊逻辑与神经网络 | 复杂非线性系统建模 |
| 22 | ANN 人工神经网络预测 | 多层神经元网络 | 通用预测任务 |
| 23 | ARMA 自回归滑动平均模型预测 | 线性时间序列建模 | 时间序列预测 |
| 24 | BF 粒子滤波预测 | 基于蒙特卡洛采样 | 动态系统状态估计 |
| 25 | BiLSTM 双向长短时记忆神经网络预测 | 双向捕捉序列信息 | 时间序列、文本预测 |
| 26 | BLS 宽度学习神经网络预测 | 增量学习结构 | 在线学习 |
| 27 | BP 神经网络预测 | 误差反向传播训练 | 通用预测 |
| 28 | CNN 卷积神经网络预测 | 自动特征提取 | 图像、视频预测 |
| 29 | DBN 深度置信网络预测 | 多层无监督预训练 | 特征学习预测 |
| 30 | DELM 深度学习极限学习机预测 | 结合 ELM 与深度结构 | 复杂预测任务 |
| 31 | DKELM 回归预测 | 动态核 ELM 回归 | 时间序列回归 |
| 32 | ELMAN 递归神经网络预测 | 递归结构处理时序 | 时间序列 |
| 33 | ELM 极限学习机预测 | 快速训练 | 小样本回归 |
| 34 | ESN 回声状态网络预测 | 储备池计算 | 时间序列预测 |
| 35 | FNN 前馈神经网络预测 | 前向传播 | 通用预测 |
| 36 | GMDN 预测 | 基因表达数据网络建模 | 生物信息学预测 |
| 37 | GMM 高斯混合模型预测 | 多高斯分布建模 | 密度估计、聚类 |
| 38 | GRNN 广义回归神经网络预测 | 径向基函数回归 | 函数逼近 |
| 39 | GRU 门控循环单元预测 | 门控机制简化 LSTM | 时间序列预测 |
| 40 | KELM 混合核极限学习机预测 | 多核 ELM 回归 | 高维回归 |
| 41 | LMS 最小均方算法预测 | 线性回归的迭代优化 | 自适应滤波 |
| 42 | LSSVM 最小二乘法支持向量机预测 | 最小二乘优化 SVM | 回归预测 |
| 43 | LSTM 长短时记忆网络预测 | 门控处理长期依赖 | 时间序列预测 |
| 44 | RBF 径向基函数神经网络预测 | 径向基函数逼近 | 函数拟合 |
| 45 | RELM 鲁棒极限学习机预测 | 增强鲁棒性的 ELM | 噪声数据回归 |
| 46 | RF 随机森林预测 | 决策树集成 | 回归预测 |
| 47 | RNN 循环神经网络预测 | 循环连接处理序列 | 时间序列预测 |
| 48 | RVM 相关向量机预测 | 稀疏贝叶斯学习 | 回归、分类 |
| 49 | SVM 支持向量机预测 | 寻找最优超平面 | 回归预测 |
| 50 | TCN 时间卷积神经网络预测 | 一维卷积处理时序 | 时间序列预测 |
| 51 | XGBoost 回归预测 | 梯度提升决策树 | 大规模回归 |

相关推荐
南汐汐月2 小时前
重生归来,我要成功 Python 高手--day33 决策树
开发语言·python·决策树
星释3 小时前
Rust 练习册 :Proverb与字符串处理
开发语言·后端·rust
工会主席-阿冰3 小时前
数据索引是无序时,直接用这个数据去画图的话,显示的图是错误的
开发语言·python·数据挖掘
麦麦鸡腿堡3 小时前
Java_TreeSet与TreeMap源码解读
java·开发语言
gladiator+3 小时前
Java中的设计模式------策略设计模式
java·开发语言·设计模式
Lucifer__hell3 小时前
【python+tkinter】图形界面简易计算器的实现
开发语言·python·tkinter
2301_812914874 小时前
py day34 装饰器
开发语言·python
卡提西亚4 小时前
C++笔记-24-文件读写操作
开发语言·c++·笔记
snakecy4 小时前
树莓派学习资料共享
大数据·开发语言·学习·系统架构