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
clc
clear
load('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);
%% lstm
layers = [ ...
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)
%
% 网络训练
tic
net = trainNetwork(Train_xNorm,Train_yNorm,lgraph,opts);
%% 测试
figure
Predict_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