[Previsão de série temporal] Previsão de carga de eletricidade de recurso único com base no algoritmo de rede neural BP, LSTM, CNN-LSTM [ensino prático em nível de babá]

Diretório de artigos da série

Princípios de aprendizagem profunda ----- método de regressão linear + gradiente descendente Princípios
de aprendizagem profunda ----- algoritmo de regressão logística
Princípios de aprendizagem profunda ----- rede neural totalmente conectada Princípios
de aprendizagem profunda ----- convolucional
profundidade da rede neural Princípio de aprendizagem ----- rede neural recorrente (RNN, LSTM)
previsão de séries temporais ----- com base no algoritmo de rede neural BP, LSTM, CNN-LSTM, previsão de carga elétrica de recurso único
previsão de séries temporais (multi -recursos) --- --- Previsão de carga de eletricidade com vários recursos com base no algoritmo de rede neural BP, LSTM, CNN-LSTM


Série de vídeos didáticos

Introdução rápida ao aprendizado profundo e ao combate real
[ensino prático] com base na previsão de carga de eletricidade de recurso único da rede neural BP
[ensino prático] com base na previsão de carga de eletricidade de recurso único da rede neural RNN, LSTM
[ensino prático] com base na rede neural CNN-LSTM consumo de eletricidade de recurso único Previsão de carga
[previsão de vários recursos] Previsão de carga elétrica de vários recursos com base na rede neural BP
[previsão de vários recursos] Previsão de carga de energia de vários recursos com base em RNN e LSTM [Multi -previsão de recursos
] Previsão de carga de energia com vários recursos baseada na rede CNN-LSTM


prefácio

  A energia elétrica é uma energia da qual o ser humano não pode prescindir, mas a energia elétrica é uma energia que não é fácil de armazenar. A maior parte da energia elétrica atual da China é gerada por energia térmica; o consumo de energia elétrica em uma região muda com o tempo. Mudança ; se a geração de energia for menor que o consumo de energia das pessoas, isso levará à instabilidade de tensão e muitas pessoas não poderão usar eletricidade. Se a geração de energia for maior que o consumo de energia das pessoas, devido ao difícil armazenamento de energia elétrica, pode levar ao desperdício de energia elétrica. Portanto, se houver uma previsão precisa do consumo futuro de eletricidade, o desperdício de energia elétrica pode ser bastante evitado e a estabilidade do sistema de energia também pode ser mantida.
  No contexto acima, a previsão de carga de energia sempre foi um tópico de pesquisa científica relativamente quente; sob o atual rápido desenvolvimento da tecnologia de aprendizado profundo, um grande número de modelos de rede neural de aprendizado profundo foi aplicado para previsão de carga de energia e uma previsão relativamente boa tem também foi alcançado resultado. As tarefas de previsão de carga de energia podem ser divididas em previsão de recurso único e previsão de vários recursos. A previsão de recurso único usa dados de carga de energia para prever dados de carga de energia e a previsão de vários recursos usa fatores que afetam a carga de energia e os dados de carga de energia para prever a energia carregar.dados.
  Este artigo usa principalmente rede neural BP, RNN, rede neural LSTM e rede neural CNN-LSTM em aprendizado profundo para realizar previsão de carga de energia de recurso único e compara os modelos.


1. Análise de dados de carga de energia de característica única

1.1. Exibição de dados

  O conjunto de dados experimentais para aprendizado profundo da previsão de carga elétrica de recurso único é o seguinte:
  dados específicos podem ser obtidos em meu curso:
  [ensino prático] com base na previsão de carga elétrica de recurso único da rede neural BP
  [ensino prático] com base em RNN, rede neural LSTM Previsão de carga de eletricidade de recurso único
  [ensino prático] Previsão de carga de eletricidade de recurso único com base na rede neural CNN-LSTM
insira a descrição da imagem aqui
  Os dados são os dados de uma determinada área em 2014 e o ponto de amostragem do os dados são a cada 15 minutos, portanto, há um total de 96 pontos de amostragem. Portanto, os dados acima têm um total de 365 linhas e 96 colunas de dados, cada linha corresponde aos dados de carga de energia de um dia e cada coluna corresponde aos dados de carga de energia de um dos pontos de amostragem. Por ser um estudo de previsão de carga de energia com um único recurso, não há outros recursos nos dados, exceto dados de carga de energia.

1.2. Analise a lei na carga de potência

  Conforme mostrado na figura abaixo, é um mapa de exibição de dados de carga elétrica para um ano inteiro em 2014 em uma determinada região.

insira a descrição da imagem aqui
  Pode-se observar pela figura que em fevereiro o consumo de energia elétrica nesta região foi o menor de todo o ano. Ao mesmo tempo, o consumo geral de eletricidade é relativamente alto de junho a setembro, o que pode estar relacionado ao clima, pois o clima quente durante esse período leva a um consumo relativamente alto de eletricidade.
  Ao mesmo tempo, observe atentamente o consumo de energia na imagem, parece estar em um estado de altos e baixos e ciclos repetidos.Do senso comum da vida, o consumo de energia tem uma forte correlação com o trabalho e o descanso das pessoas. Então, vamos dar uma olhada na aparência do diagrama de carga de energia semanal.
