Previsão de série temporal baseada em CNN-LSTM na prática MATLAB

   1. Princípio do Algoritmo

1.1 Princípio da CNN 

    As redes neurais convolucionais possuem características de conexões locais, compartilhamento de peso e correlação espacial. A estrutura da rede neural convolucional inclui camadas convolucionais, camadas de ativação e camadas de pooling.

    (a) Uma camada convolucional 2D aplica um filtro de convolução deslizante à entrada. Esta camada envolve a entrada movendo o filtro vertical e horizontalmente ao longo da entrada, calcula o produto escalar dos pesos com a entrada e, em seguida, adiciona um termo de polarização. A expressão específica é:

    A função da camada convolucional é extrair recursos dos dados de entrada. Ele contém vários kernels de convolução, também chamados de campos receptivos. A execução de uma operação de convolução na imagem de entrada e no kernel de convolução pode aprimorar as características do sinal original e, ao mesmo tempo, reduzir o ruído. O processo específico de operação de convolução é mostrado na Figura 1.

    

Figura 1 O processo específico de operação de convolução

(2) Função de ativação

     Em redes neurais convolucionais, as funções de ativação comumente usadas incluem função Sigmóide, função Tanh, função Swish e função Relu. A função Relu resolve o problema do desaparecimento do gradiente da função Sigmóide e da função Tanh, melhora a velocidade de convergência do modelo e é bem recebida por muitos estudiosos.

(3) Camada de pooling

     A camada de pooling também é chamada de camada de downsampling.A camada de pooling é dividida em camada de pooling média e camada de pooling máxima. Entre elas, a camada de pooling máximo realiza a redução da resolução dividindo a entrada em áreas de pooling retangulares e calculando o valor máximo de cada área, enquanto a camada de pooling média realiza a redução da resolução calculando o valor médio da área de pooling. O processo de pooling da camada de pooling é mostrado na Figura 2.

Figura 2 Diagrama esquemático do processo de pooling

1.2 Princípio LSTM 

    LSTM adota a arquitetura de Rede Neural Recorrente (RNN) [8], que é especialmente projetada para aprender dependências de longo prazo de sequências. O LSTM pode usar 4 componentes: porta de entrada, porta de saída, porta de esquecimento e unidade com conexão autocíclica para remover ou adicionar informações do estado do bloco. Sua estrutura de neurônios é mostrada na Figura 3.

Figura 3 Estrutura da rede LSTM

       Suponha que a sequência de entrada tenha k passos de tempo no total, o mecanismo de ativação LSTM é estruturado como uma porta de esquecimento, uma porta de entrada e uma porta de saída, xt carrega o valor de entrada da rede como um vetor e é introduzido no sistema, ht gera o Célula LSTM através da camada oculta e ct carrega o status da célula LSTM para realizar operações. As regras de operação do LSTM são as seguintes:

      Após o cálculo, ct e ht são retidos para o cálculo do próximo passo de tempo; após a conclusão da última etapa do cálculo, o vetor da camada oculta hk é usado como saída e comparado com o valor previsto correspondente a este grupo de sequências para obter o valor da função de perda. De acordo com o algoritmo de descida de gradiente, otimize pesos e parâmetros de polarização para treinar os parâmetros de rede mais precisos dentro do intervalo de iterações.

1.3 Estrutura CNN-LSTM

    Tomando como exemplo a previsão de séries temporais, a estrutura do CNN-LSTM compartilhada desta vez é mostrada na Figura 4.

Figura 4 Estrutura CNN-LSTM

2. Prática de código

clcclearload('Train.mat')load('Test.mat')% LSTM 层设置,参数设置inputSize = size(Train_xNorm{1},1);   %数据输入x的特征维度outputSize = 1;  %数据输出y的维度  numhidden_units1=50;numhidden_units2= 20;numhidden_units3=100;%opts = trainingOptions('adam', ...    'MaxEpochs',10, ...    'GradientThreshold',1,...    'ExecutionEnvironment','cpu',...    'InitialLearnRate',0.001, ...    'LearnRateSchedule','piecewise', ...    'LearnRateDropPeriod',2, ...   %2个epoch后学习率更新    'LearnRateDropFactor',0.5, ...    'Shuffle','once',...  % 时间序列长度    'SequenceLength',k,...    'MiniBatchSize',24,...    'Verbose',0);%% lstmlayers = [ ...        sequenceInputLayer([inputSize,1,1],'name','input')   %输入层设置    sequenceFoldingLayer('name','fold')    convolution2dLayer([2,1],10,'Stride',[1,1],'name','conv1')    batchNormalizationLayer('name','batchnorm1')    reluLayer('name','relu1')    maxPooling2dLayer([1,3],'Stride',1,'Padding','same','name','maxpool')    sequenceUnfoldingLayer('name','unfold')    flattenLayer('name','flatten')    lstmLayer(numhidden_units1,'Outputmode','sequence','name','hidden1')     dropoutLayer(0.3,'name','dropout_1')    lstmLayer(numhidden_units2,'Outputmode','last','name','hidden2')     dropoutLayer(0.3,'name','drdiopout_2')    fullyConnectedLayer(outputSize,'name','fullconnect')   % 全连接层设置(影响输出维度)(cell层出来的输出层) %    tanhLayer('name','softmax')    regressionLayer('name','output')];lgraph = layerGraph(layers)lgraph = connectLayers(lgraph,'fold/miniBatchSize','unfold/miniBatchSize');plot(lgraph)%% 网络训练ticnet = trainNetwork(Train_xNorm,Train_yNorm,lgraph,opts);%% 测试figurePredict_Ynorm = net.predict(Test_xNorm);Predict_Y  = mapminmax('reverse',Predict_Ynorm',yopt);Predict_Y = Predict_Y';plot(Predict_Y,'g-')hold on plot(Test_y);    legend('预测值','实际值')

Resultados experimentais:


    Parte do conhecimento vem da Internet. Se houver alguma violação, entre em contato com o autor para excluí-lo ~


    É isso para o compartilhamento de hoje. Se você quiser saber mais sobre algoritmos inteligentes, aprendizado de máquina, aprendizado profundo e teorias relacionadas ao processamento de sinais, pode me enviar uma mensagem privada em segundo plano. Espero que todos encaminhem, curtam e adicionem ao seu favoritos. Seu apoio é minha fonte constante de motivação criativa!


Autor | Hua Xia

Editor | Hua Xia

Revisão | Huaxia

Acho que você gosta

Origin blog.csdn.net/qq_45013535/article/details/132908344
Recomendado
Clasificación