CVAE(条件变分自动编码器)简单理解

简介

之前的文章介绍了AE和VAE,指出了它们的优缺点。AE适合数据压缩与还原,不适合生成未见过的数据。VAE适合生成未见过的数据,但不能控制生成内容。本文所介绍的CVAE(Conditional VAE)可以在生成数据时通过指定其标签来生成想生成的数据。CVAE的结构图如下所示:

整体结构和VAE差不多,区别是在将数据输入Encoder时把数据内容与其标签(label)合并(cat)一起输入,将编码(Z)输入Decoder时把编码内容与数据标签(label)合并(cat)一起输入。注意label并不参与Loss计算,CVAE的Loss和VAE的Loss计算方式相同(input和output的MSE Loss以及\(\mathcal{N}\left(\mu_{}, \sigma_{}^2\right)\)\(\mathcal{N}\left(0, 1\right)\)的KL Loss)

因此我们在生成数据时,可以先从正态分布采样,然后cat上你想生成的数据的label,一起送入Decoder,就能生成和label类似的数据。

代码

有关CVAE的代码实现:Github

实验结果:

从正态分布采样100个latent并选择期望生成的图片的标签,把它们cat以后一起输入训练好的Decoder

标签为1时:

标签为9时:

posted @ 2021-04-24 09:44  火锅先生  阅读(18162)  评论(1编辑  收藏  举报