insira a descrição da imagem aqui
  Conforme mostrado na figura acima, o valor de carga de energia semanal da área é exibido na forma de um gráfico; pode ser visto na figura que o consumo de energia de segunda a sexta-feira durante a semana é maior que o valor de pico do ponto usado em Sábado e domingo em dias de descanso é alta, o que pode indicar que muita energia elétrica está sendo colocada no trabalho. Ao mesmo tempo, a forma de onda da carga de eletricidade na figura está em um estado cíclico, o que obviamente mostra que existe uma forte correlação entre o consumo de eletricidade e o trabalho e descanso das pessoas; quando as pessoas estão descansando, elas mantêm um estado de consumo de eletricidade muito baixo. Quando as pessoas trabalham e vivem, o consumo de energia elétrica está em um estado muito alto; e esse estado se repete constantemente.


2. Previsão de carga elétrica de recurso único com base na rede neural BP

2.1. Modelo de rede neural BP aplicado à previsão de carga de energia de recurso único

  A previsão de carga elétrica de característica única é essencialmente uma tarefa de regressão, ou seja, o valor de saída da rede neural final é um valor incerto contínuo.
  A entrada de dados na rede neural é chamada de recurso, que geralmente é representada por X, e a saída da rede neural é geralmente representada por y; ao mesmo tempo, a tarefa de previsão de regressão é uma tarefa de aprendizado supervisionado e os dados tem um rótulo correspondente, que é a rede neural. A resposta correta geralmente é representada por Y. Há um certo erro entre a saída y da rede neural e o rótulo Y. Usando esse erro, a retropropagação da rede neural pode ser executada. Usando a retropropagação, o erro entre a saída y e Y da rede neural é continuamente reduzido até ficar perto de 0. .
  O exposto acima é que o modelo de previsão de carga de recurso único aprende continuamente informações úteis dos dados para que o resultado final da previsão do modelo esteja próximo do valor real. Na tarefa de previsão de carga de recurso único, mesmo se os dados de carga de energia é inserido com o recurso X, também é o rótulo real Y dos dados, e A entrada tem e só tem dados de carga de energia. Em comparação com a tarefa de previsão de carga de energia com vários recursos, os recursos de entrada neste momento não incluem apenas carga de energia dados, mas também pode incluir fatores que afetam a carga de energia.
  Vamos dar uma olhada em como a rede neural BP usa dados de carga de energia para executar tarefas de previsão de carga de energia. A estrutura do modelo de rede neural BP nesta tarefa é a seguinte:
insira a descrição da imagem aqui
  Conforme mostrado na figura acima, é um diagrama de modelo da rede neural BP para previsão de carga de energia de recurso único. Pode ser visto na figura que a entrada da rede neural BP contém apenas o valor de carga de energia. A rede neural contém duas camadas ocultas e o cálculo da camada oculta finalmente gera o valor de saída da rede neural através da camada de saída. Este valor é o valor previsto da carga elétrica.


2.2. Pré-processamento de dados e divisão do conjunto de dados

  A seguir está a parte de pré-processamento e divisão do conjunto de dados de previsão de carga elétrica de característica única:

# 获取前80%作为数据的训练集80%到90%作为验证集
# 划分训练集和验证集
train = dataset.iloc[0:int(len(a)*0.8), [0]]
val = dataset.iloc[int(len(a)*0.8):int(len(a)*0.9), [0]]


# 进行数据归一化,将数据归一化到0-1之间
scaler = MinMaxScaler(feature_range=(0, 1))
train = scaler.fit_transform(train)
val = scaler.fit_transform(val)


"""
进行训练集数据特征和对应标签的划分,其中前面96个采样点中的负荷特征
来预测第97个点的电力负荷值。
"""

# 设置训练集的特征列表和对应标签列表
x_train = []
y_train = []


# 将前96个采样点的天气特征和电价特征和负荷特征作为训练特征添加到列表中
# 按照上述规律不断滑动取值
for i in np.arange(96, len(train)):
    x_train.append(train[i - 96:i, :])
    y_train.append(train[i])

# 将训练集由list格式变为array格式
x_train, y_train = np.array(x_train), np.array(y_train)
x_train, y_train = np.reshape(x_train, (x_train.shape[0], 96)), np.reshape(y_train, (y_train.shape[0], 1))

# print(x_train.shape)
# print(y_train.shape)


# 设置训练集的特征列表和对应标签列表
x_val = []
y_val = []


# 将前48个采样点的天气特征和电价特征和负荷特征作为训练特征添加到列表中
# 按照上述规律不断滑动取值
for i in np.arange(96, len(val)):
    x_val.append(val[i - 96:i, :])
    y_val.append(val[i])

# 将训练集由list格式变为array格式
x_val, y_val = np.array(x_val), np.array(y_val)
x_val, y_val = np.reshape(x_val, (x_val.shape[0], 96)), np.reshape(y_val, (y_val.shape[0], 1))

  Em primeiro lugar, normalize os dados adquiridos. Os números nos dados tendem a ser relativamente grandes, o que torna o cálculo da rede de tempo mais lento. Portanto, o primeiro passo na previsão de dados é realizar o pré-processamento normalizado nele. Os recursos são normalizados entre 0-1. Como os dados experimentais são um ponto de amostragem de 15 minutos, ou seja, 96 pontos de amostragem por dia, ao definir a entrada e o rótulo da rede neural, defina os primeiros 1-96 pontos de amostragem dos dados para prever o 97º ponto, 2 -97 pontos de amostragem para prever o 98º ponto e continuar rolando de acordo com as regras acima.
  Ao mesmo tempo, defina a lista de recursos e rótulos correspondentes ao conjunto de treinamento e conjunto de verificação para instalar os dados e rótulos correspondentes, para que a rede neural subsequente possa usar os recursos de dados para aprender e reverter o erro calculado usando o valor de saída de propagação para a frente e o rótulo real. Atualize os parâmetros de peso da rede neural para a propagação, de modo que a rede neural possa aprender continuamente informações úteis dos dados.


