transformer——多变量预测PyTorch搭建Transformer实现多变量多步长时间序列预测(负荷预测)——transformer多变量预测

Transformer长期时序预测 transformer主要对输入特征进行编码、解码等,在这里原理并不过多的介绍,我们通过实例来完成transformer在时间序列上的预测应用。transformer预测的结果并不是单一的值,而是一个集合,预测出在该时间序列的可能值,然后再根据具体的业务需求完成最后的值,下图展示了结果中的某一样本的预测值。我们使用的是某一零件的耗用量,预测未来半年的该零件的耗用情况,时间维度是月,数据的示意图如下图所示。如上图所示,蓝色部分为训练数据,红色为测试部分。紧接着搭建训练样本、测试样本以及验证样本的数据加载器。 阅读详情
AI摘要

本文介绍使用Transformer模型对DNA序列进行二分类的过程,重点介绍了数据处理和模型构建的难点及解决方案。

写在最前:

在系统地学习了Transformer结构后,尝试使用Transformer模型对DNA序列数据实现二分类,好久前就完成了这个实验,一直拖着没有整理,今天系统的记录一下,顺便记录一下自己踩过的坑

(需要数据的可以私聊我)

1、数据说明

两个csv文件,共有三列,第一列是id,第二列每个数据都是一长串dna序列,第三列是它们的label,分别是0和1。

数据的data列有点长,此处截了一部分供大家参考:

2、python库准备

此处Transformer我使用了pytorch的,所以需要事先安装pytorch库,这里是一大踩坑点

因为我的电脑配置也是win10+MX350显卡+CUDA10.2,最后安装在conda环境下安装pytorch:

第一次没有指定pytorch版本结果自动装了最新版,然后在python环境下输入print(torch.cuda.is_available()),结果是false。

第二次:将之前的卸载重新安装,此处指定了版本好像是1.10,结果最后还是false。

第三次:百思不得其解,就找了大量的原因,最后用了下面的命令:pip3 install torch1.10.1+cu102 torchvision0.11.2+cu102 torchaudio===0.10.1+cu102 -f https:// download.pytorch.org/whl/cu102/torch_stable.html

然后打印输出:True!!!

3、实验难点

个人感觉实验中最重要的两部分就是dna序列数据的处理和Transformer模型构建。

3.1 DNA数据处理

数据中第二列data列是dna数据,很长一串,需要进行转换。

(1)我刚开始使用了独热编码,代码如下:

def one_hot_encode_sequence(sequence):
    mapping = {'A': [1, 0, 0, 0], 'C': [0, 1, 0, 0], 'G': [0, 0, 1, 0], 'T': [0, 0, 0, 1]}
    encoding = [mapping[base] for base in sequence]
    return np.array(encoding)

# 对DNA序列进行单热编码
# 每个seq是一个序列,序列中的每个base变成[1,0,0,0],再组合成二维
X = np.array([one_hot_encode_sequence(seq) for seq in data3['data']])
y = data3['label'].values

很好理解,就是将ACGT分别映射成[1,0,0,0] [0,1,0,0] [0,0,1,0] [0,0,0,1],但是这样就多了一个维度,打印一下x的shape看看:

直接变三维数据了,然后后面在Transformer阶段,数据维度转换就出了问题:

