簡介
之前的文章介紹了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時:
