大家好,欢迎来到IT知识分享网。
NAR(Neural Autoregressive) 神经网络是一种用于序列建模的神经网络模型。它通过对序列数据中的每个元素进行条件概率建模,来预测下一个元素。
NAR神经网络通常由两个主要组件构成:编码器和解码器。
- 编码器将输入序列映射到一个低维空间的表示。这个表示可以捕捉到序列中的关键特征。常用的编码器包括循环神经网络(如LSTM和GRU)、卷积神经网络(CNN)或自注意力机制(如Transformer)。
- 解码器根据前面的元素和编码器生成的表示来预测下一个元素。它通常是一个条件生成模型,使用先前的元素作为上下文来生成后续元素。解码器的输出可以是离散值(如词语、类别)或连续值(如时间序列的预测)。
NAR神经网络的训练过程通常使用最大似然估计方法,即最大化预测序列中每个元素的条件概率。在训练期间,通过将模型的预测与真实序列进行比较,并使用一种适当的损失函数来衡量它们之间的差异,来更新模型参数。
NAR神经网络在各种序列建模任务中都有广泛的应用,包括语言建模、机器翻译、语音识别、音乐生成等。它能够捕捉到序列中的长期依赖关系和上下文信息,从而提高序列预测和生成的能力。
以NAR预测单维度时间序列为例:
%% 用NAR神经网络求解自回归时间序列问题 clc;clear %导入数据 xls=xlsread("氧气含量.xlsx"); X=xls(:,2); % 列向量,横坐标为指标,纵坐标为时间步 % 矩阵X转换为tonndata格式的时间序列数据 T = tonndata(X,false,false); % 第一个参数X是输入的矩阵,是一个一维的数据。 % 第二个参数false表示不将输入数据作为预测值处理,即不将最后一列作为目标值。 % 第三个参数false表示不进行时间步长转换,即每个样本的所有时间步长都保持原样。 %% 选择训练函数 % For a list of all training functions type: help nntrain % 'trainlm' is usually fastest. LM法训练 % 'trainbr' takes longer but may be better for challenging problems. % 'trainscg' uses less memory. Suitable in low memory situations. trainFcn = 'trainlm'; % Levenberg-Marquardt backpropagation. % 创建一个非线性自回归网络 feedbackDelays = 1:21; % 时滞 hiddenLayerSize = 40; % 隐含层神经元个数 net = narnet(feedbackDelays,hiddenLayerSize,'open',trainFcn); % 第一个参数feedbackDelays是一个向量,表示反馈延迟的步数。它指定了RNN中每个输入要回馈的时间步数。 % 第二个参数hiddenLayerSize是一个整数,表示隐藏层的大小。它指定了RNN模型中隐藏层的神经元数量。 % 第三个参数'open'指定了RNN的网络类型。在这里,'open'表示该RNN是一个开放型的网络,即没有输出限制。 % 第四个参数trainFcn表示训练函数,指定了用于训练RNN模型的算法。 %% 准备训练数据 [x,xi,ai,t] = preparets(net,{
},{
},T); % 第一个参数net是之前创建的RNN模型。 % 第二个参数{}表示不使用先前时间步的输入序列(因为没有提供先前时间步的输入)。 % 第三个参数{}表示不使用先前时间步的目标序列(因为没有提供先前时间步的目标)。 % 第四个参数T是之前转换为tonndata格式的时间序列数据。 % 建立训练、验证、测试 数据占比 net.divideParam.trainRatio = 80/100; net.divideParam.valRatio = 10/100; net.divideParam.testRatio = 10/100; %% 训练网络 [net,tr] = train(net,x,t,xi,ai); % 测试网络 y = net(x,xi,ai); e = gsubtract(t,y); performance = perform(net,t,y) % View the Network % view(net) % Plots % Uncomment these lines to enable various plots. %figure, plotperform(tr) %figure, plottrainstate(tr) %figure, ploterrhist(e) %figure, plotregression(t,y) %figure, plotresponse(t,y) %figure, ploterrcorr(e) %figure, plotinerrcorr(x,e) %% 闭环网络 % % 使用该网络进行多步预测 % netc = closeloop(net); % netc.name = [net.name ' - Closed Loop']; % view(netc) % [xc,xic,aic,tc] = preparets(netc,{},{},T); % % xc=cell(0,17915); % yc = netc(xc,xic,aic); % 预测 % closedLoopPerformance = perform(net,tc,yc) %性能 % % result=cell2mat(yc);result=result'; %% 步进预测网络 nets = removedelay(net); nets.name = [net.name ' - Predict One Step Ahead']; % view(nets) [xs,xis,ais,ts] = preparets(nets,{
},{
},T); % stepAheadPerformance = perform(nets,ts,ys) % 性能 % 设置多步预测的步数 numSteps = 100; %设置为1,就是单步预测 % 进行多步预测迭代 futurePredictions = cell(1, numSteps); prevX = xs; for i = 1:numSteps % 使用步进预测网络进行一步预测 ys = nets(prevX, xis, ais); % 取得预测结果的最后一个值 futurePrediction = ys{
end}; % 存储预测结果 futurePredictions{
i} = futurePrediction; % 更新输入序列,将预测结果添加到末尾,并删除最早的输入值 prevX = [prevX(2:end), futurePrediction]; end RESULT=cell2mat(futurePredictions); RESULT=RESULT';
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/155028.html