时间序列基础->数据标签、数据分割器、数据加载器的定义和讲解(零基础入门时间序列)

时间序列分段法 文献参考:An Online Algorithm for Segmenting Time Series 一、时间序列分段优点: 时间序列分段是指将长度为n的时间序列T用K条直线来拟合。因为K通常比n小得多,这种表示方式使得数据的存储、传输和计算更加高效。具体来说,在数据挖掘中,分段算法可以: 支持快速精确类似搜索; 支持新的距离度量,包括模糊查询,加权查询,多分辨率查询,动态时间扭曲和相关性反馈等; 支持并行挖掘文本和时间序列; 支持新的聚类和分类算法; 支持改变点检测 二、分段算法总体思路 给定一个 阅读详情
AI摘要

本文详细介绍了时间序列分析中标签的概念、窗口分割器的作用,以及如何构建数据加载器,包括数据预处理、窗口划分和使用PyTorchDataset与DataLoader。重点讲解了LSTM和GRU模型在时间序列预测中的应用。

一、本文介绍

各位小伙伴好,最近在发时间序列的实战案例中总是有一些朋友问我时间序列中的部分对数据的操作是什么含义,我进行了挺多的介绍和讲解但是问的人越来越多,所以今天在这里单独发一篇文章来单独的讲一下时间序列中对数据的处理操作和如何定义时间序列特有的数据加载器和对数据打上标签的操作。(发现最近研究时间序列的人越来越多基本上都是为了发论文,感叹大家的论文压力都好大)

适用对象->本文适合那些零基础的时间序列的学习者

目录

一、本文介绍

二、 时间序列中的标签

三、时间序列中的窗口分割器​

四、时间序列的数据加载器 

五、测试流程代码 

五、总结


二、 时间序列中的标签

在开始讲解具体的操作含义之前,我们需要明白一个问题,时间序列中的标签是什么?如果你了解过图像领域,那么你应该知道在目标检测领域的数据集中的图像会有一个标签(标记一个物体是猫还是狗或者是其它的物体),那么我们时间序列的领域标签是什么呢?咱们预测的时候,大家都会选择预测未来多少条数据,假设我们16条数据,选择其中的6条数据为窗口大小来预测未来的2条数据,那么我们的标签就是这2条数据(假设我们的特征数1即你是单元预测,那么我们这16条数据会送入到模型内部进行训练,模型会输出2条数据,输出的2条数据会和我们的标签求一个损失用于反向传播)

三、时间序列中的窗口分割器

在时间序列中特有的就是窗口分割器,利用一个滑动的窗口(类似于卷积操作)沿着数据的方向进行滑动从而产生用于训练时间序列的数据和标签。大家看上面的图片,我们的蓝色和粉色就是滑动的窗口,一个用于滑动训练数据一个用于滑动标签,最后滑动到数据的结尾。我们可以计算我们能够得到的训练数据的多少,其中数据为16条滑动窗口为6标签为2那么我们最后能够得到的训练加载器中的数据大小就为16 - ( 6  + 2 - 1) = 9,所以最后我们就能得到9个数据。

每一个数据的内容如下面的图片所示-> 

import numpy as np

# 定义参数
total_data_points = 16  # 总数据点数
window_size = 6         # 窗口大小
predict_length = 2      # 预测长度

# 随机生成一个数据集
data_set = np.random.rand(total_data_points)

# 分割数据集的函数
def create_inout_sequences(input_data, tw, pre_len):
    # 创建时间序列数据专用的数据分割器
    inout_seq = []
    L = len(input_data)
    for i in range(L - tw):
        train_seq = input_data[i:i + tw]
        if (i + tw + pre_len) > len(input_data):
            break
        train_label = input_data[i + tw:i + tw + pre_len]
        inout_seq.append((train_seq, train_label))
    return inout_seq


# 使用函数分割数据
X = create_inout_sequences(data_set, window_size, predict_length)

print("Input sequences (X):")
print(X)

大家可以复制上面的代码进行运行来实际了解这一个过程,其中的create_inout_sequences就是数据分割器我自己定义的一个,运行以上的结果输出如下->

 可以看上面的代码输出的X就正如我们设想的一样,输出了九条数据。

四、时间序列的数据加载器 

