时间序列生成数据,TransformerGAN
创作时间:
作者:
@小白创作中心
时间序列生成数据,TransformerGAN
引用
CSDN
1.
https://blog.csdn.net/weixin_44992737/article/details/138250938
TransformerGAN是一种基于Transformer和GAN的时间序列生成模型。该模型能够修复和生成时间序列数据,并支持基于prompt的特定时间段数据生成。本文将详细介绍该模型的架构、训练过程以及实验效果。
1、模型架构
TransformerGAN的生成器和鉴别器都使用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、噪声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散度作为一个评价指标。
5、生成数据展示
上面是真实数据、下面是伪造的数据。由于只有几百个样本,以及参数都没有进行调整,但是效果还不错。
6、损失函数变化情况
模型还是学习到了一点东西的。
热门推荐
走进陕西旬阳市:从古老历史到现代发展,一路皆是惊喜!
2025杭州春季赏花全攻略:花展信息及热门赏花地推荐
16oz是多少ml?盎司与毫升的换算
2024年中国创新药行业市场规模、获批上市情况、主要政策、产业链与展望「图」
从“卡脖子”到“强筋骨”:乳业两会提案里的产业跃迁
秋冬季底妆持久不脱妆的秘诀,远离卡粉起皮烦恼
PM2.5的正常范围是多少?
氟化液的毒性:了解其对人体和环境的潜在影响
摄影基础:什么是快门速度,在不同场景中怎么选择快门速度?
袁绍轻取冀州之战,是袁绍跃居中原首强的第一战
袁绍是如何不战而取冀州的?逢纪献出的计策竟是如此巧妙
“靓仔”“靓妹”原来来自客家话?
变速箱更换的步骤是什么?变速箱更换过程中有哪些关键点需要注意?
美国大学有哪些AI相关专业值得推荐?
美本人工智能专业最强的大学有哪些?
非电类专业能否报考国家电网?
白牡丹茶的冲泡流程-白牡丹茶的冲泡流程图
普洱茶:农耕文明时代文化遗产的内涵与价值
多人合作开启新篇章——Minecraft和多人生存战服务器启动步骤详解
微星BIOS更新教程(以微星主板为例,轻松更新BIOS,提升系统性能与稳定性)
华硕盲刷BIOS教程:安全高效刷新主板BIOS固件
西洋参如何切片方法
“水牌”是什么意思?从传统记事牌到现代会议指示牌
Nature子刊重磅:全球首份土壤病毒图谱绘成,揭示未探明的生物多样性
AI搜索时代关键词优化全攻略:从短尾到长尾,从关键词填充到答案供给
产品竞争优势分析的六大步骤:从定位到报告撰写
哪些人不适合吃香椿芽
研究生考试一年考几次?一文读懂考研时间安排
学校起始年级如何开好家长会
夏末秋初养肝护肝正当时,护肝片的成分与功效盘点