我想计算loss,刚开始写了loss = criterion(outputs, labels.view(-1, 1)),但是outputs是torch.Size([1, 1001, 1],labels是torch.Size([32]),这两个数据不知道怎么才能转换成同一shape的数据,当时搞了好久也没成功,所以放弃这个编码方案。。。。

(如果有大佬有方法将这两个的size改成一致,欢迎评论区留言!!)

(2)使用嵌入编码

直接上代码:

# 将DNA序列数据转换为整数编码
def integer_encode(seq):
    seq = seq.upper()
    encoding = {'A': 0, 'T': 1, 'C': 2, 'G': 3}
    return np.array([encoding[x] for x in seq])

X = np.array([integer_encode(seq) for seq in X])
y = np.array(y)

很好理解,再看一下X的维度:

很明显比上面的三维数据要好哈哈哈

好用!爱用!!下次还用!!

3.2 Transformer结构

(1)首先需要嵌入位置信息

直接上代码吧,我喜欢做注释,这个注释也很详细,大家自己看就明白了,其实就对应了Transformer论文中PE的公式:

# 定义PositionalEncoding
class PositionalEncoding(nn.Module):
    def __init__(self, d_model, dropout, max_len=5000):
        super(PositionalEncoding, self).__init__()
        self.dropout = nn.Dropout(p=dropout)
        
        # pe的维度(位置编码最大长度,模型维度)
        pe = torch.zeros(max_len, d_model)
        # 维度为(max_len, 1):先在[0,max_len]中取max_len个整数,再加一个维度
        position = torch.arange(0, max_len, dtype=torch.float).unsqueeze(1)
        # 位置编码的除数项:10000^(2i/d_model)
        div_term = torch.exp(torch.arange(0, d_model, 2).float() * (-np.log(10000.0) / d_model))
        # sin负责奇数;cos负责偶数
        pe[:, 0::2] = torch.sin(position * div_term)
        pe[:, 1::2] = torch.cos(position * div_term)
        
        #维度变换:(max_len,d_model)→(1,max_len,d_model)→(max_len,1,d_model)
        pe = pe.unsqueeze(0).transpose(0, 1)
        # 将pe注册为模型缓冲区
        self.register_buffer('pe', pe)
        
        
    def forward(self, x):
        # 取pe的前x.size(0)行,即
        # (x.size(0),1,d_model) → (x.size(0),d_model),拼接到x上
        x = x + self.pe[:x.size(0), :]
        return self.dropout(x)

(2)然后就是Transformer结构

# 定义Transformer模型
class TransformerModel(nn.Module):
    def __init__(self, input_dim, output_dim, d_model, nhead, num_layers, dim_feedforward, dropout):
        super(TransformerModel, self).__init__()
        # 创建一个线性变换层,维度input_dim4→d_model
        self.embedding = nn.Embedding(input_dim, d_model)  # 使用嵌入层
        # 生成pe
        self.pos_encoder = PositionalEncoding(d_model, dropout)
        # 生成一层encoder
        encoder_layers = nn.TransformerEncoderLayer(d_model=d_model, nhead=nhead, dim_feedforward=dim_feedforward, dropout=dropout)
        # 多层encoder
        self.transformer_encoder = nn.TransformerEncoder(encoder_layers, num_layers=num_layers)
        # 维度d_model→output_dim
        self.fc = nn.Linear(d_model, output_dim)
        self.d_model = d_model

    def forward(self, src):
        src = src.permute(1, 0)
        
        # 缩放
        src = self.embedding(src) * np.sqrt(self.d_model)
        
        # 加上位置嵌入
        src = self.pos_encoder(src)
    
        output = self.transformer_encoder(src)
        
        # 调整输出形状为(batch, seq_len, d_model)
        output = output.permute(1, 0, 2)
        # 对所有位置的表示取平均
        output = torch.mean(output, dim=1)
        # 线性变换
        output = self.fc(output)
        # 使用sigmoid激活函数
        output = torch.sigmoid(output)
        
        return output

4、其余

解决了上面的难点,后面的导包、数据导入预处理划分、数据加载、训练数据、测试数据就不细说了,后面有完整代码大家自己看吧

import torch
import torch.nn as nn
import torch.optim as optim
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split

# data1和data2是包含DNA序列数据的列表,每个数据集有三列分别是id data label,标签分别为0和1
data1 = pd.read_csv(r"D:\桌面\研0\Transformer\0.csv")
data2 = pd.read_csv(r"D:\桌面\研0\Transformer\1.csv")

# 合并
data = pd.concat([data1,data2], ignore_index=True)

X = data['data'].values
y = data['label'].values
print("X.shape:",end='')
print(X.shape)
print("y.shape:",end='')
print(y.shape)



# 将DNA序列数据转换为整数编码
def integer_encode(seq):
    seq = seq.upper()
    encoding = {'A': 0, 'T': 1, 'C': 2, 'G': 3}
    return np.array([encoding[x] for x in seq])

X = np.array([integer_encode(seq) for seq in X])
y = np.array(y)
print("====转换成整数编码后====")
print("X.shape:",end='')
print(X.shape)
print("y.shape:",end='')
print(y.shape)


# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)


# 创建PyTorch数据集和数据加载器
class DNADataset(torch.utils.data.Dataset):
    def __init__(self, X, y):
        self.X = torch.tensor(X, dtype=torch.long)  # 将输入数据转换为长整型
        self.y = torch.tensor(y, dtype=torch.float32)

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

    def __getitem__(self, idx):
        return self.X[idx], self.y[idx]

train_dataset = DNADataset(X_train, y_train)
test_dataset = DNADataset(X_test, y_test)

train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=32, shuffle=True)
test_loader = torch.utils.data.DataLoader(test_dataset, batch_size=32, shuffle=False)



