90天學(xué)會GAN--Day1--從MNIST數(shù)據(jù)集開始

1. 什么是GAN
GAN, 全稱是Generative Adversarial Networks, 是一種對抗生成網(wǎng)絡(luò),用于生成圖片:比如AI換臉,AI繪畫風(fēng)格轉(zhuǎn)換。該模型由兩個部分組成,分別是 生成器 generator 和 鑒別器 discriminator。 其中,生成器的作用就是生成圖片,而鑒別器的作用就是鑒別該圖片究竟是輸入的圖片還是生成器生成的圖片 (若是輸入的圖片則返回1,否則返回0)。
生成器和鑒別器的關(guān)系就像是畫家與鑒賞家的關(guān)系。生成器畫一幅畫讓鑒別器鑒別這是由名家畫的還是由生成器畫的,然后生成器反饋兩者的區(qū)別來提高生成器畫圖的能力。更加通俗易懂的解釋還可以看 百度AI 寫的《四天搞懂生成對抗網(wǎng)絡(luò)(一)——通俗理解經(jīng)典GAN》中的例子。
2. GAN的構(gòu)建(以MNIST數(shù)據(jù)集為例)
2.1. 數(shù)據(jù)預(yù)處理
為了更加貼近實際使用,首先使用 gen_label.py 將下載的二進制文件轉(zhuǎn)換為圖片
首先使用 pytorch 內(nèi)置的函數(shù)獲取 MNIST 數(shù)據(jù)集:

此時數(shù)據(jù)已經(jīng)下載到 /data/mnist 目錄下,并且已經(jīng)存儲在了dataloader中 (格式為 (圖片,標(biāo)簽)),下一步需要做的就是將圖片從二進制文件轉(zhuǎn)化為.png等可以可視化的方式,因此我們構(gòu)造了以下函數(shù) (需要 import?CV2) :

之后我們就可以調(diào)用 save_img 函數(shù)來把圖片寫入該目錄
另外為了方便之后讀取,我們在 /data/mnist 目錄下增加了一個 .txt 文件用于索引,格式為圖片地址+標(biāo)簽
實現(xiàn)的方法很簡單,只需要遍歷一遍 dataloader 就好了
