App下載

【Python】利用GAN生成MNIST數(shù)據(jù)集

猿友 2018-08-07 17:50:19 瀏覽數(shù) (6873)
反饋

本文轉(zhuǎn)載至知乎ID:Charles(白露未晞)知乎個(gè)人專欄
下載W3Cschool手機(jī)App,0基礎(chǔ)隨時(shí)隨地學(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ū)動(dòng)嚴(yán)格對應(yīng)即可。


原理簡介

生成對抗網(wǎng)絡(luò)(GAN)的基本思想源自博弈論中的二人零和博弈,由一個(gè)生成器和一個(gè)判別器組成,通過對抗學(xué)習(xí)的方式來訓(xùn)練。

具體而言:

GAN的生成器主要用來學(xué)習(xí)真實(shí)圖像的特征分布從而讓自身生成的圖像更加真實(shí),以騙過判別器。判別器則需要對輸入的圖片進(jìn)行真假判別。

整個(gè)過程串起來就是,生成器努力地讓生成的圖像更加真實(shí),從而讓判別器認(rèn)為自己生成的圖像是真實(shí)的圖像,而判別器則努力地去識(shí)別出圖像的真假,讓生成器無法騙過自己。

隨著訓(xùn)練的進(jìn)行,生成器和判別器也在不斷地斗智斗勇,最后的結(jié)果當(dāng)然就是:

生成器生成的圖像接近于真實(shí)圖像,而判別器對于生成器生成的圖像判別正確的概率接近于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走勢:

生成器生成的圖像演變(show.py文件):

測試方式:

在cmd窗口運(yùn)行Test.py文件即可。

利用訓(xùn)練好的模型生成MNIST數(shù)據(jù)集結(jié)果:

更多

T_T好吧這個(gè)例子也許并不能體現(xiàn)出GAN多有趣。

那么立個(gè)Flag,下次有空利用GAN網(wǎng)絡(luò)來干一些有趣的事情,非常非常有趣的事情~~~

1 人點(diǎn)贊