2.3. Construção de modelo

O seguinte é o modelo de rede neural BP construído usando a estrutura de aprendizado profundo:

# 利用keras搭建BP神经网络,该网络隐藏层一共有两层,神经元分别为10
model = Sequential()
model.add(Dense(10, activation='relu'))
model.add(Dense(10, activation='relu'))
model.add(Dense(1))

# 对模型进行编译,选用Adam优化器,学习率为0.01
model.compile(optimizer=keras.optimizers.Adam(0.01), loss='mean_squared_error')

# 将训练集和测试集放入网络进行训练,每批次送入的数据为512个数据,一共训练30轮,将测试集样本放入到神经网络中测试其验证集的loss值
history = model.fit(x_train, y_train, batch_size=512, epochs=30, validation_data=(x_val, y_val))

# 保存训练好的模型
model.save('BP_model.h5')

Neste ponto, a rede neural BP foi construída e o conjunto de treinamento dividido pode ser usado para treinar a rede neural.
A seguir está o processo de treinamento da rede de carga de energia BP. Na figura abaixo, podemos ver que a perda do conjunto de treinamento e do conjunto de verificação da rede neural está diminuindo constantemente. Obviamente, o modelo de rede neural está constantemente convergindo. Dê uma olhada no gráfico final de comparação do valor de perda da rede neural BP conforme mostrado abaixo: Conforme mostrado na
insira a descrição da imagem aqui
figura acima, esta figura registra os valores de perda do conjunto de treinamento e do conjunto de verificação durante as 30 rodadas de treinamento do Rede neural BP Obviamente, após 20 rodadas O modelo de rede neural convergiu.


2.4. Previsão do modelo

  Na pasta do projeto, você pode ver que o arquivo de modelo que foi salvo e treinado foi gerado. Usando o arquivo de parâmetro de modelo, você pode executar inferência de modelo diretamente nas características dos dados de entrada. O arquivo de modelo gerado é mostrado na figura abaixo: Neste momento, você pode usar o modelo treinado
insira a descrição da imagem aqui
  para testar para testar e desnormalizar os valores previstos. O código específico é o seguinte:

# 导入训练好的模型权重文件
model = load_model("BP_model.h5")


# 测试集输入模型进行预测
predicted = model.predict(x_test)
# print(predicted.shape)
# print(test.shape)

# 将真实值标签进行反归一化操作,方便后续和真实值进行对比
real = scaler.inverse_transform(test[96:])

# 将模型预测出的值进行反归一化操作
prediction = scaler.inverse_transform(predicted)

  Compare o valor previsto com o rótulo real e desenhe o gráfico de comparação do valor previsto e o valor real da seguinte forma.
insira a descrição da imagem aqui
  A partir da comparação na figura acima, pode-se descobrir que a rede neural BP tem um certo efeito na previsão de carga de energia, mas pode-se ver que existem certos erros entre as previsões de pico e vale de pico e os valores reais. Especificamente, o índice de avaliação do modelo pode ser usado para avaliar o modelo.

# 计算模型的评价指标
R2 = r2_score(real, prediction)
MAE = mean_absolute_error(real, prediction)
RMSE = np.sqrt(mean_squared_error(real, prediction))
MAPE = np.mean(np.abs((real-prediction) / prediction))

# 打印模型的评价指标
print('R2:', R2)
print('MAE:', MAE)
print('RMSE:', RMSE)
print('MAPE:', MAPE)

  O cálculo do índice de avaliação específico é o seguinte:
insira a descrição da imagem aqui
  Para explicações mais detalhadas e códigos completos, você pode ir ao meu curso para obter:
  [ensino prático] previsão de carga de eletricidade de recurso único com base na rede neural BP
  [ensino prático] único -recurso de consumo de eletricidade com base na previsão de carga de rede neural RNN e LSTM
  [ensino prático] com base na previsão de carga de eletricidade de recurso único da rede neural CNN-LSTM


3. Previsão de carga elétrica de recurso único com base na rede neural RNN e LSTM

3.1. Os modelos de rede neural RNN e LSTM são aplicados à previsão de carga de energia de recurso único

No artigo, o princípio   do modelo de rede neural RNN/LSTM foi explicado em detalhes. Se você não entendeu, pode ler este artigo em detalhes. Dê uma olhada no curso que gravei, que explica esse modelo em detalhe.
  [ensino prático] Com base na previsão de carga de eletricidade de recurso único da rede neural BP
  [ensino prático] com base em RNN, previsão de carga de eletricidade de recurso único de rede neural LSTM [
  ensino prático] com base na rede neural CNN-LSTM única -recurso de previsão de carga de eletricidade
  Agora já sabemos O modelo da rede neural RNN e o modelo da rede neural LSTM podem ser representados pelo seguinte diagrama:
insira a descrição da imagem aqui

  Conforme mostrado na figura acima, esta figura é um gráfico de comparação entre a rede neural RNN e a rede neural LSTM. A figura superior é o diagrama estrutural da rede neural RNN e a figura inferior é o diagrama estrutural da rede neural LSTM Obviamente, a unidade de rede neural é diferente. Além disso, a rede neural RNN e a rede neural LSTM são basicamente as mesmas. Em seguida, vamos usar a rede neural LSTM como exemplo para ver como a rede neural LSTM executa tarefas de previsão de carga de energia de recurso único.
insira a descrição da imagem aqui

  Conforme mostrado na figura acima, ela mostra como os dados de carga de energia com vários recursos são inseridos na rede neural LSTM; aqui é importante enfatizar que esta figura não pode ser vista como um todo, mas deve ser vista da esquerda para a direita, que é, em ordem. A entrada de dados para 3 etapas de tempo é plotada na figura.
  Primeiro, insira o valor dos dados de carga de energia no tempo t-1 para calcular a unidade de rede neural LSTM e os valores calculados são enviados para dois locais, respectivamente. O primeiro é usado como saída da camada oculta da rede neural para a próxima camada, e a segunda é usada como a saída da camada oculta da rede neural. Como a entrada da próxima etapa de tempo; portanto, a entrada de dados no tempo t são os dados de carga de energia naquele momento e os resultado de saída do passo de tempo no tempo anterior, então a entrada no tempo t inclui as informações do tempo anterior. A saída no tempo t tem as mesmas duas saídas que no tempo t-1. O cálculo no tempo t+1 é o mesmo que o cálculo no tempo t, então o cálculo continua de acordo com a regra acima mencionada até que o cálculo termine no último horário definido.
  Os dados deste artigo são um ponto de amostragem a cada 15 minutos, ou seja, serão amostrados 96 pontos por dia. Uma vez que os dados de carga de energia analisados ​​acima mudam periodicamente com o trabalho e descanso das pessoas, na previsão de carga de energia de característica única, os dados de carga dos primeiros 96 pontos de amostragem são considerados como os recursos de entrada do modelo para prever a potência da 97ª amostragem point Carregar dados; continue rolando de acordo com a lei.
  Portanto, neste experimento, a rede neural LSTM deve calcular continuamente 96 etapas de tempo até a saída final do valor previsto. Aqui, quero enfatizar que calcular 96 intervalos de tempo não significa que existem 96 unidades de cálculo mencionadas acima, mas que a mesma unidade repete os cálculos 96 vezes; portanto, essa rede neural também é chamada de rede neural cíclica. Da mesma forma, o processo de cálculo da rede neural RNN e da rede neural LSTM é o mesmo.


3.2. Pré-processamento de dados e divisão do conjunto de dados

  A seguir está a parte de pré-processamento e divisão do conjunto de dados de previsão de carga de energia:

# 进行数据归一化,将数据归一化到0-1之间
scaler = MinMaxScaler(feature_range=(0, 1))
train = scaler.fit_transform(train)
val = scaler.fit_transform(val)


"""
进行训练集数据特征和对应标签的划分,其中前面96个采样点中的负荷特征
来预测第97个点的电力负荷值。
"""

# 设置训练集的特征列表和对应标签列表
x_train = []
y_train = []

# 将前96个采样点的天气特征和电价特征和负荷特征作为训练特征添加到列表中
# 按照上述规律不断滑动取值
for i in np.arange(96, len(train)):
    x_train.append(train[i - 96:i, :])
    y_train.append(train[i])

# 将训练集由list格式变为array格式
x_train, y_train = np.array(x_train), np.array(y_train)

# 设置训练集的特征列表和对应标签列表
x_val = []
y_val = []

# 将前96个采样点的天气特征和电价特征和负荷特征作为训练特征添加到列表中
# 按照上述规律不断滑动取值
for i in np.arange(96, len(val)):
    x_val.append(val[i - 96:i, :])
    y_val.append(val[i])

# 将训练集由list格式变为array格式
x_val, y_val = np.array(x_val), np.array(y_val)

  O acima é o pré-processamento de dados do modelo de rede neural LSTM e a divisão do conjunto de treinamento e do conjunto de verificação. É o mesmo que o pré-processamento do conjunto de dados da rede neural BP anterior. Depois que os dados são obtidos, os dados devem ser normalizado.Esta etapa Ao acelerar a atualização dos parâmetros da rede neural, também é propício para melhorar a precisão da previsão da rede neural.
  Deve-se enfatizar aqui que o formato de dados do modelo de rede de saída de RNN e LSTM é [número de amostras, intervalo de tempo, número de recursos]; o número de amostras é fácil de entender, ou seja, quantas amostras existem em o conjunto de treinamento; a etapa de tempo é a rede neural cíclica Quantos cálculos a rede precisa fazer no total? Por exemplo, o experimento neste caso usa os fatores de influência e os dados de carga das 96 etapas de tempo anteriores como recursos para prever o dados do ponto 97. Em seguida, a rede neural do ciclo precisa circular 96 vezes, cada vez Calcule os dados característicos de uma etapa de tempo; os dados característicos também são fáceis de entender, a característica neste experimento é a carga (aqui deve observe que os dados de carga elétrica são uma característica e um rótulo). Então, vamos dar uma olhada nas dimensões de dados do conjunto de dados final:
insira a descrição da imagem aqui
  obviamente, o conjunto de treinamento tem 27.936 amostras, a etapa de tempo é 96 e o ​​recurso é 1; obviamente, o conjunto de validação tem 3.408 amostras, a etapa de tempo é 96, e o recurso é 1. .


3.3. Construção de modelos

  A seguir está o modelo de rede neural RNN construído usando a estrutura de aprendizado profundo:

# 利用keras搭建RNN神经网络,该网络隐藏层一共有两层,神经元分别为10
model = Sequential()
model.add(SimpleRNN(10, return_sequences=True, activation='relu'))
model.add(SimpleRNN(10, return_sequences=False, activation='relu'))
model.add(Dense(10, activation='relu'))
model.add(Dense(1))

# 对模型进行编译,选用Adam优化器,学习率为0.01
model.compile(optimizer=keras.optimizers.Adam(0.01), loss='mean_squared_error')

# 将训练集和测试集放入网络进行训练,每批次送入的数据为512个数据,一共训练30轮,将测试集样本放入到神经网络中测试其验证集的loss值
history = model.fit(x_train, y_train, batch_size=512, epochs=30, validation_data=(x_val, y_val))

# 保存训练好的模型
model.save('RNN_model.h5')

  A seguir está o modelo de rede neural LSTM construído usando a estrutura de aprendizado profundo:

# 利用keras搭建LSTM神经网络,该网络隐藏层一共有两层,神经元分别为10
model = Sequential()
model.add(LSTM(10, return_sequences=True, activation='relu'))
model.add(LSTM(10, return_sequences=False, activation='relu'))
model.add(Dense(10, activation='relu'))
model.add(Dense(1))

# 对模型进行编译,选用Adam优化器,学习率为0.01
model.compile(optimizer=keras.optimizers.Adam(0.01), loss='mean_squared_error')

# 将训练集和测试集放入网络进行训练,每批次送入的数据为512个数据,一共训练30轮,将测试集样本放入到神经网络中测试其验证集的loss值
history = model.fit(x_train, y_train, batch_size=512, epochs=30, validation_data=(x_val, y_val))

# 保存训练好的模型
model.save('LSTM_model.h5')

  O seguinte usa a rede neural LSTM como um exemplo para explicar. O processo de treinamento da rede neural LSTM é mostrado na figura abaixo. Pode-se ver que o valor da perda está diminuindo continuamente. Após a conclusão do treinamento do modelo, o valor da perda do modelo é o seguinte: Obviamente, a rede está próxima para convergência em cerca de 5 rodadas.Para
insira a descrição da imagem aqui
  rede neural BP, a convergência é mais rápida.


3.4. Previsão do modelo

  Após a conclusão do treinamento do modelo, o modelo treinado é salvo e o arquivo de parâmetro do modelo pode ser usado para executar a inferência do modelo diretamente nas características dos dados de entrada. Os parâmetros do modelo gerado são os seguintes:

insira a descrição da imagem aqui
  Neste momento, o modelo treinado pode ser usado para testar o teste e o valor previsto previsto pode ser desnormalizado. O código específico é o seguinte:

model = load_model("LSTM_model.h5")

# 测试集输入模型进行预测
predicted = model.predict(x_test)
# print(predicted.shape)
# print(test.shape)

# 将真实值标签进行反归一化操作,方便后续和真实值进行对比
real = scaler.inverse_transform(test[96:])


# 将模型预测出的值进行反归一化操作
prediction = scaler.inverse_transform(predicted)

  Compare o valor previsto com o rótulo real e desenhe o gráfico de comparação do valor previsto e o valor real da seguinte forma.
insira a descrição da imagem aqui
  A partir da comparação na figura acima, pode-se descobrir que o efeito da rede neural LSTM na previsão de carga de energia é muito bom e o modelo pode ser avaliado usando o índice de avaliação do modelo.

# 计算模型的评价指标
R2 = r2_score(real, prediction)
MAE = mean_absolute_error(real, prediction)
RMSE = np.sqrt(mean_squared_error(real, prediction))
MAPE = np.mean(np.abs((real-prediction) / prediction))

# 打印模型的评价指标
print('R2:', R2)
print('MAE:', MAE)
print('RMSE:', RMSE)
print('MAPE:', MAPE)

  O cálculo do índice de avaliação específico é o seguinte
insira a descrição da imagem aqui
  Explicação mais detalhada e código completo podem ser obtidos em meu curso:
  [ensino prático] baseado em rede neural BP previsão de carga de eletricidade de recurso único
  [ensino prático] baseado em RNN, LSTM neural Previsão de carga de eletricidade de recurso único de rede
  [ensino prático] com base na previsão de carga de eletricidade de recurso único de rede neural CNN-LSTM


4. Previsão de carga elétrica de recurso único com base na rede neural CNN-LSTM