经过上面的数据分割器处理之后,我们得到了一个样本数为9的数据集,一般用list在外侧内部为tuple元组保存训练数据和标签,这样list就包含九个数据点,每个 数据点内包含一个大的元组,大的元组内包含两个小的元组一个是储存训练集一个储存标签。

[(('训练数据'),('标签')),(('训练数据'),('标签')),(('训练数据'),('标签')),....]

之后我们就要用这个list来生成数据加载器了,我们一般也用下面的加载器进行定义,

from torch.utils.data import DataLoader

但是用它进行定义数据加载器之前需要输入的数据格式是dataset的格式,时间序列的dataset和其它领域的不太一样,下面我们来讲解一下->

一般的数据的dataset需要两个数据的输入但是我们的数据只有一个,所以我们需要自己定义一个定义dataset的类来实现这个功能。

class TimeSeriesDataset(Dataset):
    def __init__(self, sequences):
        self.sequences = sequences

    def __len__(self):
        return len(self.sequences)

    def __getitem__(self, index):
        sequence, label = self.sequences[index]
        return torch.Tensor(sequence), torch.Tensor(label)

上面这个就是一个基本的Dataset的定义,  通过这个类的定义我们将数据集输入到这个类里转化为Dataset格式,再将其输入到Dataloader里就形成了一个数据加载器。

# 创建数据集
train_dataset = TimeSeriesDataset(X)

# 创建 DataLoader
batch_size = 2  # 你可以根据需要调整批量大小
train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True, drop_last=True)

上面的代码就是定义一个数据加载器的方法,其中我们设置了batch_size=2就是我们的批次大小, shuffle代表的含义是从我们定义的九条数据里随机的取,drop_last代表丢掉不满足条件的数据,类似于我们的数据大部分都是6条但是最后一条数据不足6,此时如果将其输入到模型里就会报错,所以这个参数就是将其丢弃掉。

if Train:
    losss = []
    lstm_model.train()  # 训练模式
    for i in range(epochs):
        start_time = time.time()  # 计算起始时间
        for seq, labels in train_loader:
            lstm_model.train()
            optimizer.zero_grad()

            y_pred = lstm_model(seq)

            single_loss = loss_function(y_pred, labels)

            single_loss.backward()
            optimizer.step()
            print(f'epoch: {i:3} loss: {single_loss.item():10.8f}')
        losss.append(single_loss.detach().numpy())
    torch.save(lstm_model.state_dict(), 'save_model.pth')
    print(f"模型已保存,用时:{(time.time() - start_time) / 60:.4f} min")

这段代码之间省略了挺多代码包括模型的定义优化器定义什么的这和本文内容无关我就不讲了,后面会放一个完整的代码给大家测试,可以看到代码调用了train_loader这就是我们前面调用的数据加载器,它会调用我们前面定义的class TimeSeriesDataset(Dataset):这个方法,从数据中随机选取一个数据进行加载,分别将训练数据赋值给seq,标签赋值给labels,其中seq会输入到模型的内部进行训练,其中的seq的维度的维度定义应该如下->

​

可以看到其中的维度是(2,6,1)这其中的含义是[batch_size,window_size,features],我在来描述一下第一个维度是批次大小,第二个维度是你定义的观测窗口大小,第三个维度是你数据的维度,(本次的讲解我们用的是一维的,如果你的特征数是三个那么这里就是三)。这就是一个标准的时间序列输入三个维度。

labels维度如下,和上面的含义是一致的我就不重复了。

​

 我们将seq输入的模型内部,得到如下输出->

​

其和labels的形状需要一致用于损失的计算,并用于反向传播。

五、测试流程代码 

下面给大家一个测试的代码,我建议大家还是自己debug一下看下其中的具体通道数的变化情况。

import time
import numpy as np
import pandas as pd
import torch
import torch.nn as nn
from matplotlib import pyplot as plt
from sklearn.preprocessing import MinMaxScaler
from torch.utils.data import DataLoader
import torch
from torch.utils.data import Dataset

# 随机数种子
np.random.seed(0)


class TimeSeriesDataset(Dataset):
    def __init__(self, sequences):
        self.sequences = sequences

    def __len__(self):
        return len(self.sequences)

    def __getitem__(self, index):
        sequence, label = self.sequences[index]
        return torch.Tensor(sequence), torch.Tensor(label)


