时间序列预测模型实战案例(五)基于Bi-LSTM横向搭配LSTM进行回归问题解决

双向长短期记忆网络(Bi-LSTM) 在开始之前,首先区分下均命名为RNN,新手很容易混淆的两大神经网络:循环神经网络(Recurrent Neural Network,RNN)和递归神经网络(Recurssion Neural Network,RNN)。 递归神经网络(RNN)是空间上的展开,处理的是树状结构的信息,模型结构如下: 循环神经网络(RNN)是时间上的展开,擅长处理以时间序列数据作为输入的预测问题, 其原因在于 RNN 的网络结构可以处理时间序列数据之间的相关性。模型结构如图所示,包括输入层 x、隐藏层 h、输出层 o,在隐藏层 阅读详情
AI摘要

本文详细介绍双向LSTM,回顾单向LSTM及其三种门控机制。阐述双向LSTM原理、优劣势,讲解其与单向LSTM的组合方式及实现参数。以电力变压器油温数据为例,给出模型所需数据结构和简单代码。最后总结该组合在时间预测和文本分析方面的表现,并提及后续将讲解更多时间序列预测模型。

目录

简介

单向LSTM

单向LSTM的回顾

LSTM的三种门控机制

双向LSTM

图解双向LSTM的机制原理

通俗小例子 

双向LSTM的优劣势

双向LSTM+单向LSTM

双向LSTM的实现 

模型所需数据结构

模型代码

文件下载地址

全文总结

其它时间序列预测模型的讲解!


 

 

简介

        在之前的文章中我们讲过单向的LSTM进行回归问题的解决,当时提到了双向LSTM但并没有过多的介绍,在这篇文章中我将通过数据集电力变压器油温数据详细的介绍双向LSTM,以及其机制,运行原理,以及如何横向搭配单向的LSTM进行回归问题的解决。

在本次实战案例当中主要分为几大部分,具体流程可看下面的文章结构图。

aacad69e64a84bbe905f7e7117350cd0.png

单向LSTM

单向LSTM的回顾

        在开始学习单向的LSTM结构之前我们先来回顾一下单向的LSTM结构,这里我只是简单介绍如果想要详细了解可以观看我之前的文章。

时间序列预测模型实战案例(三)(LSTM)(Python)(深度学习)时间序列预测(包括运行代码以及代码讲解)

LSTM(长短期记忆,Long Short-Term Memory)是一种用于处理序列数据的深度学习模型,属于循环神经网络(RNN)的一种变体,其使用一种类似于搭桥术结构的RNN单元。同时相对于普通的RNN,LSTM引入了三种门控机制,能够更有效地处理长期依赖和短期记忆问题,其在处理序列数据时能够有效解决传统RNN所遇到的梯度消失或梯度爆炸的问题,是RNN网络中最常使用的Cell之一。

LSTM的三种门控机制

        LSTM的三种门控机制:

  1. 输入门(Input Gate):输入门负责控制新输入信息对于细胞状态的更新程度。它通过使用sigmoid激活函数将输入信息进行筛选,决定哪些信息将会被记忆。

  2. 遗忘门(Forget Gate):遗忘门负责控制前一个时间步的细胞状态是否被遗忘,即决定了细胞状态中哪些信息将被保存下来。遗忘门通过使用sigmoid激活函数来确定需要被遗忘的信息,将其与前一个时间步的细胞状态相乘。

  3. 输出门(Output Gate):输出门根据当前的输入信息和细胞状态来计算当前时间步的隐藏状态。输出门通过使用sigmoid激活函数来决定细胞状态的哪些部分将被输出。然后,输出门的输出将与一个tanh激活的细胞状态相乘,得到当前时间步的隐藏状态。

        通过这三种门控机制和相应的激活函数,LSTM能够有效地控制信息的流动和更新,从而解决了传统循环神经网络(RNN)中长期依赖问题。输入门和遗忘门允许选择性地更新和遗忘信息,输出门则根据当前的输入和细胞状态生成隐藏状态。这样,LSTM可以捕捉和利用时间序列中复杂的模式和依赖关系,从而更好地处理时间序列相关的任务。

双向LSTM

图解双向LSTM的机制原理

        双向LSTM(Bidirectional LSTM)顾名思义就是有两个方向的单向LSTM,由正向和反向的单向LSTM组成,相对于传统的LSTM模型只考虑了当前时刻之前的上文信息,而双向LSTM则在此基础上引入了前向和后向两个方向的信息流,它们分别处理时间序列数据的正向和逆向顺序。

        正向LSTM按照时间步的顺序处理数据,而反向LSTM按照时间步的逆序处理数据。这意味着它能够分别从序列的起始和结束位置捕捉到关键的上下文特征。这种前向-后向的结构使得双向LSTM更富有表达能力,能够更好地理解序列数据中的整体语义和信息流动。这样,模型可以从过去和未来时间步中获得更全面的上下文信息。

