CVAE(条件变分自动编码器)简单理解
简介
之前的文章介绍了AE和VAE,指出了它们的优缺点。AE适合数据压缩与还原,不适合生成未见过的数据。VAE适合生成未见过的数据,但不能控制生成内容。本文所介绍的CVAE(Conditional VAE)可以在生成数据时通过指定其标签来生成想生成的数据。CVAE的结构图如下所示:
![](https://img2020.cnblogs.com/blog/2226924/202104/2226924-20210424093924301-1328423376.jpg)
整体结构和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时:
![](https://img2020.cnblogs.com/blog/2226924/202104/2226924-20210424094538645-721868137.jpg)
标签为9时:
![](https://img2020.cnblogs.com/blog/2226924/202104/2226924-20210424094048712-484908206.jpg)