def calculate_mae(y_true, y_pred):
    # 平均绝对误差
    mae = np.mean(np.abs(y_true - y_pred))
    return mae

"""
数据定义部分
"""
true_data = pd.read_csv('ETTh1.csv')  # 填你自己的数据地址,自动选取你最后一列数据为特征列


target = 'OT'  # 添加你想要预测的特征列
test_size = 0.15  # 训练集和测试集的尺寸划分
train_size = 0.85  # 训练集和测试集的尺寸划分
pre_len = 4  # 预测未来数据的长度
train_window = 32  # 观测窗口

# 这里加一些数据的预处理, 最后需要的格式是pd.series
true_data = np.array(true_data[target])

# 定义标准化优化器
scaler_train = MinMaxScaler(feature_range=(0, 1))
scaler_test = MinMaxScaler(feature_range=(0, 1))

# 训练集和测试集划分
train_data = true_data[:int(train_size * len(true_data))]
test_data = true_data[-int(test_size * len(true_data)):]
print("训练集尺寸:", len(train_data))
print("测试集尺寸:", len(test_data))

# 进行标准化处理
train_data_normalized = scaler_train.fit_transform(train_data.reshape(-1, 1))
test_data_normalized = scaler_test.fit_transform(test_data.reshape(-1, 1))

# 转化为深度学习模型需要的类型Tensor
train_data_normalized = torch.FloatTensor(train_data_normalized)
test_data_normalized = torch.FloatTensor(test_data_normalized)


def create_inout_sequences(input_data, tw, pre_len):
    # 创建时间序列数据专用的数据分割器
    inout_seq = []
    L = len(input_data)
    for i in range(L - tw):
        train_seq = input_data[i:i + tw]
        if (i + tw + 4) > len(input_data):
            break
        train_label = input_data[i + tw:i + tw + pre_len]
        inout_seq.append((train_seq, train_label))
    return inout_seq


# 定义训练器的的输入
train_inout_seq = create_inout_sequences(train_data_normalized, train_window, pre_len)
test_inout_seq = create_inout_sequences(test_data_normalized, train_window, pre_len)

# 创建数据集
train_dataset = TimeSeriesDataset(train_inout_seq)
test_dataset = TimeSeriesDataset(test_inout_seq)

# 创建 DataLoader
batch_size = 32  # 你可以根据需要调整批量大小
train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True, drop_last=True)
test_loader = DataLoader(test_dataset, batch_size=batch_size, shuffle=False, drop_last=True)


class GRU(nn.Module):
    def __init__(self, input_dim=1, hidden_dim=32, num_layers=1, output_dim=1, pre_len= 4):
        super(GRU, self).__init__()
        self.pre_len = pre_len
        self.num_layers = num_layers
        self.hidden_dim = hidden_dim
        # 替换 LSTM 为 GRU
        self.gru = nn.GRU(input_dim, hidden_dim,num_layers=num_layers, batch_first=True)
        self.fc = nn.Linear(hidden_dim, output_dim)
        self.relu = nn.ReLU()
        self.dropout = nn.Dropout(0.1)
    def forward(self, x):
        h0_gru = torch.zeros(self.num_layers, x.size(0), self.hidden_dim).to(x.device)

        out, _ = self.gru(x, h0_gru)

        out = self.dropout(out)

        # 取最后 pre_len 时间步的输出
        out = out[:, -self.pre_len:, :]

        out = self.fc(out)
        out = self.relu(out)
        return out


lstm_model = GRU(input_dim=1, output_dim=1, num_layers=2, hidden_dim=train_window, pre_len=pre_len)
loss_function = nn.MSELoss()
optimizer = torch.optim.Adam(lstm_model.parameters(), lr=0.005)
epochs = 20
Train = True  # 训练还是预测

if Train:
    losss = []
    lstm_model.train()  # 训练模式
    for i in range(epochs):
        start_time = time.time()  # 计算起始时间
        for seq, labels in train_loader:
            lstm_model.train()
            optimizer.zero_grad()

            y_pred = lstm_model(seq)

            single_loss = loss_function(y_pred, labels)

            single_loss.backward()
            optimizer.step()
            print(f'epoch: {i:3} loss: {single_loss.item():10.8f}')
        losss.append(single_loss.detach().numpy())
    torch.save(lstm_model.state_dict(), 'save_model.pth')
    print(f"模型已保存,用时:{(time.time() - start_time) / 60:.4f} min")


