
LSTMASBICBDCAttention双卷积时间序列预测 [1]Python代码torch框架具有创新性可以发paper [2]ASB和ICB是2024年顶刊的一个新机制创新点顶级强通道注意力也挺新的这种结合极大程度提高了模型的精度 有送配套顶会原理pdf [3]利用ASBISB双卷积替换常规的CNN卷积比较CNN(cnn-lstm系列)来说极大程度提高精度 效果而且新机制创新强适合光风功率预测负荷预测寿命预测浓度预测等等时间序列预测 1.多变量单步输入单变量输出/可改多输出 2.评价指标R方 RMSE MAE MAPE 3.数据从excel/csv文件中读取 代码带数据一键运行注释清晰适合新手小白理解在时间序列预测领域不断创新的模型架构对于提升预测精度至关重要。今天咱们就来聊聊基于 PyTorch 框架下将 LSTM 与 ASB、ICB 以及 DCAttention 双卷积相结合的超有趣模型这个创新玩法可是有发 paper 的潜力哦一、新机制 ASB 和 ICB 的魔力ASB 和 ICB 可是 2024 年顶刊提出的超新机制创新点那叫一个强。它们与通道注意力的结合极大程度地提升了模型精度。简单来说ASB 和 ICB 就像是模型的“秘密武器”在数据处理过程中能够更精准地捕捉到数据中的关键信息帮助模型做出更准确的预测。二、双卷积替换 CNN 卷积的优势传统的 CNN - LSTM 系列模型中CNN 卷积存在一定局限。而咱们这里采用 ASB ISB 双卷积来替换常规的 CNN 卷积这一改变不得了模型精度大幅提升。想象一下以前的模型在信息提取上可能有点“粗枝大叶”而双卷积就像是给模型装上了“显微镜”能够更细致地分析数据捕捉到那些容易被忽略的重要特征。这种改进在光风功率预测、负荷预测、寿命预测、浓度预测等各种时间序列预测场景中都表现出色。三、模型的输入输出与评价指标输入输出这个模型支持多变量单步输入并且既可以单变量输出也能根据需求改成多输出。比如说在负荷预测中我们可以把多个影响因素作为输入变量然后预测出未来的负荷值单输出要是想同时预测多个不同时间点的负荷值就可以调整为多输出。评价指标为了衡量模型的预测效果我们使用 R 方、RMSE、MAE 和 MAPE 这些常见且有效的指标。R 方反映了模型对数据的拟合优度越接近 1 说明模型拟合得越好RMSE 衡量的是预测值与真实值误差的标准差数值越小代表预测越准确MAE 计算的是预测值与真实值误差的绝对值的平均值直观地体现了预测误差的平均大小MAPE 则是将误差用百分比表示方便在不同量级的数据上进行比较。四、代码实现下面咱们直接上代码让大家感受一下这个模型的实际运作。代码基于 PyTorch 框架数据从 excel/csv 文件读取带数据且一键运行注释清晰新手小白也能轻松理解。import torch import torch.nn as nn import pandas as pd import numpy as np from sklearn.model_selection import train_test_split from sklearn.metrics import r2_score, mean_squared_error, mean_absolute_error # 读取数据假设数据在data.csv文件中 data pd.read_csv(data.csv) # 提取特征和标签 features data.drop(target_column, axis 1).values labels data[target_column].values # 划分训练集和测试集 X_train, X_test, y_train, y_test train_test_split(features, labels, test_size 0.2, shuffle False) # 将数据转换为PyTorch张量 X_train torch.FloatTensor(X_train) X_test torch.FloatTensor(X_test) y_train torch.FloatTensor(y_train) y_test torch.FloatTensor(y_test) # 定义ASB模块 class ASB(nn.Module): def __init__(self, in_channels): super(ASB, self).__init__() self.avg_pool nn.AdaptiveAvgPool1d(1) self.fc nn.Sequential( nn.Linear(in_channels, in_channels // 16, biasFalse), nn.ReLU(inplaceTrue), nn.Linear(in_channels // 16, in_channels, biasFalse), nn.Sigmoid() ) def forward(self, x): b, c, _ x.size() y self.avg_pool(x).view(b, c) y self.fc(y).view(b, c, 1) return x * y.expand_as(x) # 定义ICB模块 class ICB(nn.Module): def __init__(self, in_channels): super(ICB, self).__init__() self.conv1 nn.Conv1d(in_channels, in_channels, kernel_size 1) self.relu nn.ReLU(inplaceTrue) self.conv2 nn.Conv1d(in_channels, in_channels, kernel_size 1) self.asb ASB(in_channels) def forward(self, x): identity x out self.conv1(x) out self.relu(out) out self.conv2(out) out self.asb(out) out identity return out # 定义DCAttention双卷积模块 class DCAttention(nn.Module): def __init__(self, in_channels): super(DCAttention, self).__init__() self.icb1 ICB(in_channels) self.icb2 ICB(in_channels) def forward(self, x): out self.icb1(x) out self.icb2(out) return out # 定义LSTM ASB ICB DCAttention模型 class LSTM_ASB_ICB_DCAttention(nn.Module): def __init__(self, input_size, hidden_size, num_layers, output_size): super(LSTM_ASB_ICB_DCAttention, self).__init__() self.input_size input_size self.hidden_size hidden_size self.num_layers num_layers self.output_size output_size self.lstm nn.LSTM(input_size, hidden_size, num_layers, batch_first True) self.dcattention DCAttention(hidden_size) self.fc nn.Linear(hidden_size, output_size) def forward(self, x): h0 torch.zeros(self.num_layers, x.size(0), self.hidden_size).to(x.device) c0 torch.zeros(self.num_layers, x.size(0), self.hidden_size).to(x.device) out, _ self.lstm(x, (h0, c0)) out out.permute(0, 2, 1) out self.dcattention(out) out out.permute(0, 2, 1) out self.fc(out[:, -1, :]) return out # 模型参数设置 input_size X_train.shape[1] hidden_size 64 num_layers 2 output_size 1 model LSTM_ASB_ICB_DCAttention(input_size, hidden_size, num_layers, output_size) # 定义损失函数和优化器 criterion nn.MSELoss() optimizer torch.optim.Adam(model.parameters(), lr 0.001) # 训练模型 num_epochs 100 for epoch in range(num_epochs): model.train() optimizer.zero_grad() outputs model(X_train.unsqueeze(0)) loss criterion(outputs.squeeze(), y_train) loss.backward() optimizer.step() if (epoch 1) % 10 0: print(fEpoch [{epoch 1}/{num_epochs}], Loss: {loss.item():.4f}) # 模型评估 model.eval() with torch.no_grad(): y_pred model(X_test.unsqueeze(0)) r2 r2_score(y_test, y_pred.squeeze().numpy()) rmse np.sqrt(mean_squared_error(y_test, y_pred.squeeze().numpy())) mae mean_absolute_error(y_test, y_pred.squeeze().numpy()) print(fR2: {r2:.4f}, RMSE: {rmse:.4f}, MAE: {mae:.4f})代码分析数据读取与预处理pythondata pd.readcsv(data.csv)features data.drop(targetcolumn, axis 1).valueslabels data[targetcolumn].valuesXtrain, Xtest, ytrain, ytest traintestsplit(features, labels, testsize 0.2, shuffle False)Xtrain torch.FloatTensor(Xtrain)Xtest torch.FloatTensor(Xtest)ytrain torch.FloatTensor(ytrain)ytest torch.FloatTensor(ytest)这里我们用pandas库从data.csv文件读取数据然后划分出特征和标签。接着使用traintestsplit将数据分为训练集和测试集并且将数据转换为 PyTorch 张量方便后续模型处理。ASB 和 ICB 模块-ASB 模块pythonclass ASB(nn.Module):definit(self, inchannels):super(ASB, self).init()self.avgpool nn.AdaptiveAvgPool1d(1)self.fc nn.Sequential(nn.Linear(inchannels, inchannels // 16, biasFalse),nn.ReLU(inplaceTrue),nn.Linear(inchannels // 16, inchannels, biasFalse),nn.Sigmoid())def forward(self, x):b, c, _ x.size()y self.avg_pool(x).view(b, c)y self.fc(y).view(b, c, 1)return x * y.expand_as(x)ASB 模块通过自适应平均池化和全连接层构建了一个通道注意力机制它可以根据输入特征的通道维度为每个通道生成一个权重从而突出重要的通道信息。ICB 模块pythonclass ICB(nn.Module):definit(self, inchannels):super(ICB, self).init()self.conv1 nn.Conv1d(inchannels, inchannels, kernelsize 1)self.relu nn.ReLU(inplaceTrue)self.conv2 nn.Conv1d(inchannels, inchannels, kernelsize 1)self.asb ASB(inchannels)def forward(self, x):identity xout self.conv1(x)out self.relu(out)out self.conv2(out)out self.asb(out)out identityreturn outLSTMASBICBDCAttention双卷积时间序列预测 [1]Python代码torch框架具有创新性可以发paper [2]ASB和ICB是2024年顶刊的一个新机制创新点顶级强通道注意力也挺新的这种结合极大程度提高了模型的精度 有送配套顶会原理pdf [3]利用ASBISB双卷积替换常规的CNN卷积比较CNN(cnn-lstm系列)来说极大程度提高精度 效果而且新机制创新强适合光风功率预测负荷预测寿命预测浓度预测等等时间序列预测 1.多变量单步输入单变量输出/可改多输出 2.评价指标R方 RMSE MAE MAPE 3.数据从excel/csv文件中读取 代码带数据一键运行注释清晰适合新手小白理解ICB 模块在两个 1x1 卷积层之间加入了 ASB 模块并采用残差连接这样可以更好地学习特征表示同时避免梯度消失问题。DCAttention 双卷积模块pythonclass DCAttention(nn.Module):definit(self, inchannels):super(DCAttention, self).init()self.icb1 ICB(inchannels)self.icb2 ICB(in_channels)def forward(self, x):out self.icb1(x)out self.icb2(out)return outDCAttention 模块由两个 ICB 模块组成进一步增强了特征提取能力让模型能够挖掘更复杂的特征关系。LSTM ASB ICB DCAttention 模型pythonclass LSTMASBICBDCAttention(nn.Module):definit(self, inputsize, hiddensize, numlayers, outputsize):super(LSTMASBICBDCAttention, self).init()self.inputsize inputsizeself.hiddensize hiddensizeself.numlayers numlayersself.outputsize outputsizeself.lstm nn.LSTM(inputsize, hiddensize, numlayers, batchfirst True)self.dcattention DCAttention(hiddensize)self.fc nn.Linear(hiddensize, output_size)def forward(self, x):h0 torch.zeros(self.numlayers, x.size(0), self.hiddensize).to(x.device)c0 torch.zeros(self.numlayers, x.size(0), self.hiddensize).to(x.device)out, _ self.lstm(x, (h0, c0))out out.permute(0, 2, 1)out self.dcattention(out)out out.permute(0, 2, 1)out self.fc(out[:, -1, :])return out这个模型结合了 LSTM 和我们自定义的双卷积模块。LSTM 负责处理时间序列数据中的长期依赖关系DCAttention 模块则对 LSTM 的输出进行进一步特征提取最后通过全连接层输出预测结果。训练与评估pythoncriterion nn.MSELoss()optimizer torch.optim.Adam(model.parameters(), lr 0.001)numepochs 100for epoch in range(numepochs):model.train()optimizer.zerograd()outputs model(Xtrain.unsqueeze(0))loss criterion(outputs.squeeze(), ytrain)loss.backward()optimizer.step()if (epoch 1) % 10 0:print(fEpoch [{epoch 1}/{numepochs}], Loss: {loss.item():.4f})model.eval()with torch.nograd():ypred model(Xtest.unsqueeze(0))r2 r2score(ytest, ypred.squeeze().numpy())rmse np.sqrt(meansquarederror(ytest, ypred.squeeze().numpy()))mae meanabsoluteerror(ytest, ypred.squeeze().numpy())print(fR2: {r2:.4f}, RMSE: {rmse:.4f}, MAE: {mae:.4f})这里我们定义了均方误差损失函数和 Adam 优化器来训练模型。在训练过程中我们每 10 个 epoch 打印一次损失值。训练完成后使用测试集评估模型性能计算并打印 R2、RMSE 和 MAE 指标。通过上述代码实现大家可以更直观地感受到 LSTM ASB ICB DCAttention 模型在时间序列预测中的魅力。无论是光风功率预测、负荷预测还是其他相关预测场景都不妨试试这个创新的模型架构说不定能带来意想不到的好效果哦要是对代码或者模型有任何疑问欢迎在评论区留言交流。