# 定义PositionalEncoding
class PositionalEncoding(nn.Module):
    def __init__(self, d_model, dropout, max_len=5000):
        super(PositionalEncoding, self).__init__()
        self.dropout = nn.Dropout(p=dropout)
        
        # pe的维度(位置编码最大长度,模型维度)
        pe = torch.zeros(max_len, d_model)
        # 维度为(max_len, 1):先在[0,max_len]中取max_len个整数,再加一个维度
        position = torch.arange(0, max_len, dtype=torch.float).unsqueeze(1)
        # 位置编码的除数项:10000^(2i/d_model)
        div_term = torch.exp(torch.arange(0, d_model, 2).float() * (-np.log(10000.0) / d_model))
        # sin负责奇数;cos负责偶数
        pe[:, 0::2] = torch.sin(position * div_term)
        pe[:, 1::2] = torch.cos(position * div_term)
        
        #维度变换:(max_len,d_model)→(1,max_len,d_model)→(max_len,1,d_model)
        pe = pe.unsqueeze(0).transpose(0, 1)
        # 将pe注册为模型缓冲区
        self.register_buffer('pe', pe)
        
        
    def forward(self, x):
        # 取pe的前x.size(0)行,即
        # (x.size(0),1,d_model) → (x.size(0),d_model),拼接到x上
        x = x + self.pe[:x.size(0), :]
        return self.dropout(x)





# 定义Transformer模型
class TransformerModel(nn.Module):
    def __init__(self, input_dim, output_dim, d_model, nhead, num_layers, dim_feedforward, dropout):
        super(TransformerModel, self).__init__()
        # 创建一个线性变换层,维度input_dim4→d_model
        self.embedding = nn.Embedding(input_dim, d_model)  # 使用嵌入层
        # 生成pe
        self.pos_encoder = PositionalEncoding(d_model, dropout)
        # 生成一层encoder
        encoder_layers = nn.TransformerEncoderLayer(d_model=d_model, nhead=nhead, dim_feedforward=dim_feedforward, dropout=dropout)
        # 多层encoder
        self.transformer_encoder = nn.TransformerEncoder(encoder_layers, num_layers=num_layers)
        # 维度d_model→output_dim
        self.fc = nn.Linear(d_model, output_dim)
        self.d_model = d_model

    def forward(self, src):
        src = src.permute(1, 0)
        
        # 缩放
        src = self.embedding(src) * np.sqrt(self.d_model)
        
        # 加上位置嵌入
        src = self.pos_encoder(src)
    
        output = self.transformer_encoder(src)
        
        # 调整输出形状为(batch, seq_len, d_model)
        output = output.permute(1, 0, 2)
        # 对所有位置的表示取平均
        output = torch.mean(output, dim=1)
        # 线性变换
        output = self.fc(output)
        # 使用sigmoid激活函数
        output = torch.sigmoid(output)
        
        return output




# 初始化模型
model = TransformerModel(input_dim=4, 
                         output_dim=1, 
                         d_model=128, 
                         nhead=4, 
                         num_layers=3, 
                         dim_feedforward=256, 
                         dropout=0.1)
# 定义损失函数和优化器
criterion = nn.BCELoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)

# 训练模型
def train(model, iterator, optimizer, criterion):
    # iterator是train_loader= DataLoader(train_dataset, batch_size=32)
    model.train()
    
    for batch in iterator:
        # 初始化,防止梯度爆炸
        optimizer.zero_grad()
        
        X, y = batch
        predictions = model(X)
        
        # 计算修正损失函数
        loss = criterion(predictions.squeeze(), y)
        # 计算当前批数据的损失函数对模型参数的梯度
        loss.backward()
        # 根据梯度更新模型参数
        optimizer.step()

        
        
# 测试模型
def evaluate(model, iterator, criterion):
    print("===========test==========")
    model.eval()
    epoch_loss = 0
    
    with torch.no_grad():# 此处不需要梯度计算
        for batch in iterator:
            X, y = batch
            predictions = model(X)
            loss = criterion(predictions.squeeze(), y)
            epoch_loss += loss.item()
    # 累加loss,再求平均
    return epoch_loss / len(iterator)


# 开始训练
N_EPOCHS = 10