else:
    # 加载模型进行预测
    lstm_model.load_state_dict(torch.load('save_model.pth'))
    lstm_model.eval()  # 评估模式
    results = []
    reals = []
    losss = []

    for seq, labels in test_loader:
        pred = lstm_model(seq)
        mae = calculate_mae(pred.detach().numpy(), np.array(labels))  # MAE误差计算绝对值(预测值  - 真实值)
        losss.append(mae)
        for j in range(batch_size):
            for i in range(pre_len):
                reals.append(labels[j][i][0].detach().numpy())
                results.append(pred[j][i][0].detach().numpy())

    reals = scaler_test.inverse_transform(np.array(reals).reshape(1, -1))[0]
    results = scaler_test.inverse_transform(np.array(results).reshape(1, -1))[0]
    print("模型预测结果:", results)
    print("预测误差MAE:", losss)

    plt.figure()
    plt.style.use('ggplot')

    # 创建折线图
    plt.plot(reals, label='real', color='blue')  # 实际值
    plt.plot(results, label='forecast', color='red', linestyle='--')  # 预测值

    # 增强视觉效果
    plt.grid(True)
    plt.title('real vs forecast')
    plt.xlabel('time')
    plt.ylabel('value')
    plt.legend()
    plt.savefig('test——results.png')

 

五、总结

到此本文就都讲解完成了,本文的内容是针对于时间序列预测的新手,可能不太了解时间序列的数据处理流程,最近问的人有点多大家都说不理解,所以单独开了这么一篇文章给大家讲解,内容可能很简单,全文全手打,希望能够帮助到各位~

最后分享我的其他博客给大家,可以方便大家阅读完本文进行实战(本专栏平均质量分98分,并且免费阅读)~

 概念理解 

15种时间序列预测方法总结(包含多种方法代码实现)

数据分析

时间序列预测中的数据分析->周期性、相关性、滞后性、趋势性、离群值等特性的分析方法

机器学习——难度等级(⭐⭐)

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

深度学习——难度等级(⭐⭐⭐⭐)

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

时间序列预测实战(七)(TPA-LSTM)结合TPA注意力机制的LSTM实现多元预测

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

时间序列预测实战(十一)用SCINet实现滚动预测功能(附代码+数据集+原理介绍)

时间序列预测实战(十二)DLinear模型实现滚动长期预测并可视化预测结果

时间序列预测实战(十五)PyTorch实现GRU模型长期预测并可视化结果

Transformer——难度等级(⭐⭐⭐⭐)

时间序列预测模型实战案例(八)(Informer)个人数据集、详细参数、代码实战讲解

时间序列预测模型实战案例(一)深度学习华为MTS-Mixers模型

时间序列预测实战(十三)定制化数据集FNet模型实现滚动长期预测并可视化结果

时间序列预测实战(十四)Transformer模型实现长期预测并可视化结果(附代码+数据集+原理介绍)

个人创新模型——难度等级(⭐⭐⭐⭐⭐)

时间序列预测实战(十)(CNN-GRU-LSTM)通过堆叠CNN、GRU、LSTM实现多元预测和单元预测

传统的时间序列预测模型(⭐⭐)

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

时间序列预测实战(六)深入理解ARIMA包括差分和相关性分析

融合模型——难度等级(⭐⭐⭐)

时间序列预测实战(九)PyTorch实现融合移动平均和LSTM-ARIMA进行长期预测

时间序列预测实战(十六)PyTorch实现GRU-FCN模型长期预测并可视化结果

​

多元时间序列分析(分段/分割) 对时间序列分段这个词可能指Semantic segmentation,Change point detection,或者Subsequence clustering。虽然都可以认为是在对时间序列做分段,但实际上是不同的任务。 阅读详情

相关推荐

【时间序列】时间序列分割聚类算法TICC

2017年KDD最佳论文,解决高维时间信号的自动分割聚类问题,并给出基于python的源码。

shenxiaolu1984的专栏 3万+

时序数据分析:时序分割

