适用平台:Matlab2023版及以上
完整代码:https://mbd.pub/o/bread/mbd-ZZiZlJpv
膨胀因果卷积:与因果卷积相比,膨胀因果卷积多了一个用来表示扩张大小的参数——扩张率(dilationrate)。这使得扩张卷积具有更大的感受野(receptivefield),这样每个卷积输出可包含更大时间范围的信息。采用扩张卷积的优势在于,对于相同长度的输入层时间序列,扩张卷积可通过更少的网络层数获得输出。这样一来,对于需获取更长时间信息的时间序列问题,可避免普通卷积由于层数过多而带来梯度消失、训练复杂等问题。扩张卷积的结构如下图所示。
BiTCN-BiGRU-Attention多变量预测模型创新点总结:
创新点①膨胀因果卷积:为了更好地获取风电系列的长期依赖关系,BiTCN模型采用了双向膨胀因果卷积,引入双向扩张因子使卷积核的感知野不断扩大,从而获得更大的感受野。这种结构增强了信息提取能力,提高了特征提取的质量。
创新点④递归堆叠:模型中可以通过递归地堆叠多个 BiTCN 模块来提高模型的表达能力。递归堆叠允许模型在不同抽象层次上逐步提取和融合特征,从而更好地预测时间序列。
创新点⑥Attention自注意力机制:在BiTCN-Attention中,自注意力层被嵌入到BiTCN层中,自注意力层用于捕捉时间序列数据中的全局依赖关系,自注意力机制允许网络在学习时动态地调整各个时间步的权重,以便更好地捕捉长期依赖和全局模式。
程序数据集格式:
预测值与实际值对比:
评价指标结果:
%% 设置BiTCN-BiGRU-Attention网络参数
numFilters = 16; % 卷积核个数
filterSize = 3; % 卷积核大小
dropoutFactor = 0.2 ; % 空间丢失因子
numBlocks = 1; % 残差块个数
numFeatures = 18; % 特征个数
% 创建输入层
layer = sequenceInputLayer(numFeatures, Normalization = "rescale-symmetric", Name = "input");
% 创建网络图
lgraph = layerGraph(layer);
outputName = layer.Name;
% 建立网络结构 -- 残差块
for i = 1 : numBlocks
% 膨胀因子
dilationFactor = 2^(i-1);
% 创建TCN正向支路
layers = [
convolution1dLayer(filterSize, numFilters, DilationFactor = dilationFactor, Padding = "causal", Name="conv1_" + i) % 一维卷积层
layerNormalizationLayer % 层归一化
spatialDropoutLayer(dropoutFactor) % 空间丢弃层
convolution1dLayer(filterSize, numFilters, DilationFactor = dilationFactor, Padding = "causal") % 一维卷积层
layerNormalizationLayer % 层归一化
reluLayer % 激活层
spatialDropoutLayer(dropoutFactor) % 空间丢弃层
additionLayer(4, Name = "add_" + i)
];
% 添加残差块到网络
lgraph = addLayers(lgraph, layers);
% 连接卷积层到残差块
lgraph = connectLayers(lgraph, outputName, "conv1_" + i);
% 创建 TCN反向支路flip网络结构
Fliplayers = [
FlipLayer("flip_" + i) % 反向翻转
convolution1dLayer(1, numFilters, Name = "convSkip_"+i); % 反向残差连接
convolution1dLayer(filterSize, numFilters, DilationFactor = dilationFactor, Padding = "causal", Name="conv2_" + i) % 一维卷积层
layerNormalizationLayer % 层归一化
spatialDropoutLayer(dropoutFactor) % 空间丢弃层
convolution1dLayer(filterSize, numFilters, DilationFactor = dilationFactor, Padding = "causal") % 一维卷积层
layerNormalizationLayer % 层归一化
reluLayer % 激活层
spatialDropoutLayer(dropoutFactor, Name="drop" + i) % 空间丢弃层
];
% 添加 flip 网络结构到网络
lgraph = addLayers(lgraph, Fliplayers);
部分图片来源于网络,侵权联系删除!
完整代码:https://mbd.pub/o/bread/mbd-ZZiZlJpv
欢迎感兴趣的小伙伴点击左下角“阅读原文”或上方链接获得完整版代码哦~