for epoch in range(N_EPOCHS):
    print("第%d轮===================================="%(epoch+1))
    train(model, train_loader, optimizer, criterion)
    test_loss = evaluate(model, test_loader, criterion)
    print(f'Epoch: {epoch+1:02}, Test Loss: {test_loss:.3f}')

我设置的epoch是10轮,每轮都会进行训练和测试,其中batch_size是32,每轮都会打印测试的平均loss,具体如下:

Epoch: 01, Test Loss: 0.641
Epoch: 02, Test Loss: 0.640
Epoch: 03, Test Loss: 0.669
Epoch: 04, Test Loss: 0.639
Epoch: 05, Test Loss: 0.638
Epoch: 06, Test Loss: 0.640
Epoch: 07, Test Loss: 0.638
Epoch: 08, Test Loss: 0.641
Epoch: 09, Test Loss: 0.639
Epoch: 10, Test Loss: 0.638

5、写在最后

第一次自行用Transformer模型实现二分类,过程很曲折,不过最后还好成功实现了。

各位大佬们如果有更好的模型实现思路,欢迎在评论区指教!

​

如何学习大模型

现在社会上大模型越来越普及了,已经有很多人都想往这里面扎,但是却找不到适合的方法去学习。

作为一名资深码农,初入大模型时也吃了很多亏,踩了无数坑。现在我想把我的经验和知识分享给你们,帮助你们学习AI大模型,能够解决你们学习中的困难。

我已将重要的AI大模型资料包括市面上AI大模型各大白皮书、AGI大模型系统学习路线、AI大模型视频教程、实战学习,等录播视频免费分享出来,需要的小伙伴可以扫取。

一、AGI大模型系统学习路线

很多人学习大模型的时候没有方向,东学一点西学一点,像只无头苍蝇乱撞,我下面分享的这个学习路线希望能够帮助到你们学习AI大模型。

在这里插入图片描述

二、AI大模型视频教程

在这里插入图片描述

三、AI大模型各大学习书籍

在这里插入图片描述

四、AI大模型各大场景实战案例

在这里插入图片描述

五、结束语

学习AI大模型是当前科技发展的趋势,它不仅能够为我们提供更多的机会和挑战,还能够让我们更好地理解和应用人工智能技术。通过学习AI大模型,我们可以深入了解深度学习、神经网络等核心概念,并将其应用于自然语言处理、计算机视觉、语音识别等领域。同时,掌握AI大模型还能够为我们的职业发展增添竞争力,成为未来技术领域的领导者。

再者,学习AI大模型也能为我们自己创造更多的价值,提供更多的岗位以及副业创收,让自己的生活更上一层楼。

因此,学习AI大模型是一项有前景且值得投入的时间和精力的重要选择。

每日算法讲解(一):基于Transformer的时间序列预测 Transformer模型最初由Vaswani等人在2017年的论文《Attention is All You Need》中提出。与传统的RNN模型不同,Transformer模型完全基于注意力机制(Attention Mechanism),可以并行处理数据,具有更高的效率和更强的长程依赖捕捉能力。Transformer模型由编码器(Encoder)和解码器(Decoder)组成。编码器负责将输入序列编码为隐藏表示,解码器根据这些隐藏表示生成输出序列。在时间序列预测中,我们通常只使用编码器部分。 阅读详情

相关推荐

【python量化】将Transformer模型用于股票价格预测

前言 下面的这篇文章主要教大家如何搭建一个基于Transformer的简单预测模型,并将其用于股票价格预测当中。原代码在文末进行获取。 1、Transformer模型 Transformer 是 Google 的团队在 2017 年提出的一种 NLP 经典模型,现在比较火热的 Bert 也是基于 Transformer。Transformer 模型使用了 Self-Attention 机制,不采用 RNN 的顺序结构,使得模型可以并行化训练,而且能够拥有全局信息。这篇文章的目的主要是将带大家通过Pytor

xff123456_的博客 1万+

学习笔记:基于Transformer的时间序列预测模型

基于Transformer的时间序列预测

xxt228的博客 3万+

融合BiGRU与Transformer:Pytorch实战多变量时序预测

本文详细介绍了如何利用PyTorch构建融合BiGRU与Transformer的混合模型,以解决多变量时间序列预测问题。文章通过实战案例,阐述了BiGRU擅长捕捉局部时序依赖与Transformer拥有全局注意力机制的优势,并提供了从数据预处理、模型架构设计、训练调优到评估分析的全流程指南,旨在实现更精准的多输入单预测。

weixin_29065659的博客 245