工业设备系统在不同的外部条件(即工况)下,往往有多种运行模式,工业生产也往往会分阶段进行,在不同工况下,数据特点可能明显不同。有的阶段划分存在明确的规则(如设备设计的运行规律)​,有的则是自然发生的,对其规律没有显式认知。对于第二种情况,我们希望能从数据中找到一定的规律,自动挖掘出其阶段变化的分割点。

石榴姐yyds 3936

给LSTM网络训练的数据添加标签(三维数组的一维增加数据)

最近遇到一个问题,自己训练好神经网络,输出的是特征数,但是结果需要送到分类器中,分类器计算准确率需要标签,所以需要解决的问题是:在生成LSTM网络的batch数时,需要加上标签,但是在神经网络进行训练时,需要去掉标签,预测完成后需要把标签列添回去。生成带标签的time_step数据,维度如上所示,但是这其中第二维中的38维里有一维是标签,进入网络时需要去掉这一列。本来X_data是一个list,为...

orangefly0214的博客 1万+

动手学深度学习(三十)——语义分割概念及数据加载

文章目录一、什么是语义分割二、应用三、Pascal VOC2012语义分割数据集3.1 数据加载3.2 数据预处理3.3 自定义语义分割数据集类3.4 整合全部组件 简单认识什么是语义分割,并加载语义分割数据集 一、什么是语义分割 在像素级别上的分类:属于同一类的像素都要归为一类 语义分割和实例分割 二、应用 背景虚化 路面分割 三、Pascal VOC2012语义分割数据集 http://host.robots.ox.ac.uk/pascal/VOC/voc2012/ 3.

Liu Feng's Blog 1799

时间序列机器学习数据集的非传统分割技术

在时间序列机器学习中,数据集的有效拆分对于模型的训练和评估至关重要。传统的数据集拆分方法,如随机划分和按时间顺序划分,是常见的选择。然而,有时候我们需要更加灵活和精确的拆分方法,以满足特定的需求。本文将介绍一些非传统的时间序列数据集拆分技术,并提供相应的源代码实现。这些非传统的时间序列数据集拆分技术提供了更多的灵活性和精确性,可以根据特定的任务和需求来选择合适的拆分方法。通过合理地选择和使用这些技术,我们可以更好地训练和评估时间序列机器学习模型。希望本文对您有所帮助!

Byte_O_O的博客 740

使用ggplot2库可以方便地对时间序列数据进行可视化,并在图表的末尾数据点上添加数值标签。本文将介绍如何使用R语言中的ggplot2库来实现这一目标。

使用ggplot2库可以方便地对时间序列数据进行可视化,并在图表的末尾数据点上添加数值标签。运行上述代码后,你将得到一个时间序列图,并在图表的末尾数据点上添加了数值标签。接下来,我们假设你已经有了时间序列数据,并将其存储在一个数据框中。参数,我们可以微调标签的位置。在这个例子中,我们将标签的水平位置调整为-0.1,垂直位置调整为-0.5。我们需要指定标签的位置和标签的文本。选择了数据框中的最后一个数据点,并将其作为geom_text函数的数据输入。来指定标签的文本,即使用数据框中的值作为标签。

PixelEnigma的博客 189

D1时间序列的脚本概念

本文介绍了时间序列预测与普通分类/回归任务的区别,重点讲解了时间序列的核心概念和数据处理方法。主要内容包括:1)时间序列标签定义(未来预测值作为标签);2)滑动窗口分割器的作用和实现代码;3)自定义PyTorch数据加载器的构建方法。文章对比了时间序列与分类/回归在数据结构、任务目标和建模方式上的差异,并列举了金融、零售、能源等典型应用场景。最后通过表格形式总结了三者在目标变量、样本独立性、特征处理等方面的关键区别,强调时间序列必须考虑历史依赖和时间顺序的特性。

ai12345678900008的博客 901

保姆级教程:用Python+OpenCV实现相移法与格雷码三维重建(从生成条纹到点云生成)

本文详细介绍了使用Python和OpenCV实现相移法与格雷码三维重建的全流程,从条纹生成到点云计算。通过结构光技术,结合相移法和格雷码,实现高精度的三维重建,适用于无纹理物体表面的密集对应点生成。教程包含环境搭建、条纹生成、相位计算、三维点云重建及常见问题排查,适合计算机视觉开发者和研究人员。