简单的双向LSTM示例图

b74e3fa473704580ae3020c7efd7451e.png

        在正向LSTM中,当前时间步的输入信息会通过输入门、遗忘门和输出门的计算,更新当前时间步的细胞状态和隐藏状态。而在反向LSTM中,相应的计算会按照逆序进行。最后,正向和反向LSTM的隐藏状态会被连接在一起,形成双向LSTM的最终输出。

【PS:在其中正向和反向的LSTM结果进行拼接假设正向LSTM的隐藏状态为h_forward,维度是(batch_size, hidden_size),反向LSTM的隐藏状态为h_backward,也是(batch_size, hidden_size)。这两个隐藏状态会在每个时间步上进行拼接,得到最终连接后的隐藏状态h_concat,维度为(batch_size, 2 * hidden_size)具体过程可以看下图】

5992700026a641a5b92779a4bf0fd525.png

        通过正向和反向的处理,双向LSTM能够同时考虑过去和未来时间步的信息,从而更好地捕捉时间序列中的长期依赖关系和模式。这对于许多任务,如语音识别、自然语言处理、股票预测等具有重要意义,因为这些任务中的当前输出往往取决于过去和未来的输入。

        双向LSTM的设计使得模型可以在时间序列中双向地探索和学习信息,提高了模型的表达能力和预测准确性。

        下面是一个简单的沿着时间展开的双向LSTM结构图

9da8455721c8499ba4f6d03d6398c0d1.png

        下图是一个在神经网络里的时序图,我们通过它来帮助大家来理解双向LSTM的工作流程

69858700c24e4f1b838f9c30c2573f30.png

在按照时间序列正向运算之后,网络又从时间的最后一项反向的运算一遍,即把t2时刻的输入与默认值0一起反向生成out1。 

通俗小例子 

        下面我们来通过一个生活中的通俗小例子来具体的了解一下双向LSTM的机制

当我们阅读一篇文章时,我们会按照自然的顺序逐句阅读,从头到尾理解整个故事。这个过程就可以用双向LSTM来解释。

假设我们正在阅读一篇小说,文中描述了一个人的一天。双向LSTM可以帮助我们更好地理解这个故事。

在这个例子中,前向LSTM会从文章的开头开始处理。它首先会读取到主人公早上起床的描写,了解他慢慢地从床上爬起来、穿衣、洗漱的情节。前向LSTM通过记忆和学习这些上文信息,掌握主人公早晨的状态和活动。

与此同时,后向LSTM会从文章的结尾开始处理。它会读取到主人公一天中最后的描述,例如他晚上入睡前的情景。后向LSTM通过逆序处理,了解主人公的一天是如何结束的,是否有什么特殊事件或感受。

最后,前向和后向的信息会在双向LSTM中合并。通过结合前向和后向处理的结果,双向LSTM能够更好地把握文章的整体情节和主人公的发展变化。它可以理解主人公从早上到晚上的起伏变化,捕捉到故事中的重要事件,以及人物之间的相互关系。

通过双向LSTM的处理,我们能够更全面、更深入地理解整个故事。它不仅关注文章的局部细节,还能够将上下文和时间的关联作为考量因素,帮助我们获得更准确和丰富的阅读体验。

        这个例子展示了双向LSTM在阅读理解领域的应用。类似地,双向LSTM可以在其他时间序列,自然语言处理任务中帮助我们更好地理解和处理序列数据。

双向LSTM的优劣势

                双向LSTM相较于传统的单向LSTM模型有以下几个优势:

1. 上下文信息捕捉:双向LSTM能够同时利用过去和未来的信息,分别通过前向和后向处理,从而更全面地捕捉到序列数据中的上下文信息。这使得模型能够更好地理解整个序列的语义和关联,对于语言理解和序列建模任务非常有益。

2. 预测性能提升:通过结合前向和后向处理的结果,双向LSTM能够提升预测性能。由于模型可以同时考虑到过去和未来的信息,它在预测任务中能够更好地理解序列数据的动态变化和趋势,提高了模型的准确性和泛化能力。

3. 抑制信息丢失:传统的单向LSTM在处理长序列时,可能会因为距离较远的上下文信息遗忘而导致信息丢失的问题。而双向LSTM能够通过前向和后向处理,避免了这样的问题,保留了更多有用的上下文信息,提高了模型对于远距离依赖关系的建模能力。

4. 特征表达丰富:双向LSTM通过前向和后向处理,可以获得丰富的特征表达。前向LSTM关注上文信息,抓住序列的局部模式和依赖关系;而后向LSTM关注下文信息,捕捉序列的整体趋势和全局上下文。结合两者的结果能够提供更丰富、更准确的特征表示,有助于模型更好地学习序列数据的特性。

        总的来说,双向LSTM通过利用前向和后向的处理,增强了对序列数据的建模能力和表达能力。它能够更好地捕捉上下文信息、提升预测性能、抑制信息丢失,并且提供丰富的特征表达,使得在自然语言处理、时间序列分析等领域取得更好的结果。

        尽管双向LSTM在处理序列数据方面具有很多优势,但也存在一些限制和缺点:

1. 计算成本高:由于双向LSTM需要同时运行前向和后向处理,它的计算成本比传统的单向LSTM更高。这是因为需要处理两次序列数据并合并结果,增加了模型的计算复杂度和训练时间。

2. 内存消耗大:在某些情况下,双向LSTM可能需要占用更多的内存空间。除了前向和后向的隐状态和记忆状态外,还需要额外存储两个方向的处理结果。这可能对内存资源造成限制,并增加模型的内存消耗。

3. 未来信息泄露:双向LSTM在训练时可以同时访问过去和未来的信息,但在实际应用中,模型只能使用已有的历史数据进行预测。这就意味着模型可能会从未来的信息中学习到某些特征,从而降低了模型对真实场景的泛化能力。

4. 序列长度限制:由于计算和内存的限制,双向LSTM在处理长序列数据时可能会受到限制。较长的序列可能导致模型的训练时间增加并消耗更多的内存资源。此外,较长的序列也可能会导致双向LSTM在建模远距离依赖关系时遇到困难。

5. 过拟合风险:在某些情况下,双向LSTM可能容易过拟合训练数据。由于模型的参数量较大,特别是在处理大规模数据集时,模型可能过度学习到训练数据的噪声或特定的局部模式,导致对新数据的泛化能力下降。

双向LSTM+单向LSTM

        在上面回顾了单向LSTM并介绍了双向LSTM那么它们是如何组合在一起的?为什么组合在一起?

首先为什么要将双向LSTM和单向的LSTM进行横向连接呢?

        在其中双向 LSTM 可以捕获时间序列中的前后依赖关系,而单向 LSTM 能够进行顺序建模。将两者横向连接后,模型可以同时学习到时间序列的前后信息以及动态变化,从而获得更丰富的序列表示。在某些情况下,双向 LSTM 可能对过去和未来的信息更敏感,而单向 LSTM 则专注于当前时刻之前的信息。将两者结合可以使模型在面对不同类型的时间序列时具有更好的适应性

双向LSTM和单向的LSTM是如何组合在一起? 

        双向LSTM和单向LSTM的连接并没有什么特殊的,就是将双向LSTM的输出输入到单向的LSTM层即可,

双向LSTM的实现 

input_size = 10  # 输入特征的维度
hidden_size = 20  # 隐藏层神经元的数量
num_layers = 2  # LSTM 层的数量
batch_first = True  # 输入和输出张量的形状是否以 batch_size 为第一维度
dropout = 0.5  # 多层 LSTM 之间的 dropout 概率
bidirectional = True  # 是否使用双向 LSTM

lstm = nn.LSTM(input_size=input_size,
               hidden_size=hidden_size,
               num_layers=num_layers,
               batch_first=batch_first,
               dropout=dropout,
               bidirectional=bidirectional)

        下面我们通过举例的形式来了解每个参数的含义:假设我们有一个时间序列数据集,包含了过去一段时间内的股票价格。我们的目标是使用双向 LSTM 预测未来的股票价格。以下是针对这个例子的每个参数的详细解释:

1. `input_size`(int):在这个例子中,`input_size` 可能取决于我们使用的特征数量。例如,如果我们仅使用历史股票价格(即单变量时间序列),那么 `input_size` 为 1。如果我们还使用其他特征,如交易量、市值等,则 `input_size` 等于特征数量。

2. `hidden_size`(int):这是 LSTM 隐藏层神经元的数量。较大的 `hidden_size` 可能有助于捕捉更复杂的时间序列模式,但可能导致过拟合和更长的训练时间。例如,我们可以设置 `hidden_size` 为 64 或 128,具体取决于问题的复杂性和可用计算资源。

3. `num_layers`(int):这是堆叠的 LSTM 层数。在时间序列预测中,可能需要多层 LSTM 来捕捉更复杂的模式。例如,我们可以设置 `num_layers` 为 2 或 3,具体取决于问题的复杂性。

4. `batch_first`(bool):这个参数确定输入和输出张量的形状。对于时间序列预测问题,我们通常将 `batch_first` 设置为 `True`,这样输入和输出张量的形状为 (batch_size, seq_length, input_size) 和 (batch_size, seq_length, hidden_size * num_directions)。例如,如果我们有一个批次大小为 32 的数据集,时间序列长度为 50(即过去 50 个时间点的数据),则输入张量的形状为 (32, 50, 1)(假设我们只使用单变量时间序列)。

5. `dropout`(float):在多层 LSTM 之间应用的 dropout 概率。这有助于防止过拟合。例如,可以设置 `dropout` 为 0.5,表示在每个 LSTM 层之间应用 50% 的 dropout 概率。

6. `bidirectional`(bool):是否使用双向 LSTM。

模型所需数据结构

        在本次的模型所需的数据是电力变压器油温数据,由国家电网提供,该数据集是来自中国同一个省的两个不同县的变压器数据,时间跨度为2年,原始数据每分钟记录一次(用 m 标记),每个数据集包含2年 * 365天 * 24小时 * 60分钟 = 1,051,200数据点。

        每个数据点均包含8维特征,包括数据点记录日期,预测目标值OT(oil temperature)和6个不同类型功率负载特征。

(PS:如果你使用你自己的数据进行预测需要将时间列和官方数据集保持一致,因为在数据处理部分我添加了一部分特征工程操作,提取了一些时间信息,因为LSTM不支持时间格式的数据输入,需要转化为数字)

44f52a137de6450c889972cabe0ff2af.jpeg

模型代码

(PS:以下代码仅仅是一个简单的实现版本,并没有涉及到什么复杂的模型,适合初学者进行一个学习,本文的双向LSTM搭配单向LSTM进行时间序列处理仅仅是一个创意和想法) 

import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
from torch.utils.data import DataLoader, TensorDataset
import torch
import torch.nn as nn
from sklearn.preprocessing import StandardScaler
import torch.nn.functional as F

def create_sliding_window_data(data, input_window, output_window, output_column):
    X, y = [], []
    for i in range(len(data) - input_window - output_window + 1):
        X.append(data[i:i + input_window])
        y.append(data[i + input_window:i + input_window + output_window, output_column])
    return np.array(X), np.array(y)


# 读取 CSV 文件
data = pd.read_csv('ETTh1.csv')

# 数据预处理
# 特征工程
data['date'] = pd.to_datetime(data['date'])
data['year'] = data['date'].dt.year
data['month'] = data['date'].dt.month
data['day'] = data['date'].dt.day
data['hour'] = data['date'].dt.hour
data.drop('date', axis=1, inplace=True)


# 参数设置
input_window = 126
output_window = 1
output_column = 1
test_ratio = 0.2

# 划分训练集和测试集
data_len = len(data)
test_size = int(data_len * test_ratio)

X_train, X_test = data[:-test_size], data[-test_size:]
feature_data = X_train[['OT']]
feature_test_data = X_test[['OT']].reset_index(drop=True)
# 数据归一化
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
feature_scaler = StandardScaler()
feature = feature_scaler.fit_transform(feature_test_data)
# feature_test = feature_scaler.transform(feature_test_data)
# 创建滑动窗口数据
X_train_sliding, y_train_sliding = create_sliding_window_data(X_train, input_window, output_window, output_column)
X_test_sliding, y_test_sliding = create_sliding_window_data(X_test, input_window, output_window, output_column)

# 转换为 PyTorch 张量
X_train_tensor = torch.tensor(X_train_sliding, dtype=torch.float32)
y_train_tensor = torch.tensor(y_train_sliding, dtype=torch.float32)
X_test_tensor = torch.tensor(X_test_sliding, dtype=torch.float32)
y_test_tensor = torch.tensor(y_test_sliding, dtype=torch.float32)

# 创建数据加载器
train_dataset = TensorDataset(X_train_tensor, y_train_tensor)
train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True)

# 定义模型
class LSTMModel(nn.Module):
    def __init__(self, input_size, hidden_size, num_layers, output_size, bidirectional):
        super(LSTMModel, self).__init__()
        self.bidirectional_lstm = nn.LSTM(input_size, hidden_size, num_layers, batch_first=True, bidirectional=bidirectional)
        self.unidirectional_lstm = nn.LSTM(hidden_size * (2 if bidirectional else 1), hidden_size, num_layers, batch_first=True, bidirectional=False)
        self.fc = nn.Linear(hidden_size, output_size)

    def forward(self, x):
        # Pass the input through the bidirectional LSTM
        out_bidirectional, _ = self.bidirectional_lstm(x)

        # Pass the output of the bidirectional LSTM through the unidirectional LSTM
        out_unidirectional, _ = self.unidirectional_lstm(out_bidirectional)

        # Apply ReLU activation on the output of the unidirectional LSTM
        out = F.relu(out_unidirectional[:, -1, :])

        # Pass the activated output through the fully connected layer
        out = self.fc(out)
        return out


# 初始化模型、优化器和损失函数
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
input_size = X_train.shape[1]
hidden_size = 64
num_layers = 2
output_size = output_window
bidirectional = True

model = LSTMModel(input_size, hidden_size, num_layers, output_size, bidirectional).to(device)
optimizer = torch.optim.Adam(model.parameters(), lr=0.005)
criterion = nn.MSELoss()
losses = []
# 训练模型
num_epochs = 50
for epoch in range(num_epochs):
    model.train()
    running_loss = 0.0
    for inputs, targets in train_loader:
        inputs, targets = inputs.to(device), targets.to(device)
        optimizer.zero_grad()
        outputs = model(inputs).squeeze()
        loss = criterion(outputs, targets.squeeze())
        loss.backward()
        optimizer.step()
        running_loss += loss.item()
        losses.append(loss.item())
    print(f'Epoch {epoch+1}/{num_epochs}, Loss: {running_loss/len(train_loader)}')
    
