当前位置:   article > 正文

基于BiGRU和GAN的数据生成方法_gan生成数据集

gan生成数据集

本文首发于行者AI

引言

当我们期望得到与现有有限数据类似的样本时,可以考虑使用一些数据增强的方法。本文从建筑参数生成项目出发,介绍了两种数据生成方法:基于BiGRU以及GAN网络的数据生成。

BiGRU网络是由RNN发展而来,它在处理序列数据的任务中被广泛使用,1991年Elman[1]基于Jordan network[2]做了简化提出RNN,但是由于RNN中较远时间步会发生梯度消失和梯度爆炸导致RNN的应用受限,在1997年LSTM[3]网络和BiRNN[4]网络模型在RNN基础上进行改进使得RNN网络的适用范围扩大,之后Bengio团队优化了LSTM训练慢的问题提出了GRU网络。GRU网络与LSTM相差并不大,它将LSTM原有的三个门控单元减少到两个,得到了更快的收敛速度和与之不相上下的模型效果。本文使用GRU网络是因为,当面对(1:n)的样本组成的多维输入时,我们期望能够利用到所有的输入样本,刚好GRU网络满足这种训练要求。

GAN[5]是近些年比较火的研究方向,在2014年由Goodfellow提出,GAN网络的初衷就是让模型有联想能力或者说“想象力”,它可以用来生成不存在于真实世界的数据,并且生成的数据符合规则。

1. 任务描述

简述任务需求:输入一组建筑物的长和宽,希望得到满足要求的三个枚举值的组合以及随机数0~4的值,生成的枚举值和浮点数组合返回给请求端处理后,会得到新的一对长宽组合,要求计算得到的长和宽与输入的长宽差别不超过50(mm)。根据神经网络的特征,需要分开枚举值生成任务与浮点数生成任务。

提出两种实现方案:

  1. GRU网络邻近点数据拟合: 根据任务描述可知,期望通过输入的长和宽来预测一系列数值,由于生成数据中包含了相关性不强的随机值,这给生成任务带来挑战。因此考虑利用起现有的数据,依照有监督的方法进行训练。参考与输入的长和宽邻近的n个样本数据进行拟合(邻近样本使用KD树查找)。对于枚举类型组合,统计邻近样本的枚举类型组合中每个类的数量,取数量最多的类作为输出。对于随机数组的生成,将选取的枚举类对应的随机数组组合成Data交给神经网络学习,因此交给网络的Data将是一个二维矩阵,矩阵的每一行都是一个与输入的长和宽临近样本的随机数组,为此考虑使用CNN或者RNN网络对这种多维数据提取信息,本文选用受限制的GRU网络作为数据提取方法,使用受限制的GRU在后文有详细介绍。

  2. GAN网络数据生成: 枚举类型的生成使用GAN网络,将长和宽输入给生成器,生成器生成一组one-hot类型数据交给判别器判断。随机数组合拆分成5个分别使用MLP网络生成。

2. 数据集描述

数据集有数据条目约1060万个,每个样本包含枚举类型和浮点类型的数据,枚举类型包括:材分,开间数和架数。浮点型数据包括:随机数0~4、建筑的长和宽。通过计算皮尔逊、肯德尔和斯皮尔曼相关系数(如下图)可知,随机数2~4基本上与任何特征都没有直接联系,枚举值相互之间的联系比较深刻。除此以外,在确定了建筑的长和宽后,枚举值组合也可以基本确定。 皮尔逊系数

图1.数据特征皮尔逊系数混淆矩阵

肯德尔系数
肯德尔系数

图2.数据特征肯德尔系数混淆矩阵

斯皮尔曼系数
斯皮尔曼系数

图3.数据特征斯皮尔曼系数混淆矩阵

3. BiGRU生成数据

3.1 GRU数据组织方法

如何找出与输入的长和宽相邻的样本也是一个需要解决的问题,本文选择使用KD树来实现,KD树被用来实现KNN方法,它是一种平衡二叉树,KD树在构建中都会选择一个维度进行划分,每个超平面都会把该空间划分为两个部分,每次选择时都会按照中间值来划分。scipy库中有非常简便的调用方法,使用如下:

from scipy import spatial 

List_x_y = Data[:,-2:]                                              # 数据中的长宽在最后两位,取出他们
KDTree = spatial.KDTree(List_x_y)                                   # 构建KD树
position = List_x_y[i,:]                               # 组织样本时从现有的数据取

# KDTree.query会返回两个内容,索引0的部分是一组array形式的距离值,索引1是一组array形式的索引。
index = KDTree.query(position,(lib_n.search_size + 1))[1][1:]       # 这样就返回了在 List_x_y 中距离(15,20)最近的 search_size + 1 个样本点[1:]表示不取最近的那个,也就是不取它本身
  • 1

现在解决了数据查询的问题,下一步需要解决样本组织形式,我们注意到确定了长和宽之后他们的枚举类型组合也基本随之确定了。一般的,对于一对长宽组合,最多有两到三个枚举类型组合,因此在样本组织过程中的搜索阶段,我们要求计算机搜索sample_size * 2个临近点(经过尝试后发现是可以找到sample_size以上个邻近样本的),然后拿取这一组邻近样本中占比最大的sample_size个枚举类型组合的数据(带随机数组),将这组数据拆切片只保留随机数组作为data,原本的长和宽对应的随机数组做为label,他们的枚举类型就直接认定成近邻样本中枚举值类的众数类。在实验中我们取10/20/30条数据为一个样本进行实验。以这种数据组织形式,数据的复用率很高。

3.2 Limited BiGRU网络

组成数据集后可以着手搭建网络了,使用受限制的GRU是因为我们认为所有输入样本数据都是有价值的,因此希望重置门R和更新门Z不要存在0的情况,也就是不让重置门和更新门将所有历史信息都遗忘。实现方法是压缩sigmiod这里是压缩到70%,sigmiod函数乘上压缩系数后仍有为0的情况,所以我们加上30%的历史数据作为保障,历史数据的汇入同样受更新门控制,允许至少40%的隐藏信息汇入,可以保证在每一个时间步上都有至少12%的历史信息被保留。softsign函数有比较平滑的梯度变化,样本落入饱和区间的可能性会比tanh小很多。为实现了这个受限制的GRU作为数据提取网络,主要对GRUcell部分进行了如下改进:

传统GRU单元
传统GRU单元

图4.传统GRU单元

 r = (sigma(W_{ir} x + b_{ir} + W_{hr} h + b_{hr})) * 0.7 + 0.3   
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/302146?site
推荐阅读
相关标签
  

闽ICP备14008679号