时间序列生成数据,TransformerGAN

这篇具有很好参考价值的文章主要介绍了时间序列生成数据,TransformerGAN。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        简介:这个代码可以用于时间序列修复和生成。使用transformer提取单变量或者多变时间窗口的趋势分布情况。然后使用GAN生成分布类似的时间序列。

        此外,还实现了基于prompt的数据生成,比如指定生成某个月份的数据、某半个月的数据、某一个星期的数据。

1、模型架构

        如下图所示,生成器和鉴别器都使用Transformer的编码器部分提取时间序列的特征,然后鉴别器使用这些进行二分类、生成器使用这些特征生成伪造的数据。

        重点:在下面的图的基础上,我还添加了基于提示的生成代码,类似于AI提示绘画一样,因此可以指定生成一月份、二月份等任意指定周期的数据。

时间序列生成数据,TransformerGAN,人工智能学习,python,神经网络,transformer,生成对抗网络

2、训练GAN的代码

        下面是GAN的训练部分。

# 训练GAN
num_epochs = 100
for epoch in range(num_epochs):
    for real_x,x_g,zz in loader: # 分别是真实值real_x、提示词信息x_g、噪声zz
        real_data = real_x
        noisy_data = x_g
        # Train Discriminator
        optimizer_D.zero_grad()
        out = discriminator(real_data)
        real_loss = criterion(discriminator(real_data), torch.ones(real_data.size(0), 1))
        fake_data = generator(noisy_data,zz)
        fake_loss = criterion(discriminator(fake_data.detach()), torch.zeros(fake_data.size(0), 1))
        d_loss = real_loss + fake_loss
        d_loss.backward()
        optimizer_D.step()

        # Train Generator
        optimizer_G.zero_grad()
        g_loss = criterion(discriminator(fake_data), torch.ones(fake_data.size(0), 1))
        g_loss.backward()
        optimizer_G.step()

    print(f'Epoch [{epoch+1}/{num_epochs}], D Loss: {d_loss.item()}, G Loss: {g_loss.item()}')

3、生成器代码

class Generator(nn.Module):
    def __init__(self, seq_len=8, patch_size=2, channels=1, num_classes=9, latent_dim=100, embed_dim=10, depth=1,
                 num_heads=5, forward_drop_rate=0.5, attn_drop_rate=0.5):
        super(Generator, self).__init__()
        self.channels = channels
        self.latent_dim = latent_dim
        self.seq_len = seq_len
        self.embed_dim = embed_dim
        self.patch_size = patch_size
        self.depth = depth
        self.attn_drop_rate = attn_drop_rate
        self.forward_drop_rate = forward_drop_rate
        
        self.l1 = nn.Linear(self.latent_dim, self.seq_len * self.embed_dim)
        self.pos_embed = nn.Parameter(torch.zeros(1, self.seq_len, self.embed_dim))
        self.blocks = Gen_TransformerEncoder(
                         depth=self.depth,
                         emb_size = self.embed_dim,
                         drop_p = self.attn_drop_rate,
                        )

        self.deconv = nn.Sequential(
            nn.Conv2d(self.embed_dim, self.channels, 1, 1, 0)
        )

    def forward(self, z):
        x = self.l1(z).view(-1, self.seq_len, self.embed_dim)
        x = x + self.pos_embed
        H, W = 1, self.seq_len
        x = self.blocks(x)
        x = x.reshape(x.shape[0], 1, x.shape[1], x.shape[2])
        output = self.deconv(x.permute(0, 3, 1, 2))
        output = output.view(-1, self.channels, H, W)
        return output

4、生成数据和真实数据分布对比

        使用PCA和TSNE对生成的时间窗口数据进行降维,然后scatter这些二维点。如果生成的真实数据的互相混合在一起,说明模型学习到了真东西,也就是模型伪造的数据和真实数据分布是一样的,美滋滋。从下面的PCA可以看出,两者的分布还是近似的。

        进一步的,可以拟合两个二维正态分布,然后计算他们的KL散度作为一个评价指标。

时间序列生成数据,TransformerGAN,人工智能学习,python,神经网络,transformer,生成对抗网络

时间序列生成数据,TransformerGAN,人工智能学习,python,神经网络,transformer,生成对抗网络

5、生成数据展示

        上面是真实数据、下面是伪造的数据。由于只有几百个样本,以及参数都没有进行调整,但是效果还不错。