results = []
plt.figure()
plt.plot(losses)
plt.xlabel('Epoch')
plt.ylabel('Loss')
plt.title('Training Loss')
plt.savefig('lossPhoto')

# 滑窗预测
model.eval()
with torch.no_grad():
    X_test_tensor = X_test_tensor.to(device)
    predictions = model(X_test_tensor).squeeze().cpu().numpy()

# print(results)
predictions = feature_scaler.inverse_transform(predictions.reshape(1, -1)).tolist()[0]
# results.append(predictions)
print(predictions)

我们先来看训练损失epoch次数为50

aaa2022858bf4f5aafc91e21b87dd8cb.png

 

通过以上代码处理数据这里的(数据用的并不是油温的数据图)之后我们得到预测值和分析值之间的一个对比大家可以看出预测的效果,在高级的双向LSTM算法中,我提供了一些绘图的功能,其中的圆点标注了一些异常值点,还有上边界和下边界的范围。

75fbd94875c54c7089e8ff292036c11f.png

文件下载地址

我提供了一个简单运行代码版本文件以及所需数据全部打包为zip文件放到了以下地址大家有需要的可以自行下载!(大家如果需要复杂的版本可以评论区留言)

时间序列预测模型实战案例基于双向LSTM横向搭配合单向LSTM进行回归问题的解决

全文总结

        双向的LSTM横向配合单向的LSTM可以算作为一次尝试,其在时间预测方面可能效果不一定会好(具体针对于你自己的数据),但是在其他一些文本分析的方面表现应该会很好,LSTM作为最常用的RNN结构单元,其依靠自身的门机制在许多领域应用方面都取得了良好的效果,其能搭配的其它方法也很多,大家可以自己进行尝试后期我也会进行更多的讲解。

后期我也会讲一些最新的预测模型包括Informer,TPA-LSTM,ARIMA,Attention-LSTM,LSTM-Xgboost,移动平均法,加权移动平均,指数平滑等等一系列关于时间序列预测的模型,包括深度学习和机器学习方向的模型我都会讲,你可以根据需求选取适合你自己的模型进行预测,如果有需要可以+个关注,文章最后放一个投票连接针对于下一次的模型讲解进行投票!!

 

其它时间序列预测模型的讲解!

-----------------------------------------------------------------Xgboost-机器学习------------------------------------------------------

时间序列预测模型实战案例(四)(Xgboost)(Python)(机器学习)图解机制原理实现时间序列预测和分类(附一键运行代码资源下载和代码讲解)

-----------------------------------------------------------------LSTM-深度学习---------------------------------------------------------

时间序列预测模型实战案例(三)(LSTM)(Python)(深度学习)时间序列预测(包括运行代码以及代码讲解)

----------------------------------------------------------------MTS-Mixers---------------------------------------------------------------

 

【全网首发】(MTS-Mixers)(Python)(Pytorch)最新由华为发布的时间序列预测模型实战案例(一)(包括代码讲解)实现企业级预测精度包括官方代码BUG修复Transform模型

 --------------------------------------------------------------Holt-Winters----------------------------------------------------------------

 

时间序列预测模型实战案例(二)(Holt-Winter)(Python)结合K-折交叉验证进行时间序列预测实现企业级预测精度(包括运行代码以及代码讲解)

如果大家有不懂的也可以评论区留言一些报错什么的大家可以讨论讨论看到我也会给大家解答如何解决!

 

 

LSTM和双向LSTM讲解及实践 慢慢的将各种双向LSTM全部都将其搞定都行啦的回事与打算。 阅读详情

相关推荐

双向 LSTM(Bidirectional LSTM)与普通 LSTM 公式过程

双向 LSTM 结构中有两个 LSTM 层,一个从前向后处理序列,另一个从后向前处理序列。在处理序列时,每个时间步的输入会被分别传递给两个 LSTM 层,然后它们的输出会被合并。双向 LSTM(Bidirectional LSTM)与普通 LSTM 有类似的公式过程,但有一些细微的差别。LSTM 是一种循环神经网络(RNN),用于处理序列数据。通过双向 LSTM,我们可以获得更全面的序列信息,有助于提高模型在序列任务中的性能。是前向 LSTM 在第。个时间步的向量表示,个时间步的细胞状态,

weixin_44790306的博客 5858

LSTM模型、双向LSTM模型以及模型输入输出的理解

#Tensorflow中实现双向RNNs 在tensorflow中已经提供了双向RNNs的接口,使用**tf.contrib.rnn.bidirectional_dynamic_rnn()**这个函数,就可以很方便的构建双向RNN网络。 def bidirectional_dynamic_rnn( cell_fw, # 前向RNN cell_bw, # 后向RNN inputs, # 输入 s...

