CGAN解析

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介:

最近看了好多大神的博客之后越来越觉得自己写的简直不忍直视,不过后来发现不找点事情做就天天吃鸡打dota颓废的不行,,,,
这两个月天天搞gan,做了好多实验,有了点感觉,准备写几篇博客,算是一个总结,其中会附上自己做的一些实验,说说图像方面gan存在的问题、主要的模型等等,先从CGAN开始。
gan那篇论文里,作者用mlp的D和G在mnist,tfd,cifar10上做了实验,用卷积的D和反卷积的G在cifar10上做了实验,看上去效果是不错的,但是亲手做过实验的表示,作者很有可能是从几十张中选出了几张能看的,而且就我的实验结果来看,mode collapse的现象还是挺严重的,当然也可能我受制于硬件效果没那么好。文章在future work这一块列出了未来可以做的方向,其中就包括了五个月之后的这篇CGAN,也就是我今天要说的。
先看paper吧,原理上这篇paper其实很简单,就是在原有的gan上加了一个先验y,公式如下:
1
那么主要的问题就回到了工程上,这里的D和G作者用的都是MLP,结构如下:
2
原文如下:“We trained a conditional adversarial net on MNIST images conditioned on their class labels, encoded as one-hot vectors.
In the generator net, a noise prior z with dimensionality 100 was drawn from a uniform distribution within the unit hypercube. Both z and y are mapped to hidden layers with Rectified Linear Unit (ReLu) activation [4, 11], with layer sizes 200 and 1000 respectively, before both being mapped to second, combined hidden ReLu layer of dimensionality 1200. We then have a final sigmoid unit layer as our output for generating the 784-dimensional MNIST samples.
The discriminator maps x to a maxout [6] layer with 240 units and 5 pieces, and y to a maxout layer with 50 units and 5 pieces. Both of the hidden layers mapped to a joint maxout layer with 240 units and 4 pieces before being fed to the sigmoid layer. (The precise architecture of the discriminator is not critical as long as it has sufficient power; we have found that maxout units are typically well suited to the task.)

这里的G引入了一个one hot encoder独热编码,其实就是把一个有m个状态的变量变成了m个有两个状态的变量,比如2就是0010000000,5就是0000100000,然后把这个作为输入,经过一层全连接后合并到一起,最后output是784个单元。
而D的话作者采用了maxout,当然作者也说,只需要D有足够的鉴别能力就可以,我采用的是cnn作为D,但是后来我知道了perfect discriminator的问题,现在想想可能对于mnist来说mlp就够了,关于完美鉴别器之后再讲。
以下是作者的实验结果:
3
接下来作者做了一个比较有意思的,也是工业上可能会有用的,就是利用UGM(user generated metadata)去给图像生成标签,原文说的很复杂,但是说的很专业,贴出来作为参考:“In this section we demonstrate automated tagging of images, with multi-label predictions, using conditional adversarial nets to generate a (possibly multi-modal) distribution of tag-vectors conditional on image features.”
简单讲一下原理,这里的G有两个input,一个是size100的noise,一个是size4096的image feature vector(类比one hot vector),output是word vector,结构是mlp;D的input也是两个,一个是500size的word vector,一个是size1200的image feature vector,输出是一个代表生成数据真假的值。
综上,CGAN提出了一种可以人为控制的生成模型,并从工程上讲了如何去实现。

目录
相关文章
|
4月前
GoogLeNet实现的过程
【7月更文挑战第26天】GoogLeNet实现的过程。
42 8
|
3月前
|
API 算法框架/工具
【Tensorflow+keras】使用keras API保存模型权重、plot画loss损失函数、保存训练loss值
使用keras API保存模型权重、plot画loss损失函数、保存训练loss值
30 0
|
6月前
|
vr&ar
R语言如何做马尔可夫转换模型markov switching model
R语言如何做马尔可夫转换模型markov switching model
|
6月前
|
vr&ar
R语言如何做马尔科夫转换模型markov switching model
R语言如何做马尔科夫转换模型markov switching model
|
存储 TensorFlow 算法框架/工具
mnist数据集预处理实战
mnist数据集预处理实战
282 0
|
数据采集 并行计算 PyTorch
【目标检测之数据集加载】利用DataLoader加载已预处理后的数据集【附代码】
在前一篇文章中,已经通过继承Dataset预处理自己的数据集 ,接下来就是使用pytorch提供的DataLoader函数加载数据集。
609 0
【目标检测之数据集加载】利用DataLoader加载已预处理后的数据集【附代码】
|
网络虚拟化
在torch_geometric.datasets中使用Planetoid手动导入Core数据集及发生相关错误解决方案
在torch_geometric.datasets中使用Planetoid手动导入Core数据集及发生相关错误解决方案
766 0
在torch_geometric.datasets中使用Planetoid手动导入Core数据集及发生相关错误解决方案
|
API 容器
paddle手写数字识别解析(多方法)
paddle手写数字识别解析(多方法)
242 0
paddle手写数字识别解析(多方法)
|
存储 并行计算 索引
|
并行计算 Serverless 索引