本文轉(zhuǎn)載至知乎ID:Charles(白露未晞)知乎個人專欄
下載W3Cschool手機App,0基礎(chǔ)隨時隨地學(xué)編程>>戳此了解
導(dǎo)語
利用Python搭建簡單的GAN網(wǎng)絡(luò)來生成MNIST數(shù)據(jù)集。其中GAN,即生成對抗網(wǎng)絡(luò)。
英文全稱:
Generative Adversarial Networks
偷閑入門了一波心心念念的GAN,過來發(fā)一波文。
畢竟自從2014年被Ian Goodfellow提出后便一直是深度學(xué)習(xí)中的熱門方向且十分有趣。
Let's Go~~~
相關(guān)文件
百度網(wǎng)盤下載鏈接: https://pan.baidu.com/s/1h6haOWnQojZU67igrNveeA
密碼: 51pr
開發(fā)工具
相關(guān)模塊:
tensorflow-gpu模塊;
numpy模塊;
matplotlib模塊;
以及一些Python自帶的模塊。
其中TensorFlow-GPU版本為:
1.7.0
環(huán)境搭建
安裝Python并添加到環(huán)境變量,pip安裝需要的相關(guān)模塊即可。
其中,TensorFlow-GPU的環(huán)境搭建請自行參考相關(guān)的網(wǎng)絡(luò)教程,注意版本和驅(qū)動嚴格對應(yīng)即可。
原理簡介
生成對抗網(wǎng)絡(luò)(GAN)的基本思想源自博弈論中的二人零和博弈,由一個生成器和一個判別器組成,通過對抗學(xué)習(xí)的方式來訓(xùn)練。
具體而言:
GAN的生成器主要用來學(xué)習(xí)真實圖像的特征分布從而讓自身生成的圖像更加真實,以騙過判別器。判別器則需要對輸入的圖片進行真假判別。
整個過程串起來就是,生成器努力地讓生成的圖像更加真實,從而讓判別器認為自己生成的圖像是真實的圖像,而判別器則努力地去識別出圖像的真假,讓生成器無法騙過自己。
隨著訓(xùn)練的進行,生成器和判別器也在不斷地斗智斗勇,最后的結(jié)果當然就是:
生成器生成的圖像接近于真實圖像,而判別器對于生成器生成的圖像判別正確的概率接近于0.5。
其過程也可以總結(jié)為下圖:
就生成MNIST的GAN網(wǎng)絡(luò)具體模型而言:
生成器結(jié)構(gòu)為:
判別器結(jié)構(gòu)為:
至于具體的實現(xiàn)細節(jié)詳見相關(guān)文件中源代碼。
代碼里注釋的還算詳細吧T_T
結(jié)果展示
訓(xùn)練方式:
在cmd窗口運行GanMnist.py文件即可。
訓(xùn)練過程中的Loss走勢:
生成器生成的圖像演變(show.py文件):
測試方式:
在cmd窗口運行Test.py文件即可。
利用訓(xùn)練好的模型生成MNIST數(shù)據(jù)集結(jié)果:
更多
T_T好吧這個例子也許并不能體現(xiàn)出GAN多有趣。
那么立個Flag,下次有空利用GAN網(wǎng)絡(luò)來干一些有趣的事情,非常非常有趣的事情~~~