weixin_33443333的博客 351

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

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

Snu77的博客 1万+

Jetson Orin Nano GPIO 实战,用 devmem 玩转 Pinmux 引脚复用配置

devmem 是一个直接读写寄存器的工具,通过 mmap 将 /dev/mem 中的物理地址区域映射到用户空间进程地址空间,从而实现直接读写,正常情况下在 /dev 下可以看到 mem。可以看到对应 bit5 bit6 分别为 1,对应配置为 E_IO_HV 为 ENABLE 以及 E_INPUT 为 ENABLE。需要 TRM 手册查看相关寄存器,以及安装 busybox,busybox 内置了 devmem。根据 TRM 手册,找到 I2C_SDA 的 pinmux 地址偏移是 0x18。

darcsdn 1649

ROS2_Moveit2_Ur5e_Grasp项目详解(二):核心模块功能解析

本文深入解析了ROS2_Moveit2_Ur5e_Grasp项目的核心模块功能。重点阐述了OctoMap建图模块如何为机械臂提供实时三维环境感知,并详细介绍了Robotiq夹爪与MoveIt2的集成控制、UR5e的运动规划策略,以及视觉模块如何协同工作,最终实现从目标检测到动态抓取的完整闭环。

weixin_29254029的博客 113

拆分时间序列(Forecasting: Principles and practice第7章)

前面我们了解了时间序列的三种模式:趋势,季节性和周期。 在将时间序列分解为各个组成部分时,通常将趋势和周期组合为单个趋势周期组成部分(也称为趋势)。故我们认为时间序列包含3个部分:趋势周期部分,季节性部分和余下部分(包含时间序列中的任何其他内容) 7.1 time series components 如果我们假设加法分解,那么我们可以写为: ,这里yt是数据,St是季节性因素,Tt是趋势周期部分,...

weixin_41636030的博客 3056

折叠式共源共栅放大器设计/备忘

w折叠式共源共栅基本结构如图

Czy1377004611的博客 3万+

时序数据的预测

文章目录时间序列分割TimeSeriesSplit 时间序列分割TimeSeriesSplit 机器学习中时间序列数据的训练集、验证集、测试集处理问题 时间序列分割TimeSeriesSplit

qq_34229228的博客 5862

地质建模师必备:用Petrel快速生成浅地层TST/TVT厚度图的5个关键步骤

本文详细解析了地质建模师如何利用Petrel平台,将二维浅地层SEG-Y数据高效转化为真实地层厚度图(TST)和真实垂直厚度图(TVT)。文章系统梳理了从数据规范化导入、坐标系统一、地质界面解释到厚度计算与成图的5个关键实战步骤,并强调了误差控制与工程应用,为海上风电等工程地质评估提供了完整解决方案。

weixin_29204205的博客 519

直击痛点:VS2015离线安装报错“安装包丢失或损坏”的根源分析与精准修复

本文深入剖析了Visual Studio 2015离线安装时出现“安装包丢失或损坏”报错的根本原因,指出问题核心在于安装程序固化的临时路径查找逻辑。文章提供了一步到位的精准修复方案,通过将ISO镜像中的完整packages文件夹复制到安装程序指定的临时路径,即可无需联网、无需操作证书直接解决问题,并对比分析了其他常见方法的局限性。

weixin_27734811的博客 360

“LSTM的参数解释,LSTM

LSTM的参数解释 LSTM总共有7个参数:前面3个是必须输入的 1:input_size: 输入特征维数,即每一行输入元素的个数。输入是一维向量。如:[1,2,3,4,5,6,7,8,9],input_size 就是9 2:hidden_size: 隐藏层状态的维数,即隐藏层节点的个数,这个和单层感知器的结...

吉良的博客 5万+

告别黑窗口:XShell+X11转发图形化界面的5分钟保姆级教程(附Xming配置)

本文详细介绍了如何使用XShell和X11转发技术快速实现Linux图形化界面的远程访问。通过5分钟快速配置指南,包括服务端设置、客户端工具选择及XShell+Xming的完美配置,帮助用户高效运行GUI应用程序,提升远程工作效率。特别适合需要图形化操作的开发者和运维人员。

