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