NLP实战9:Transformer实战-单词预测

cuda# 定义编码器层# 定义编码器,pytorch将Transformer编码器进行了打包,这里直接调用即可# 初始化权重"""Arguments:src : Tensor, 形状为 [seq_len, batch_size]src_mask: Tensor, 形状为 [seq_len, seq_len]Returns:输出的 Tensor, 形状为 [seq_len, batch_size, ntoken]"""# 生成位置编码的位置张量# 计算位置编码的除数项。

m0_62237233的博客 5291

Transformer预测 | 基于WTC+transformer时间序列组合预测模型(pytorch)

Transformer预测 | 基于WTC+transformer时间序列组合预测模型(pytorch)

机器学习之心的博客,关注并私信文章链接,获取对应文章源码和数据。 1520

时序预测 | 基于MAMbaS+transformer时间序列预测模型(pytorch)

时序预测 | 基于MAMbaS+transformer时间序列预测模型(pytorch)

机器学习之心的博客,关注并私信文章链接,获取对应文章源码和数据。 1947

Transformer详细解读与预测实例记录

文章目录Transformer详细解读与预测实例记录1、位置编码1)输入部分:2)位置编码部分:2、多头注意力机制1)基本注意力机制2)transformer中的注意力3、残差和LayerNorm1)残差2)LayerNorm4、前馈神经网络5、Decoder Transformer详细解读与预测实例记录 1、位置编码 之后细化: 注意:encoder结构完全相同,但其参数不完全相同;decoder也是一样,不过decoder和encoder也是不相同的。 transformer模型结构如下图:

小猴子的博客 1万+

时序预测 | 基于WTC+transformer时间序列组合预测模型(pytorch)

时序预测 | 基于WTC+transformer时间序列组合预测模型(pytorch)

机器学习之心的博客,关注并私信文章链接,获取对应文章源码和数据。 1908

PyTorch搭建Transformer实现多变量多步长时间序列预测(负荷预测)

PyTorch搭建Transformer实现多变量多步长时间序列预测(负荷预测)

KI的博客 2万+

计算机视觉-深度学习图像检测方法梳理

计算机视觉-深度学习图像检测方法梳理 由于之后要转方向啦,趁这段时间整理手中硕士研究方向的一些阅读笔记,这是一篇关于计算机视觉的基础知识梳理 先搞清一些小知识点 首先我们要弄清楚图像分类、目标定位、语义分割、实例分割的区别 a. 图像分类 :给定一张输入图像,图像分类任务旨在判断该图像所属类别; b. 目标定位 :在图像分类的基础上,我们还想知道图像中的目标具体在图像的什么位置,通常是以包围盒的(bounding box)形式; c. 语义分割 :语义分割是目标检测更进阶的任务,目标检测只需要框出每个目

qq_41662991的博客 9953

llama.cpp部署大模型

llama.cpp如何部署大模型

Eddy的博客 977

PyTorch搭建Informer实现长序列时间序列预测

PyTorch搭建Informer实现长序列时间序列预测

KI的博客 5223

首个基于LBS方案的3D传感器,VoxelSensor解析

该传感器将结合OQmented的Lissajous模式的MEMS扫描镜,与每帧逐行工作的光栅扫描相比,Lissajous轨迹扫描速度更快,并且能耗很低,它可以更快地捕获完整的场景和快速移动,并且需要更少的数据处理,可满足AR/VR对于低延迟、高效率的需求。简单来讲,Switching Pixels的区别是专注于识别激光事件,性能比普通事件相机更好,但也可以使用事件相机的算法。在具体应用中,它需要在X和Y方向发射一个或多个脉冲光束,以在X和Y轴上定位,而Z轴,也就是深度,则是通过计算光返回的时间来测量。

qingtingwang的博客 575

详解Transformer在时序预测中的Encoder和Decoder过程:以负荷预测为例

详解Transformer在时序预测中的Encoder和Decoder过程:以负荷预测为例

KI的博客 6593

别再被网站风控了!手把手教你修改Chromium源码,实现TLS指纹随机化

本文详细介绍了如何通过修改Chromium源码实现TLS指纹随机化,有效规避网站风控。文章深入解析了TLS指纹(如JA3指纹)的工作原理,并提供了具体的源码修改步骤和编译方法,帮助开发者突破高级反爬技术。通过动态打乱加密套件顺序,实现每次请求生成不同的指纹,显著提升自动化工具的隐蔽性。

weixin_28712661的博客 427