weixin_29223603的博客 328

时序数据库TDengine基本概念和建模思路

时序数据库TDengine的使用和概念介绍以及建模思路

weixin_42599091的博客 4936

halcon3d点云补全方法

属于halcon实例中的内容,后面还接了一部分的匹配

Tianwen_running的博客 1232

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

7.2 数据加载与切分

7.2.1 数据加载 数据分析首先要加载数据,一般使用NumPy中的数组或者Pandas中的DataFrame等数据结构来存放数据,示例代码: import numpy as np X = np.random.random((10,5)) y = np.array(['M','M','F','F','M','F','M','M','F','F','F']) X[X 以上代码,矩阵X表示的是10行

很嗨 363

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

时间序列预测实战(二十一)PyTorch实现TCN时间卷积网络进行时间序列预测(专为新手编写的自研架构)

​ 本篇文章给大家带来的是利用我个人编写的架构进行TCN时间序列卷积进行时间序列建模(专门为了时间序列领域新人编写的架构,简单不同于市面上大家用GPT写的代码),包括结果可视化、支持单元预测、多元预测、模型拟合效果检测、预测未知数据、以及滚动长期预测功能。该结构是一个通用架构任何模型嵌入其中都可运行。下面来介绍一下TCN时间序列卷积的基本原理:时间序列卷积(Temporal Convolutional Network, TCN)通过一系列卷积层处理数据,每个层都能捕捉到不同时间范围内的模式,其主要通过以下三

Snu77的博客 2万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True)

DataLoader是 PyTorch 提供的一个工具类,用于高效地加载和处理数据集。它可以帮助你在训练模型时更有效地管理和批量加载数据。让我们详细解析一下DataLoader。

weixin_48060069的博客 1425

LSTM模型输入输出的操作

第一维体现的是序列(sequence)结构,也就是序列的个数,用文章来说,就是每个句子的长度,因为是喂给网络模型,一般都设定为确定的长度,也就是我们喂给LSTM神经元的每个句子的长度,当然,如果是其他的带有带有序列形式的数据,则表示一个明确分割单位长度,第三位体现的是输入的元素(elements of input),也就是,每个具体的单词用多少维向量来表示,或者股票数据中 每一个具体的时刻的采集多少具体的值,比如最低价,最高价,均价,5日均价,10均价,等等。input_size:x的特征维度。

LP5956的博客 4284

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

LSTM(Long Short-Term Memory)是一种常用的循环神经网络(RNN)模型,用于处理序列数据,具有记忆长短期的能力。在时间序列预测中,LSTM既可以多元预测机制又可以作为单元预测机制使用。LSTM的预测效果图其中MAE误差为0.15,ME误差为-0.03。,LSTM作为多元预测机制和单元预测机制的优点是可以处理序列数据中的长期依赖关系,从而可以捕捉到数据中的复杂模式和规律。它可以自适应地学习和调整模型参数,从而提高模型的预测性能和泛化能力。

Snu77的博客 9万+

时间序列预测实战(十六)PyTorch实现GRU-FCN模型长期预测并可视化结果

本文讲解的实战内容是GRU-FCN(门控循环单元-全卷积网络),这是一种结合了GRU(用于处理时间序列数据)和FCN(全卷积网络)的深度学习模型,这种融合模型在处理时间序列预测的时候是十分经典且效果很好的组合方式。它的优势在于能够同时捕捉时间序列数据中的时间动态和空间特征,从而提高模型的准确度和效率,本文给大家讲解的就是这个模型,本文的实战内容通过时间序列领域最经典的数据集——电力负荷数据集为例,带大家深入的了解GRU和FCN的基本原理和融合思想。预测类型->单元预测、长期预测,

Snu77的博客 3950
上一篇: 时间序列预测实战(十六)PyTorch实现GRU-FCN模型长期预测并可视化结果
下一篇: YOLOv8改进 | 如何在网络结构中添加注意力机制、C2f、卷积、Neck、检测头
Snu77
Snu77 优质创作者: 人工智能技术领域 优质创作者: 人工智能技术领域
博客等级 码龄5年 11万+粉丝 934原创
评论 7
成就一亿技术人!
拼手气红包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、付费专栏及课程。

余额充值