时间序列生成数据,TransformerGAN

news/2024/5/14 21:58:59

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

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

1、模型架构

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

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

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、噪声zzreal_data = real_xnoisy_data = x_g# Train Discriminatoroptimizer_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_lossd_loss.backward()optimizer_D.step()# Train Generatoroptimizer_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 = channelsself.latent_dim = latent_dimself.seq_len = seq_lenself.embed_dim = embed_dimself.patch_size = patch_sizeself.depth = depthself.attn_drop_rate = attn_drop_rateself.forward_drop_rate = forward_drop_rateself.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_embedH, W = 1, self.seq_lenx = 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散度作为一个评价指标。

5、生成数据展示

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

6、损失函数变化情况

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


http://www.mrgr.cn/p/16665268

相关文章

【树莓派Linux内核开发】入门实操篇(虚拟机Ubuntu环境搭建+内核源码获取与配置+内核交叉编译+内核镜像挂载)

【树莓派Linux内核开发】入门实操篇(虚拟机Ubuntu环境搭建内核源码获取与配置内核交叉编译内核镜像挂载) 文章目录 【树莓派Linux内核开发】入门实操篇(虚拟机Ubuntu环境搭建内核源码获取与配置内核交叉编译内核镜像挂载)一、搭建…

WEB攻防-ASP安全-MDB下载

MDB下载漏洞主要涉及到早期ASPAccess构架的数据库文件。当Web站点提供文件下载功能时,如果没有对下载请求进行充分的验证和过滤,或者服务器配置不当,就可能产生文件下载漏洞。攻击者可以利用这个漏洞,通过修改请求参数或尝试猜测或…

「React Native」为什么要选择 React Native 作为的跨端方案

文章目录 前言一、常见因素二、举个栗子2.1 项目背景2.2 为什么选择 React Native2.3 项目实施2.4 成果总结 前言 没有完美的跨端技术,只有适合的场景。脱离适用场景去谈跨端技术没有什么意义。 一、常见因素 共享代码库: React Native 允许开发者编写…

[C++基础学习]----02-C++运算符详解

前言 C中的运算符用于执行各种数学或逻辑运算。下面是一些常见的C运算符及其详细说明:下面详细解释一些常见的C运算符类型,包括其原理和使用方法。 正文 01-运算符简介 算术运算符: a、加法运算符():对两个…

【QT】ROS2 Humble联合使用QT教程

【QT】ROS2 Humble联合使用QT教程 文章目录 【QT】ROS2 Humble联合使用QT教程1. 安装ROSProjectManager插件2. 创建ROS项目3.一个快速体验的demoReference 环境的具体信息如下: ubunt 22.04ros2 humbleQt Creator 13.0.0ROS ProjectManager 13.0.0 本文建立在已经…

重生之我是Nginx服务专家

nginx服务访问页面白色 问题描述 访问一个域名服务返回页面空白,非响应404。报错如下图。 排查问题 域名解析正常,网络通讯正常,绕过解析地址访问源站IP地址端口访问正常,nginx无异常报错。 在打开文件时,发现无法…

在IDEA中使用.env文件导入系统配置的图文教程

JetBrains的IDEA是一款功能强大的集成开发环境,为开发人员提供了丰富的功能和工具。使用.env文件来管理配置信息在IDEA中非常简单。 旧版本默认支持,新版本idea需要安装插件才可以。 这里我们可以安装EnvFile插件,步骤如下: 在弹…

2017年全国职业院校技能大赛高职组“信息安全管理与评估”样题

培训、环境、资料、考证 公众号:Geek极安云科 网络安全群:624032112 网络系统管理群:223627079 网络建设与运维群:870959784 移动应用开发群:548238632 极安云科专注于技能提升,赋能 2024年广东省高校的技…

项目部署总结

1、安装jdk 第一步:上传jdk压缩安装包到服务器 第二步:将压缩安装包解压 tar -xvf jdk-8uXXX-linux-x64.tar.gz 第三步:配置环境变量 编辑/etc/profile文件,在文件末尾添加以下内容: export JAVA_HOME/path/to/j…

GPT学术优化推荐(gpt_academic )

GPT学术优化 (GPT Academic):支持一键润色、一键中英互译、一键代码解释、chat分析报告生成、PDF论文全文翻译功能、互联网信息聚合GPT等等 ChatGPT/GLM提供图形交互界面,特别优化论文阅读/润色/写作体验,模块化设计,支持自定义快捷按钮&…

Treiber Stack简单分析

Treiber Stack简单分析 Treiber Stack Algorithm是一个可扩展的无锁栈,利用细粒度的并发原语CAS来实现的,Treiber Stack在 R. Kent Treiber在1986年的论文Systems Programming: Coping with Parallelism中首次出现. 基本原理 该算法的基本原理是&…

构建RAG应用-day06: 个人知识库助手项目

个人知识库助手 本文基于datawhale开源学习项目:llm-universe/docs/C6 at main datawhalechina/llm-universe (github.com) 获取数据库 该项目llm-universe个人知识库助手选用 Datawhale 一些经典开源课程、视频(部分)作为示例,具体包括:《机器学习公式详解》PDF版本 《面…

IDEA代码重构

重构 重构的目的: 提高代码的可读性、可维护性、可扩展性和性能。 重命名元素 重命名类 当我们进行重命名操作的时候可以看到第六行存在一个R(rename),点击后就会弹出所偶有引用,这样可以避免我们在修改后存在遗漏引用处未修改。 我们可以通过…

Vision Pro“裸眼上车”,商汤绝影全新舱内3D交互亮相

2023年,Apple Vision Pro的横空出世让人们领略到了3D交互的魅力,商汤绝影通过深厚的技术研发实力和高效的创新迭代效率,带来两大全新座舱3D交互:3D Gaze高精视线交互和3D动态手势交互。 作为全球首创的能够通过视线定位与屏幕图标…

Python AI库 Pandas的常见操作的扩展知识

Python AI库 Pandas的常见操作的扩展知识 本文默认读者具备以下技能: 熟悉python基础知识,vscode或其它编辑工具 熟悉表格文件的基本操作 具备自主扩展学习能力 前文中对Pandas的数据结构以及基础操作做了介绍,本文中会在前文的基础上,对常见的操作进…

面试八股——HashMap

实现原理 红黑树是为了解决链表过长之后,查找时间过长的问题,将链表存储变为红黑树存储。 put方法的实现(5⭐) 相关属性: 1. 容量:初始容量为2^4。 2. 加载因子:初始值为0.75 上面两个属性的…

网站内容下载软件有哪些 网站内容下载软件推荐 网站内容下载软件安全吗 idm是啥软件 idm网络下载免费

一招搞定网页内容下载,并且各大网站通用!绕过资源审查,所有网站内容随意下载。解锁速度限制,下载即高速无视网站限速。跳过会员充值,所有VIP资源免费下载。有关网站内容下载软件有哪些,网站内容下载软件推荐…

从零开始构建大语言模型(MEAP)

原文:annas-archive.org/md5/c19a4ef8ab1664a3c5a59d52651430e2 译者:飞龙 协议:CC BY-NC-SA 4.0一、理解大型语言模型 本章包括大型语言模型(LLM)背后的基本概念的高层次解释探索 ChatGPT 类 LLM 源自的 Transformer 架构的深层次解释从零开始构建 LLM 的计划像 ChatGPT …

CSS伪类大全!4大类伪类详解

你好,我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。 云桃桃-大专生,一枚程序媛,感谢关注。回复 “前端基础题”,可免费获得前端基础 100 题汇总,回复 “前端工具”,可获取 Web 开发工具合…

WebSocket 快速入门 - springboo聊天功能

目录 一、概述 1、HTTP(超文本传输协议) 2、轮询和长轮询 3、WebSocket 二、WebSocket快速使用 1、基于Java注解实现WebSocket服务器端 2、JS前端测试 三、WebSocket进阶使用 1、如何获取当前用户信息 2、 后端聊天功能实现 一、概述 HTTP…