4.1. Modelo de rede neural CNN-LSTM aplicado à previsão de carga de energia com vários recursos

  Comparado com um único modelo de rede neural, em alguns cenários, o efeito de um modelo combinado costuma ser melhor do que o de um único modelo, porque o modelo combinado costuma ter vantagens complementares. O modelo de rede CNN-LSTM é o primeiro modelo de rede neural combinado explicado nesta série. Não é difícil descobrir pelo nome do modelo de rede neural que o modelo de rede neural é uma combinação da rede neural CNN e da rede neural LSTM para aprender e prever dados de carga de energia. Mas aqui quero enfatizar que a rede neural CNN usada aqui é uma rede neural convolucional unidimensional; e a rede neural convolucional com a qual todos entram em contato durante o processo de aprendizado de aprendizado profundo é basicamente uma rede neural convolucional bidimensional, porque comparada a outras No que diz respeito à rede neural, a rede neural convolucional bidimensional é realmente melhor do que outras redes neurais na extração de recursos de imagens; mas este artigo usa o modelo de rede neural combinada para extrair os recursos do poder Dados de carga A partir da análise acima, podemos saber que os dados de carga elétrica são dados típicos de um modelo de série temporal. Portanto, a rede neural convolucional unidimensional pode ser usada para extrair dados de séries temporais. Antes de aprender a rede neural convolucional unidimensional, é recomendável aprender o princípio de aprendizado profundo da rede neural convolucional bidimensional ----- rede neural convolucional . Aqui estão os artigos relacionados e os cursos em vídeo correspondentes que escrevi.
  [ensino prático] baseado em rede neural BP previsão de carga de eletricidade de recurso único
  [ensino prático] baseado em RNN, previsão de carga de eletricidade de recurso único de rede neural LSTM [
  ensino prático] baseado em rede neural CNN-LSTM única -recurso de previsão de carga de eletricidade

4.1.1. Operação de convolução unidimensional

  Em comparação com a operação de convolução bidimensional, que executa operações de convolução deslizando para a esquerda, direita, para cima e para baixo em todo o mapa de recursos, a operação de convolução unidimensional executa apenas deslizamento contínuo no recurso de dados H para operações de convolução. Especificamente como mostrado na figura.
insira a descrição da imagem aqui
  Conforme mostrado na figura acima, assumindo que a dimensão dos dados neste momento é H×W (obviamente, na tarefa de previsão de carga de energia de recurso único, uma vez que a entrada de dados tem apenas um recurso de carga, a dimensão do os dados neste momento geralmente são H × 1), então isso Enquanto a altura do kernel de convolução for definida, conforme mostrado na figura, se a altura do kernel de convolução for definida como 3, então a dimensão do kernel de convolução deve ser 3 × W, porque a operação de convolução unidimensional executa apenas uma direção Deslizamento; claro, a operação de convolução também pode ser realizada em operações de convolução bidimensionais, como definir o passo. Use o kernel de convolução definido para deslizar continuamente nos recursos de dados, multiplique os fatores correspondentes com o kernel de convolução e o campo receptivo correspondente e, finalmente, some. Repita a operação até não conseguir mais deslizar para baixo. A operação específica é mostrada na figura acima.
  Obviamente, os dados para convolução unidimensional não são necessariamente dados de canal único. Os dados podem ter vários canais. Ao mesmo tempo, espera-se definir artificialmente o canal dos dados de saída após a operação de convolução. O cálculo específico é mostrado na figura abaixo: Conforme mostrado na figura acima
insira a descrição da imagem aqui
  , suponha que a dimensão dos dados de entrada seja H × W × C; então o número de canais do kernel de convolução correspondente deve ser C neste momento e a largura da convolução kernel da operação de convolução unidimensional deve ser igual à largura do mapa de recursos, então A largura do kernel de convolução também é W; ao mesmo tempo, defina a altura do kernel de convolução para FH, então a dimensão de o kernel da convolução é FH×W×C; se você quiser definir o número de canais dos dados de saída, então você deve definir o número de kernels da convolução; assumindo que o tamanho do canal dos dados a serem enviados é FN, então o número de kernels de convolução deve ser definido como FN. Portanto, a dimensão dos dados de saída finais por cálculo é OH×1×FN.

4.1.2. Operação de agrupamento unidimensional

  (1) Maximum pooling
  Maximum pooling consiste em selecionar o valor máximo para a área selecionada, que é o mesmo que a operação de pooling bidimensional, conforme figura a seguir:
insira a descrição da imagem aqui

  (2) Average pooling
  Average pooling consiste em selecionar o valor médio para a área selecionada, que é o mesmo que a operação de pooling bidimensional, conforme a figura a seguir:
insira a descrição da imagem aqui

4.2. Modelo CNN-LSTM aplicado à previsão de carga elétrica com múltiplos fatores de influência

  Após a análise da operação de convolução unidimensional acima e da operação de agrupamento, o modelo de rede neural combinado de CNN-LSTM, conforme mostrado na figura abaixo, é construído.
insira a descrição da imagem aqui
  Pode-se ver na figura que a entrada da rede neural são dados de carga de energia com um único recurso e os dados são amostrados a cada 15 minutos, portanto, a amostragem de um dia é de 96 pontos no tempo e os dados de carga de energia são um dados típicos de séries temporais Os dados anteriores Os dados de tempo têm uma certa influência nos dados seguintes, de modo que os dados dos primeiros 96 pontos de amostragem são inseridos como entrada da rede neural.