MODIS 遥感数据批量下载(使用Cygwin)

MODIS 遥感数据批量下载(使用Cygwin)包含Cygwin的下载教程

weixin_45913084的博客 916

PyTorch搭建Autoformer实现长序列时间序列预测

PyTorch搭建Autoformer实现长序列时间序列预测

KI的博客 4842

scannet数据集下载文件

scannet数据集下载文件 由于大家会申请scannet数据集,审批比较慢,我将下载的文件里面的内容贴出来,大家可以复制放进py文件中,运行就可以下载 ps:别再私信要数据集了,这个自己下载,如果光三维数据的话,还是很快的,当然如果路由器翻了墙的话,下载会更快。 #!/usr/bin/env python # Downloads ScanNet public data release # Run with ./download-scannet.py (or python download-scannet.

weixin_40766438的博客 9233

PyTorch搭建ANN实现时间序列预测(风速预测)

PyTorch搭建ANN实现时间序列预测(风速预测)

KI的博客 1万+

电商行业分析爬虫:抓取行业数据,进行行业分析

电商行业数据分析对于市场研究、竞争分析和商业决策至关重要。通过爬取电商平台的数据,我们可以深入了解市场动态、消费者行为和商品销售情况。本文将介绍如何构建一个电商行业分析爬虫,抓取商品信息、销售数据和用户评价等,并进行数据分析。

u014481728的博客 1628

【数据集】中国2003年至2022年全天空每日气温数据集

中国2003年至2022年全天空每日气温数据集

WW、forever的博客 603

IASB + Transformer双卷积:时间序列预测的新利器

IASB+transformer双卷积时间序列预测需知:好的创新性模型可以事半功倍。目前太多流水paper,都是旧模型,老师已经审美疲劳,很难发好一点的刊,这种模型很新,让paper审核老师眼睛一亮,老师就会觉得你有水平,关注顶会前沿热点,非常好中稿。上限下限都非常高。适合需要高等级的高手和没有经验的小白。ASB和ICB双卷积是2024年的一个新机制,创新点顶级强,这种结合极大程度提高了模型的精度。(有送配套顶会原理pdf)

CjwEVwbUqy的博客 1022

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

时间序列预测中的Transformer:从理论到实战

时间序列数据广泛存在于金融、能源、气象等领域,其预测任务面临三大核心挑战: - **长期依赖建模**:传统RNN/LSTM存在梯度消失问题,难以捕捉长距离依赖 - **特征交互**:多变量时间序列中,不同特征间的复杂关系难以建模 - **计算效率**:大规模时间序列数据需要高效的并行计算方案 Transformer凭借自注意力机制(Self-Attention)彻底解决了这些问题,其并行计算能力...

gitblog_00327的博客 542

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

BiGRU-Transformer时间序列预测(多输入单预测)——基于Pytorch框架

在模型评估阶段,我们将测试集的数据输入训练好的模型,得到预测结果。我们使用均方误差(MSE)、均方根误差(RMSE)、平均绝对误差(MAE)和决定系数(R²)等指标评估模型性能。接着,通过设置历史步长和未来预测步长,生成适用于训练和测试的数据集。在训练过程中,每隔10个epoch打印一次损失,以监控模型的训练情况。本文将介绍一种基于Transformer和BiGRU(双向门控循环单元)的混合模型及其在时间序列预测中的应用。本模特适用于多输入单输出预测,适合风电预测,功率预测,负荷预测等等。

小嘤熊的博客 1685

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Transformer实战:基于PyTorch的多变量时间序列预测模型构建与优化(电力负荷预测)

本文详细介绍了基于PyTorch和Transformer的多变量时间序列预测模型在电力负荷预测中的应用。通过自注意力机制,Transformer模型显著提升了预测精度和计算效率,相比传统LSTM模型将误差降低至5.3%。文章涵盖了数据预处理、模型架构设计、训练优化技巧及实际部署挑战,为电力系统预测提供了实用解决方案。

k9l0m1的博客 349

时序预测 | Pytorch实现TCN-Transformer的时间序列预测

时序预测 | Pytorch实现TCN-Transformer的时间序列预测

机器学习之心的博客,关注并私信文章链接,获取对应文章源码和数据。 5236
上一篇: 一文看懂 Transformer!超级详解,小白入门必看!
下一篇: 豆包文科成绩超了一本线,为什么理科不行?
冻感糕人~
博客等级 码龄3年 8926粉丝 2384原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值