如果講了自動編碼器(AE),
卻不介紹變分自動編碼器(VAE),
感覺有點太可惜了。
聽到生成演算法可能都會想到生成對抗網路GAN,
但是卻比較少人知道VAE也可以用來生成物件。
如果想看看VAE背後的原理的話,
可以自行調查看看,
跟自動編碼器的差異是,
在編碼層時將每一個特徵向量取平均值及標準差,以常態分佈生成壓縮資訊。
參考頁面:
https://www.tensorflow.org/probability/examples/Probabilistic_Layers_VAE?hl=zh_tw
首先是引入套件,比較特別的是引入tensorflow_probability這個套件,
可以幫我們生成常態分佈計算層:
載入手寫數字資料集,
劃分訓練集及測試集:
利用輸入圖片及壓縮資訊的特徵數目來搭建模型的編碼器,
跟AE重點上的不同在於編碼器的最後一層:
模型解碼器的部分:
設計損失函數,以及以adam當作優化器進行訓練:
將十張測試集資料放入模型,並作圖查看:
隨機生成十張手寫圖片:
如果想看不同生成模式的差異(mean、mode、random),
可以參考這篇文章:
https://towardsdatascience.com/6-different-ways-of-implementing-vae-with-tensorflow-2-and-tensorflow-probability-9fe34a8ab981
延伸閱讀
使用magenta的Multitrack MusicVAE來創作音樂:
https://colab.research.google.com/github/magenta/magenta-demos/blob/master/colab-notebooks/Multitrack_MusicVAE.ipynb