weixin_43589681的博客 1万+

【代码分享】几个具有创新性的时间序列回归预测模型matlab代码,基于LSTM及改进算法

具体来说,我们把连续的几个时间步的数据作为一个输入序列,将该序列的下一时刻对应的数据作为该序列的输出。例如,对于一个输入序列x,其对应的输出为y,则x和y分别被用于LSTM网络的输入和目标输出。具体实现方式是在LSTM结构中引入一个注意力层,该层根据当前输入和前一时刻的隐状态计算注意力权重,然后根据这些权重对LSTM的输入进行加权和合并。LSTM是一种长短期记忆神经网络,它可以对时间序列数据进行分析和预测,相较于传统时间序列模型,LSTM具有更好的表现。在构建LSTM模型时,我们使用了。

2302_81053261的博客 4112

【笔记】单向LSTM与双向LSTM对比

一个简单的DEMO:实现手写数字图片的识别 单向LSTM 利用的数据集是tensorflow提供的一个手写数字数据集。该数据集是一个包含55000张28*28的数据集。 训练100次 识别准确率还不是很稳定,但是从第17次开始就趋于相对稳定的状态了。 # -*- coding: utf-8 -*- import tensorflow as tf from tensorflow.contrib import rnn import numpy as np #import input_data fr..

nyist_yangguang的博客 2294

LSTM进行时间序列预测还有哪些创新点,有什么推荐的好发论文的模型和代码?

具体来说,我们把连续的几个时间步的数据作为一个输入序列,将该序列的下一时刻对应的数据作为该序列的输出。例如,对于一个输入序列x,其对应的输出为y,则x和y分别被用于LSTM网络的输入和目标输出。接下来,我们训练LSTM模型,进行预测,并反归一化预测结果。LSTM是一种长短期记忆神经网络,它可以对时间序列数据进行分析和预测,相较于传统时间序列模型,LSTM具有更好的表现。经过100个epoch的训练,每一次epoch使用的学习率(learning rate)为0.01,可以得到一个训练有素的LSTM模型。

2302_81053261的博客 1697

【LSTM时间序列预测】基于matlab鲸鱼算法优化LSTM时间序列预测【含Matlab源码 105期】

1 鲸鱼优化算法(Whale Optimization Algorithm,WOA)简介鲸鱼优化算法(WOA),该算法模拟了座头鲸的社会行为,并引入了气泡网狩猎策略。1.1 灵感鲸鱼被认为是世界上最大的哺乳动物。一头成年鲸可以长达 30 米,重 180 吨。这种巨型哺乳动物有 7 种不同的主要物种,如虎鲸,小须鲸,鳁鲸,座头鲸,露脊鲸,长须鲸和蓝鲸等。鲸通常被认为是食肉动物,它们从不睡觉,因为它们必须到海洋表面进行呼吸,但事实上,鲸鱼有一半的大脑都处于睡眠状态。

订阅付费专栏Matlab(奶茶价版),可赠送奶茶价版付费专栏指定代码1份; 6938

LSTM对比Bi-LSTM的电力负荷时间序列预测(Matlab)

由于电力负荷具有很强的时间相关性,仅通过上一时刻的负荷预测下一时刻的负荷并不能有效的反应复杂的时间关系,同时也没有充分的利用历史负荷数据的全部信息。本文使用LSTM和Bi-LSTM,以电力负荷预测为例对比了两者的预测性能,其中将电力负荷构造为滑动时间窗的形式作为网络输出输入,实现LSTM与Bi-LSTM网络的多输入单输出模型,相比于单输入单输出的模型有更高的准确性。如上图所示,在t时刻时黄色每一个小框都表示一个时间节点的输入数据,蓝色的小框表示输出数据,将3个黄色小框作为输入预测蓝色小框中的数据;

weixin_46039719的博客 2420

基于LSTM和Attention机制的时间序列回归预测

其中,LSTM是一种常用的递归神经网络模型,它可以有效地捕捉时间序列中的长期依赖关系。在本文中,我们介绍了基于LSTM和Attention机制的时间序列回归预测模型,并给出了相应的MATLAB实现代码。具体而言,我们可以在LSTM模型中添加一个Attention层,使其能够在每个时间步中计算当前时间步对预测的贡献。LSTM模型可以被认为是一种具有门控机制的递归神经网络模型,它不仅可以有效地处理时间序列数据,而且还能够避免梯度消失/爆炸等问题。在这种情况下,我们需要使用过去的数据来预测未来的数据。

与其临渊羡鱼,不如退而结网 597

时间序列预测专栏目录 | 深度学习、机器学习、融合模型、创新模型实战案例(附代码+数据集+原理介绍)

给大家推荐一下我的时间序列预测专栏,本专栏平均质量分98分,而且本专栏目前免费阅读,其中涉及机器学习、深度学习、融合模型、个人创新模型、数据分析等一系列有关时间序列的专栏,其中的实战的案例不仅有简单的模型类似于机器学习的ARIMA、Xgboost也有复杂的类似于深度学习的TPA-LSTM,还有个人创新的模型堆叠CNN-GRU-LSTM,同时本专栏的实战案例后期会持续的进行更新,复现各种最新的时间序列预测模型。时间序列预测的初学者、时间序列预测的工作者、数据分析的初学者。

Snu77的博客 1万+

Tensorflow v2 双向LSTM 完整模型架构文件

Tensorflow v2 双向LSTM完整模型 具有输入和输出 包括训练、预测、精度评估 具有三种模型精度评价指标 双向LSTM具有更强的稳定性、可靠性和精度

土地利用数据从1972到2023:如何利用Landsat和Sentinel数据构建长期变化监测模型

本文详细解析了如何利用1972至2023年的Landsat和Sentinel遥感数据构建土地利用长期变化监测模型。通过多源数据融合策略、时间序列预处理流程和深度学习算法,实现高精度的土地利用分类与变化检测,为生态评估和城市规划提供科学依据。文章还探讨了验证方法和实际应用案例,展示了长期遥感数据在环境建模中的独特价值。

weixin_28720573的博客 446

【新算法】基于Transformer-LSTM-Adaboost的多输入单输出回归预测模型【MATLAB】

Transformer-LSTM-Adaboost 通过全局-局部特征联合提取与误差导向动态集成的双重机制,突破了单一模型的特征表达局限性。利用Transformer捕捉长周期规律,LSTM细化短期模式,形成互补特征空间。引入Adaboost.R2的加权策略,通过多基模型集成降低方差偏差。该模型在需同时处理趋势性、周期性和随机性的预测场景中表现突出,尤其适合对预测结果稳定性要求严苛的工业与金融应用。

沅的博客 1588

0009 用VisualStudio设计Max工具

这次分享个独家专利^)^:在Visual Studio中设计3dsMax脚本工具界面。 某次做原型设计时,需求改来改去,实在懒得搞GUI;虽然也尝试在Axure RP里画原型,但还是Visual Studio更顺手,也更容易测试一些交互,就直接在VS里做了。后来突发奇想,想实验一把能否直接用到Max里去,结果没想到成功了,效果还挺好。发现了新大陆,记录一下。   开始: 在VS里新建W...

whwst的专栏 770

【五模型时间序列预测对比】Transformer-LSTM、Transformer、CNN-LSTM、LSTM、CNN

在数据驱动的时代,时间序列预测作为预测未来趋势的关键技术,广泛应用于金融市场波动分析、交通流量预估、能源消耗预测等多个领域。不同的预测模型各有千秋,本文将深入对比 Transformer-LSTM、Transformer、CNN-LSTM、LSTM、CNN 这五种模型在时间序列预测任务中的表现,帮助大家清晰了解它们的特点与适用场景。模型原理与特点Transformer-LSTM 融合了 Transformer 强大的全局特征捕捉能力与 LSTM 处理长序列依赖的优势。

2501_91572946的博客 1471

Ansys Zemax与Speos协同设计:从HUD光学优化到驾驶环境可视化全流程解析

本文深入解析了如何利用Ansys Zemax与Speos进行协同设计,实现从HUD光学系统核心优化到驾驶环境可视化验证的全流程。文章强调了HUD设计是光学性能与视觉感知的深度耦合,通过Zemax进行精密光学设计,再利用Speos进行系统级仿真与感知模拟,最终完成从虚拟到现实的闭环验证,有效提升HUD产品的开发效率与可靠性。

weixin_29199873的博客 251

H3C IPsec over GRE VPN 实验

配置 IPsec over GRE VPN 来连通两端内网

M建的博客 2480

数据科学的预测分析:时间序列分析和预测模型

1.背景介绍 时间序列分析和预测模型在数据科学领域具有重要的应用价值,它们涉及到处理和分析随时间推移变化的数据序列。随着数据量的增加,以及数据收集和处理技术的发展,时间序列分析和预测模型在各个领域的应用也逐渐崛起。 在本文中,我们将深入探讨时间序列分析和预测模型的核心概念、算法原理、具体操作步骤以及数学模型公式。此外,我们还将通过具体的代码实例来详细解释这些概念和方法,并讨论未来发展趋势和挑战...

AI天才研究院 1787

用Python+Charles搞定小程序付费短剧下载(附完整代码与避坑点)

本文详细介绍了如何利用Python和Charles抓包工具实现小程序付费短剧的自动化下载。通过分析小程序视频接口、破解请求参数,并编写Python脚本,读者可以轻松获取并保存短剧内容。文章还提供了完整的代码示例和常见问题的解决方案,特别适合对视频采集和抓包技术感兴趣的开发者。

weixin_28731231的博客 1192

金融时间序列分析:预测模型与实践