Primeiro, a operação de convolução unidimensional é executada nos dados. Pode ser visto acima que os dados após a operação de convolução unidimensional são dados N × 1 dimensional. Na figura, sete núcleos de convolução são usados ​​para executar um Algoritmo de convolução bidimensional, de modo que os dados 7 N×1 dimensionais obtidos; isto é, para obter um canal de dados com 7 canais de dados e um comprimento e largura de dados N×1.
  Em seguida, execute uma operação de agrupamento unidimensional nos dados convolutos. Independentemente de ser um agrupamento bidimensional ou um agrupamento unidimensional, o número de canais de dados após a operação de agrupamento permanece inalterado. O comprimento dos dados após a operação de agrupamento unidimensional é menor que o original (claro, pode permanecer o mesmo ou aumentar, dependendo dos valores de parâmetros específicos da operação de agrupamento). Os dados após a operação de pooling também podem ser submetidos a uma operação de convolução unidimensional, mas para facilitar a observação da estrutura geral, o modelo neste artigo desenha uma operação de convolução e uma de pooling.
  Finalmente, a estrutura de recursos extraída pela rede neural convolucional é inserida na rede neural LSTM e as informações da série temporal são aprendidas pela rede neural LSTM. E no final da estrutura da rede neural, a camada de rede neural totalmente conectada é conectada e a rede neural totalmente conectada prevê os recursos extraídos e aprendidos anteriormente e, finalmente, gera o valor previsto.


4.3. Pré-processamento de dados e divisão do conjunto de dados

  A seguir está a parte de pré-processamento e divisão do conjunto de dados de previsão de carga de energia:

# 进行数据归一化,将数据归一化到0-1之间
scaler = MinMaxScaler(feature_range=(0, 1))
train = scaler.fit_transform(train)
val = scaler.fit_transform(val)


"""
进行训练集数据特征和对应标签的划分,其中前面96个采样点中负荷特征
来预测第97个点的电力负荷值。
"""

# 设置训练集的特征列表和对应标签列表
x_train = []
y_train = []


# 将前96个采样点的天气特征和电价特征和负荷特征作为训练特征添加到列表中
# 按照上述规律不断滑动取值
for i in np.arange(96, len(train)):
    x_train.append(train[i - 96:i, :])
    y_train.append(train[i])

# 将训练集由list格式变为array格式
x_train, y_train = np.array(x_train), np.array(y_train)


# print(x_train.shape)
# print(y_train.shape)


# 设置训练集的特征列表和对应标签列表
x_val = []
y_val = []


# 将前48个采样点的天气特征和电价特征和负荷特征作为训练特征添加到列表中
# 按照上述规律不断滑动取值
for i in np.arange(96, len(val)):
    x_val.append(val[i - 96:i, :])
    y_val.append(val[i])

# 将训练集由list格式变为array格式
x_val, y_val = np.array(x_val), np.array(y_val)

4.4. Construção de modelo

  A seguir está o modelo de rede neural CNN-LSTM construído usando a estrutura de aprendizagem profunda:

# 利用keras搭建RNN神经网络,该网络隐藏层一共有两层,神经元分别为10
model = Sequential()
model.add(Conv1D(filters=32, kernel_size=3, strides=1, padding="same", activation="relu"))
model.add(MaxPooling1D(pool_size=2, strides=1, padding="same"))
model.add(Conv1D(filters=64, kernel_size=2, strides=1, padding="same", activation="relu"))
model.add(MaxPooling1D(pool_size=3, strides=1, padding="same"))
model.add(LSTM(10, return_sequences=True, activation='relu'))
model.add(LSTM(10, return_sequences=False, activation='relu'))
model.add(Dense(10, activation='relu'))
model.add(Dense(1))

# 对模型进行编译,选用Adam优化器,学习率为0.01
model.compile(optimizer=keras.optimizers.Adam(0.01), loss='mean_squared_error')

# 将训练集和测试集放入网络进行训练,每批次送入的数据为512个数据,一共训练30轮,将测试集样本放入到神经网络中测试其验证集的loss值
history = model.fit(x_train, y_train, batch_size=512, epochs=30, validation_data=(x_val, y_val))

# 保存训练好的模型
model.save('CNN_LSTM_model.h5')

  A figura abaixo mostra o mapa de valor de perda da rede neural CNN-LSTM. Pode ser visto na figura que o valor de perda da rede neural cai rapidamente. Isso mostra que a rede converge muito rapidamente.
insira a descrição da imagem aqui


4.5. Previsão do modelo

  Após a conclusão do treinamento do modelo, o modelo treinado é salvo e o arquivo de parâmetro do modelo pode ser usado para realizar inferência do modelo diretamente nas características dos dados de entrada. Os parâmetros do modelo gerado são os seguintes: Neste momento, o modelo treinado
insira a descrição da imagem aqui
  pode ser usado para testar o teste, e os valores de previsão previstos são desnormalizados. O código específico é o seguinte:

model = load_model("CNN_LSTM_model.h5")


# 测试集输入模型进行预测
predicted = model.predict(x_test)
# print(predicted.shape)
# print(test.shape)

# 将真实值标签进行反归一化操作,方便后续和真实值进行对比
real = scaler.inverse_transform(test[96:])


# 将模型预测出的值进行反归一化操作
prediction = scaler.inverse_transform(predicted)

  Compare o valor previsto com o rótulo real e desenhe o gráfico de comparação do valor previsto e o valor real da seguinte forma.
insira a descrição da imagem aqui
  A partir da comparação na figura acima, pode-se descobrir que a rede neural CNN-LSTM ainda pode prever a carga de energia. Especificamente, o modelo pode ser avaliado usando o índice de avaliação do modelo.
  Os códigos de índice de avaliação específicos são os seguintes:

# 计算模型的评价指标
R2 = r2_score(real, prediction)
MAE = mean_absolute_error(real, prediction)
RMSE = np.sqrt(mean_squared_error(real, prediction))
MAPE = np.mean(np.abs((real-prediction) / prediction))

# 打印模型的评价指标
print('R2:', R2)
print('MAE:', MAE)
print('RMSE:', RMSE)
print('MAPE:', MAPE)

  O cálculo do índice de avaliação específico é o seguinte:
insira a descrição da imagem aqui
  Para explicações mais detalhadas e códigos completos, você pode ir ao meu curso para obter:
  [ensino prático] previsão de carga de eletricidade de recurso único com base na rede neural BP
  [ensino prático] único -recurso de consumo de eletricidade com base na previsão de carga de rede neural RNN e LSTM
  [ensino prático] com base na previsão de carga de eletricidade de recurso único da rede neural CNN-LSTM


5. Resumo da análise comparativa de modelos de previsão de carga de energia de recurso único

  Construímos redes neurais BP, LSTM e CNN-LSTM e as testamos com o conjunto de teste e calculamos o índice do índice de avaliação do modelo correspondente. Em seguida, usaremos o valor desse índice de avaliação para avaliar o acima construído rede neural modelo para análise. Os valores dos índices de avaliação específicos são mostrados na tabela abaixo:

Avaliação de modelo/lance R2 MAE RMSE MAPA
PA 0,976 186.134 231.039 0,0208
LSTM 0,995 80.457 108.091 0,011
CNN-LSTM 0,994 91.2 118.535 0,013

  Conforme mostrado na tabela acima, é o índice de avaliação da previsão de carga elétrica com vários recursos usando a rede neural BP, LSTM e CNN-LSTM neste artigo; os índices de avaliação incluem R2, MAE, RMSE e MAPE; R2 significa que o valor mais próximo de 1 é melhor, e MAE , RMSE e MAPE estão mais próximos de 0, melhor; da tabela, pode-se concluir que LSTM tem o melhor efeito, seguido por CNN-LSTM, e BP tem o pior A análise pode tirar as seguintes conclusões:
  1 , A quantidade de dados neste artigo é relativamente suficiente, então os três modelos de algoritmo finais são realmente muito bons em termos de efeito. Pode prever muito bem o valor da carga elétrica.
  2. A julgar por um grande número de artigos, finalmente provou-se que o efeito do CNN-LSTM é melhor que o do LSTM, mas o efeito obtido neste artigo é que o LSTM tem um efeito melhor. As razões são as seguintes: ( 1) LSTM e
  CNN- Os parâmetros do modelo de LSTM não foram ajustados, portanto não é necessariamente o modelo ideal.
  (2) Este artigo não realiza estatísticas sob um grande número de experimentos, mas apenas os resultados experimentais obtidos de um ou dois experimentos, que podem ser acidentais.
  (3) Os dados neste artigo são relativamente suficientes.Se a superioridade do modelo CNN-LSTM pode ser demonstrada quando os dados são relativamente pequenos.
  (4) Embora o efeito do modelo CNN-LSTM seja pior do que o do LSTM, seja do mapa de previsão do modelo ou do índice de avaliação do modelo, a diferença direta entre os dois modelos é realmente muito pequena; portanto, se o o efeito do modelo LSTM não é bom Em alguns casos, o efeito do uso do CNN-LSTM será melhor.


6. Plano de atualização subsequente do modelo de previsão de carga de energia

  Espera-se que os seguintes artigos e vídeos de ensino relacionados ao modelo de previsão de carga de energia de algoritmos relacionados sejam atualizados até o final de 23. Se você quiser continuar a aprender a previsão de carga de energia ou precisar concluir o projeto, siga-me ( ou +q) 1343077375 e, ao mesmo tempo, coleção de artigos, continuarei atualizando artigos relacionados e vídeos de ensino.
  6.1 Previsão de carga de eletricidade de característica única baseada em algoritmos de rede neural BP, LSTM e CNN-LSTM (final)
  6.2 Previsão de carga de eletricidade de característica múltipla baseada em algoritmos de BP, RNN, LSTM e CNN-LSTM (final)
  6.3. Algoritmos BP, RNN, LSTM e CNN-LSTM baseados em Bayesian para previsão de carga de energia
  otimizada pelo Sri Lanka 6.4, algoritmos BP, RNN, LSTM e CNN-LSTM para previsão de carga de energia com base na otimização de enxame de partículas
  6.5, BP, RNN, e LSTM com base na otimização do algoritmo de colônia de formigas, previsão de carga de energia do algoritmo CNN-LSTM
  6.6, previsão de carga de energia do algoritmo BP, RNN, LSTM, CNN-LSTM com base no algoritmo genético
  6.7, previsão de carga de energia do algoritmo BP, RNN, LSTM, CNN-LSTM com base no algoritmo wolf pack
  6.8 , BP, RNN, LSTM, CNN-LSTM previsão de carga de energia baseada em algoritmo com base no algoritmo wolf pack
  6.9, BP, RNN, LSTM, CNN-LSTM previsão de carga de energia baseada em algoritmo com base no mecanismo de atenção
  6.10, previsão de carga de energia com base no algoritmo do transformador

Acho que você gosta

Origin blog.csdn.net/didiaopao/article/details/127039659
Recomendado
Clasificación