时间序列生成数据,TransformerGAN,人工智能学习,python,神经网络,transformer,生成对抗网络

6、损失函数变化情况

        模型还是学习到了一点东西的。

时间序列生成数据,TransformerGAN,人工智能学习,python,神经网络,transformer,生成对抗网络文章来源地址https://www.toymoban.com/news/detail-861675.html

到了这里,关于时间序列生成数据,TransformerGAN的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据挖掘】时间序列教程【一】

            对于时间序列的研究,可以追溯到19世纪末和20世纪初。当时,许多学者开始对时间相关的经济和社会现象进行研究,尝试发现其规律和趋势。其中最早的时间序列研究可以追溯到法国经济学家易贝尔(Maurice Allais)和英国经济学家詹姆斯·克拉克(James Clark)的研

    2024年02月12日
    浏览(27)
  • 数据分析实战│时间序列预测

    时间序列预测问题是一类常见的数据分析问题。数据中往往包含时间标签,这类问题往往根据过去一段时间的数据,建立能够比较精确地反映序列中所包含的动态依存关系的数学模型,并对未来的数据进行预测。 本案例给出二战时期的某气象站温度记录值,通过分析之前的天

    2024年02月11日
    浏览(25)
  • 【数据挖掘】时间序列教程【十】

    上一节中描述的状态空间模型作为观测方程的更一般的公式            和状态方程                    这里是一个p×1 向量是一个k×1 向量,  是一个p×k 矩阵,  是k×k 矩阵。我们可以想到的和          给定初始状态 和 ,预测方程为(类似于上面)      

    2024年02月15日
    浏览(25)
  • 【数据挖掘】时间序列教程【五】

    (说明:本文接上回: 【数据挖掘】时间序列教程【四】_无水先生的博客-CSDN博客 )                 上面介绍的傅里叶变换的问题在于,无论是正弦/余弦回归模型形式还是复指数形式,它都需要 操作以计算所有傅里叶系数。有n 数据点和有n/2 可以计算傅里叶系数的

    2024年02月11日
    浏览(27)
  • 【数据挖掘】时间序列教程【八】

    我们先考虑一个简单的线性回归模型,                                          哪里 和是具有平均值的高斯过程 00 和自协方差 .现在,在不失去一般性的情况下,让我们假设 而那 瓦尔

    2024年02月12日
    浏览(23)
  • 时间序列数据库 (TSDB)

    参考文档:时间序列数据库 TSDB_时间序列数据库 TSDB-阿里云帮助中心 时序数据是随时间不断产生的一系列数据,简单来说,就是带时间戳的数据。数据可能来自服务器和应用程序的指标、物联网传感器的读数、网站或应用程序上的用户交互或金融市场上的交易活动等。 时序

    2024年02月13日
    浏览(25)
  • 【数据挖掘】时间序列教程【九】

            状态空间模型通常试图描述具有两个特征的现象 有一个底层系统具有时变的动态关系,因此系统在时间上的“状态”t 与系统在时间的状态t−1有关 .如果我们知道系统在时间上的状态t−1 ,那么我们就有了 我们需要知道的一切 ,以便对当时的状态进行推断或预测

    2024年02月13日
    浏览(20)
  • 【数据挖掘】时间序列教程【四】

            我们可以对上述  的主模型采用方差分析方法,并将中的总变异分解为 为残差平方和和可归因于各种频率的变化。                 第二行是可能的,因为平方的所有交叉项都等于零,即对于所有 ,                                 

    2024年02月12日
    浏览(26)
  • 时间序列预测 | Matlab基于粒子群算法优化门控循环单元(PSO-GRU)的时间序列预测,PSO-GRU时间序列预测,单列数据集

    效果一览 文章概述 时间序列预测 | Matlab基于粒子群算法优化门控循环单元(PSO-GRU)的时间序列预测,PSO-GRU时间序列预测,单列数据集。

    2024年02月12日
    浏览(27)
  • 【深度学习时间序列预测案例】零基础入门经典深度学习时间序列预测项目实战(附代码+数据集+原理介绍)

    🚨注意🚨 :最近经粉丝反馈,发现有些订阅者将此专栏内容进行二次售卖,特在此声明,本专栏内容仅供学习,不得以任何方式进行售卖,未经作者许可不得对本专栏内容行使发表权、署名权、修改权、发行权、转卖权、信息网络传播权,如有违者,追究其法律责任。 👑

    2023年04月15日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包