1.背景介绍 金融时间序列分析是一种用于分析金融数据的方法,主要关注于金融数据随时间的变化。时间序列分析可以帮助我们理解数据的趋势、季节性、随机性等特征,从而进行准确的预测。在金融领域,时间序列分析广泛应用于股票价格预测、货币汇率预测、通胀率预测等方面。 在本文中,我们将从以下几个方面进行阐述: 背景介绍 核心概念与联系 核心算法原理和具体操作步骤以及数学模型公式详细讲解 具体代码实例和详...

AI天才研究院 4139

微信公众号数据采集实战:历史文章、互动数据与评论详情全解析

本文提供了一套完整的微信公众号数据采集实战方案,详细解析了如何通过接口调用获取公众号的历史文章列表、单篇文章的互动数据以及详细的用户评论。文章从环境准备、核心参数解析到分页逻辑、批量处理和异常处理,提供了可运行的Python代码示例,旨在帮助开发者高效、稳定地构建自动化采集工具,用于竞品分析、内容研究和舆情监控。

u5v6w7的博客 1600

GEE必须会教程——一文教会你研究区域分块计算与合并

一整块算不是挺好的吗?emmmm,用过的人都知道,GEE好比幼年期的“紫妍”,要用“丹药”来养的,除非你是萧炎小友,到哪都有人给爆金币。我们今天想做的是计算2020年夏季西藏自治区的植被覆盖度(FVC),FVC的估算需要使用归一化植被指数(NDVI数据),这里我们用到的产品是MODIS的相关数据产品,该产品的分辨率是25 0m。下载好的结果毕竟是一块一块的,怎么对下载好的结果进行拼接,变成一张大图呢,别急,接下来,我们上科研小霸王——R语言。此处,我们通过省份数据,按照属性筛选,得到西藏自治区的行政边界。

Promising_GEO的博客 2512

LSTM 之旅:探索时间序列预测的新境界

1.背景介绍 时间序列预测是人工智能领域中一个非常重要的研究方向,它涉及到预测未来基于过去的数据。在过去的几十年里,许多时间序列预测方法已经被发展出来,如移动平均、指数移动平均、ARIMA 等。然而,随着大数据时代的到来,这些传统方法已经无法满足当今复杂的预测需求。因此,研究人员开始关注深度学习技术,尤其是递归神经网络(RNN)和其中的一种变体——长短期记忆网络(LSTM)。 LSTM 是一种...

AI天才研究院 1252

Ubuntu-22.04安装VMware虚拟机并安装Windows10

最近在研究虚拟机,主要集中在KVM、Virtualbox和VMware这三种虚拟机上。前面我已经研究了前两种虚拟机的安装和使用方式,这篇文章介绍3兄弟中最后一个虚拟机安装和使用方式。Virtualbox虚拟机安装和使用KVM虚拟机安装和使用相比于前两种,VMware的安装方式最麻烦,但是综合体验下来我感觉流畅度最好。如果你确实有在Linux上使用VMware虚拟机的需求,那不妨跟着我看下去吧。1、gcc版本和内核版本一定要匹配上,否则会出各种错误。

jiexijihe945的博客 4118

【机器学习】基于 GARCH -LSTM 模型的混合方法进行时间序列预测研究附Python代码

时间序列预测在金融、经济、能源等众多领域具有重要应用价值。传统的时间序列预测方法,如 ARIMA 等,在处理具有复杂非线性特征和异方差性的数据时存在一定局限性。随着机器学习技术的发展,LSTM(长短期记忆网络)凭借其对长序列数据的处理能力和捕捉非线性关系的优势,在时间序列预测中展现出良好性能。然而,金融时间序列常存在波动聚集和异方差现象,单纯的 LSTM 模型难以有效刻画此类特性。

Matlab245的博客 752

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【光伏功率预测】基于EMD-PCA-LSTM的光伏功率预测模型附Matlab代码

本研究针对光伏功率的波动性与复杂性,提出基于经验模态分解(EMD)、主成分分析(PCA)和长短期记忆网络(LSTM)的光伏功率预测模型。首先利用 EMD 将原始光伏功率时间序列分解为多个固有模态函数(IMF),降低数据复杂度;再通过 PCA 对 IMF 进行特征提取,减少数据维度;最后将处理后的数据输入 LSTM 网络进行预测。通过实际光伏电站数据进行仿真实验,结果表明,该模型相较于传统预测方法和单一模型,在预测精度上有显著提升,能够有效应对光伏功率的不确定性,为光伏电站的电力调度与并网运行提供可靠支持。

m0_60703264的博客 1069

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

上一篇: 时间序列预测模型实战案例(四)(Xgboost)(Python)(机器学习)图解机制原理实现时间序列预测和分类(附一键运行代码资源下载和代码讲解)
下一篇: 15种时间序列预测方法总结(包含多种方法代码实现)
Snu77
Snu77 优质创作者: 人工智能技术领域 优质创作者: 人工智能技术领域
博客等级 码龄5年 11万+粉丝 934原创
评论 26
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Snu77

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值