本文轉(zhuǎn)載至知乎ID:Charles(白露未晞)知乎個(gè)人專欄
下載W3Cschool手機(jī)App,0基礎(chǔ)隨時(shí)隨地學(xué)編程>>戳此了解
導(dǎo)語
利用Python搭建簡(jiǎn)單的GAN網(wǎng)絡(luò)來生成MNIST數(shù)據(jù)集。其中GAN,即生成對(duì)抗網(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)境搭建請(qǐng)自行參考相關(guān)的網(wǎng)絡(luò)教程,注意版本和驅(qū)動(dòng)嚴(yán)格對(duì)應(yīng)即可。
原理簡(jiǎn)介
生成對(duì)抗網(wǎng)絡(luò)(GAN)的基本思想源自博弈論中的二人零和博弈,由一個(gè)生成器和一個(gè)判別器組成,通過對(duì)抗學(xué)習(xí)的方式來訓(xùn)練。
具體而言:
GAN的生成器主要用來學(xué)習(xí)真實(shí)圖像的特征分布從而讓自身生成的圖像更加真實(shí),以騙過判別器。判別器則需要對(duì)輸入的圖片進(jìn)行真假判別。
整個(gè)過程串起來就是,生成器努力地讓生成的圖像更加真實(shí),從而讓判別器認(rèn)為自己生成的圖像是真實(shí)的圖像,而判別器則努力地去識(shí)別出圖像的真假,讓生成器無法騙過自己。
隨著訓(xùn)練的進(jìn)行,生成器和判別器也在不斷地斗智斗勇,最后的結(jié)果當(dāng)然就是:
生成器生成的圖像接近于真實(shí)圖像,而判別器對(duì)于生成器生成的圖像判別正確的概率接近于0.5。
其過程也可以總結(jié)為下圖:
就生成MNIST的GAN網(wǎng)絡(luò)具體模型而言:
生成器結(jié)構(gòu)為:
判別器結(jié)構(gòu)為:
至于具體的實(shí)現(xiàn)細(xì)節(jié)詳見相關(guān)文件中源代碼。
代碼里注釋的還算詳細(xì)吧T_T
結(jié)果展示
訓(xùn)練方式:
在cmd窗口運(yùn)行GanMnist.py文件即可。
訓(xùn)練過程中的Loss走勢(shì):
生成器生成的圖像演變(show.py文件):
測(cè)試方式:
在cmd窗口運(yùn)行Test.py文件即可。
利用訓(xùn)練好的模型生成MNIST數(shù)據(jù)集結(jié)果:
更多
T_T好吧這個(gè)例子也許并不能體現(xiàn)出GAN多有趣。
那么立個(gè)Flag,下次有空利用GAN網(wǎng)絡(luò)來干一些有趣的事情,非常非常有趣的事情~~~