Super-Resolution CNN - Record

Tue 27 Dec 12:36

[tf.app.flags]what does tf.app.flags do? why we need that?

This is google's way for parsing argument from the commandline. It's not implemented with python-gflags, but with a similar API. The most common way is to use argparse.(Which I used in the kaggle project). And arguments defined with it are global arguments.?

Note that this module is currently packaged as a convenience for writing demo apps, and is not technically part of the public API, so it may change in future. So I'm gonna use argparse.

Tue 27 Dec 14:44

[python module: os&sys]python常見模塊命令(os/sys/platform)

Python的標(biāo)準(zhǔn)庫中的os模塊主要涉及普遍的操作系統(tǒng)功能。可以在Linux和Windows下運(yùn)行,與平臺無關(guān)。

os.sep 可以取代操作系統(tǒng)特定的路徑分割符。

os.name字符串指示你正在使用的平臺。比如對于Windows,它是'nt',而對于Linux/Unix用戶,它是'posix'。

os.getcwd()函數(shù)得到當(dāng)前工作目錄,即當(dāng)前Python腳本工作的目錄路徑。

os.getenv()和os.putenv()函數(shù)分別用來讀取和設(shè)置環(huán)境變量。

os.listdir()返回指定目錄下的所有文件和目錄名。

os.remove()函數(shù)用來刪除一個文件。

os.system()函數(shù)用來運(yùn)行shell命令。

os.linesep字符串給出當(dāng)前平臺使用的行終止符。例如,Windows使用'\r\n',Linux使用'\n'而Mac使用'\r'。

os.path.split()函數(shù)返回一個路徑的目錄名和文件名。

os.path.isfile()和os.path.isdir()函數(shù)分別檢驗(yàn)給出的路徑是一個文件還是目錄。

os.path.existe()函數(shù)用來檢驗(yàn)給出的路徑是否真地存在

os和os.path模塊

os.listdir(dirname):列出dirname下的目錄和文件

os.getcwd():獲得當(dāng)前工作目錄

os.curdir:返回但前目錄('.')

os.chdir(dirname):改變工作目錄到dirname

os.path.isdir(name):判斷name是不是一個目錄,name不是目錄就返回false

os.path.isfile(name):判斷name是不是一個文件,不存在name也返回false

os.path.exists(name):判斷是否存在文件或目錄name

os.path.getsize(name):獲得文件大小,如果name是目錄返回0L

os.path.abspath(name):獲得絕對路徑

os.path.normpath(path):規(guī)范path字符串形式

os.path.split(name):分割文件名與目錄(事實(shí)上,如果你完全使用目錄,它也會將最后一個目錄作為文件名而分離,同時(shí)它不會判斷文件或目錄是否存在)

os.path.splitext():分離文件名與擴(kuò)展名

os.path.join(path,name):連接目錄與文件名或目錄

os.path.basename(path):返回文件名

os.path.dirname(path):返回文件路徑

Tue 27 Dec 15:01

[epoch & iteration & batchsize]?batchsize & iteration & epoch

batchsize:批大小。在深度學(xué)習(xí)中,一般采用SGD訓(xùn)練,即每次訓(xùn)練在訓(xùn)練集中取batchsize個樣本訓(xùn)練;

iteration:1個iteration等于使用batchsize個樣本訓(xùn)練一次;

epoch:1個epoch等于使用訓(xùn)練集中的全部樣本訓(xùn)練一次;

Tue 27 Dec 15:24

[Adam Optimizer & GradientDescentOptimizer]?choose between Adam & Gradient

(AdamOptimizer ->AO, GradientDescentOptimizer -> GDO)

AO uses Kingma and Ba's Adam algorithm to control the learning rate. AO offers several advantages over GDO. Foremost is that AO uses moving average of the parameter (momentum); Bengio discusses the reasons for why this is beneficial in Section 3.1.1. of this paper(Practical Recommendations for Gradient-Based Training of Deep Architecture). Simply put, this enables Adam to use a larger effective step sizem and the algorithm will converge to this step size without fine tuning. Also refer to this paper(ADAM: A METHOD FOR STOCHASTIC OPTIMIZATION) to see that AO is more sophisticated model than GDO.

The main downside of this algorithm is that AO requires more computation to be performed for each parameter in each training step (to maintain the moving averages and variances, and calculate the scaled gradient); and more state to be retained for each parameter (approximately tripling the size of the model to store the average and variance for each parameter). A simple GDO could equally be used, but would require more learning_rate argument adjustment to the GDO until it converges faster.

?to be retained for each parameter (approximately tripling the size of the model to store the average and variance for each parameter). A simpletf.train.GradientDescentOptimizercould equally be used in your MLP, but would require more hyperparameter tuning before it would converge as quickly.

In short, the AO can adjust learning-rate automatically during the training process while GDO needs more tuning on learning-rate by hand. But to reach that, AO needs more computation and more space to store the averages and variances.

I'm gonna choose AdamOptimizer over GradientDescentOptimizer.

Tue 27 Dec 16:57

[python module: glob]?glob

glob是python自己帶的一個文件操作相關(guān)模塊,內(nèi)容也不多,用它可以查找符合自己目的的文件,就類似于Windows下的文件搜索,而且也支持通配符,*,?,[]這三個通配符,*代表0個或多個字符,?代表一個字符,[]匹配指定范圍內(nèi)的字符,如[0-9]匹配數(shù)字。它的主要方法就是glob,該方法返回所有匹配的文件路徑列表,該方法需要一個參數(shù)用來指定匹配的路徑字符串(本字符串可以為絕對路徑也可以為相對路徑)。

[dcgan + sub-pixel]

1.?Deconvolution and Checkerboard Artifacts

2.?dcgan-git

3.?subpixel-git

4.?GAN history

圖像生成GAN模型變遷:GAN->CGAN->LAPGAN->DCGAN->GRAN->VAEGAN

1.《Generative Adversarial Nets》

2.《Conditional Generative Adversarial Nets》

3.《Deep Generative Image Models using a Laplacian Pyramid of Adversarial Networks》

4.《Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks》

5.《Autoencoding beyond pixels using a learned similarity metric》

6.《Generating Images with Recurrent Adversarial Networks》

GAN【1】啟發(fā)自博弈論中的納什均衡,其包含一對模型——一個生成模型(G)和一個判別模型(D)。用一個很經(jīng)典的比喻就是,生成模型(G)就像小偷,要盡可能地提高自己的偷竊手段去欺騙身為警察的判別模型(D),而D也要盡可能地訓(xùn)練自己的火眼金睛去防止被欺騙。所以,真正的學(xué)習(xí)過程就變成了一種生成模型(G)和判別模型(D)之間的競爭過程——隨機(jī)從真實(shí)樣本和由生成模型(G)生成出的“假樣本”中取一個,讓判別模型(D)去判斷是否為真。

GAN 這種競爭的方式不再要求一個假設(shè)的數(shù)據(jù)分布,也就是說我們不用 formulate p(x),而是直接進(jìn)行 sampling,從而真正達(dá)到了理論上可以完全逼近真實(shí)數(shù)據(jù)。這也是 GAN 最大的優(yōu)勢。然而,everything has a price. 這種不需要預(yù)先建模的方式的缺點(diǎn)就是在于它太過自由了,對于較大的圖片,較多的 pixel 的情形,基于簡單 GAN 的方式就不太可控了。在 GAN中,每次學(xué)習(xí)參數(shù)的更新過程,被設(shè)為 D 更新 k 回,G 才更新 1 回,也是出于類似的考慮。

為了解決 GAN 太過自由的這個問題,一個很自然的思想便是給 GAN 加上一點(diǎn)點(diǎn)束縛,于是便有了 Conditional Generative Adversarial Nets(CGAN)【2】。這篇工作的改進(jìn)非常 straightforward,就是在 D 和 G 的建模中分別加入 conditional 變量 y。后來這一方式也被證明非常有效。

另一方面,為了改進(jìn) GAN 太自由的問題,還有一個想法就是不要讓 GAN 一次完成全部任務(wù),而是一次生成一部分,分多次生成一張完整的圖片。Sounds familiar?對啊,就是去年 DeepMind 大火的一個工作 DRAW 的思想咯。DRAW 中指出,我們?nèi)祟愒谕瓿梢环鶊D畫時(shí),都不一定是一筆完成的,我們又為何要求機(jī)器能做到呢?所以 DRAW 用了一種 sequential VAE 的模型,讓機(jī)器一點(diǎn)點(diǎn)“寫”出了一個個數(shù)字。于是 Facebook 等人提出的LAPGAN[3] 則是采用了這樣的思想,在 GAN 基礎(chǔ)上做出了改進(jìn)。LAPGAN[3] 這個工作既有 project page,也有開源代碼,是非常值得重視的工作。在實(shí)現(xiàn) sequential version 的方式上,LAPGAN[3] 這個工作采用的是一種幾十年前的Laplacian Pyramid的方式,也因此起名做 LAPGAN。

這個方式主要的操作便是 downsample 和 upsample,而優(yōu)勢是每次只考慮樣本和生成圖像之間的殘差的學(xué)習(xí)效果,某種程度上和 Residual Network 的思想是一樣的。針對殘差的逼近和學(xué)習(xí),相對更加容易。

DCGAN[4] 這篇論文的提出看似并沒有很大創(chuàng)新,但其實(shí)它的開源代碼現(xiàn)在被使用和借鑒的頻率最高。這一切必須歸功于這篇工作中比 LAPGAN 更 robust 的工程經(jīng)驗(yàn)分享。也就是說,DCGAN,Deep Convolutional Generative Adversarial Networks,這個工作[4],指出了許多對于 GAN 這種不穩(wěn)定學(xué)習(xí)方式重要的架構(gòu)設(shè)計(jì)和針對 CNN 這種網(wǎng)絡(luò)的特定經(jīng)驗(yàn)。重點(diǎn)來看:

比如他們提出既然之前已經(jīng)被提出的 strided convolutional networks 可以從理論上實(shí)現(xiàn)和有 pooling 的 CNN 一樣的功能和效果,那么 strided convolutional networks 作為一個可以 fully differentiable 的 generator G,在 GAN 中會表現(xiàn)得更加可控和穩(wěn)定。又比如,本來 Facebook 的 LAPGAN 中指出 Batch Normalization(BN) 被用在 GAN 中的 D 上會導(dǎo)致整個學(xué)習(xí)的 collapse,但是 DCGAN 中則成功將 BN 用在了 G 和 D 上。這些工程性的突破無疑是更多人選擇 DCGAN 這一工作作為 base 的重要原因。

另一方面,他們在 visualize generative models 也有許多貢獻(xiàn)。比如他們學(xué)習(xí)了 ICLR 2016 論文《Generating Sentences From a Continuous Space》中的 interpolate space 的方式,將生成圖片中的 hidden states 都 show 了出來,可以看出圖像逐漸演變的過程。

今天要推薦的倒數(shù)第二篇論文[5] 也和 DRAW 有著非常多的相似點(diǎn)。之前已經(jīng)說了,在改進(jìn) GAN 時(shí),可以考慮 sequential version。Sequential models 的好處便是可以讓下一步的 model 利用上一步得到的結(jié)果,在之前的結(jié)果上做出修改,類似于一種 conditional 的方式。為了讓 GAN 也擁有這種 sequential 的能力,這篇論文[5] 將把 GAN 和 LSTM 結(jié)合,稱為GRAN,使其分割成了 step by step 的過程。每一個 step 中,就像 LSTM 的 cell 一樣,都有一個 C_t,這個決定的是 what to draw,也就是畫的 content,也是每一個 step 的 output;同時(shí),就像 LSTM 中的 hidden states 一樣,這里也有 h_{c,t}。與簡單的 LSTM 不同的是,這里決定每個 cell 內(nèi)容,也就是? 的不僅僅是 hidden states,還有一個 “hidden of prior”,是專屬于 GAN 中的生成模型 G 的一個先驗(yàn) ,h_z。 h_z 和 h_{c,t} 拼接(concatenate)之后共同決定當(dāng)前 step 的 update——what to draw。

并且,因?yàn)橥昝览昧?gradient of convolution 還是 convolution 的性質(zhì),這個改造后的 GRAN 可以將每次的求導(dǎo)看做一次 decoding 過程,而每次的 convolution 等操作變成 encoding 過程,也就可以因此對應(yīng)到 DRAW 中的 decoder 和 encoder 部分。而 GAN 和 DRAW 最大的不同之處便在于,GAN 中在計(jì)算 loss 時(shí)是在 hidden space 中,而 DRAW 是在原始 input space 中。

那么在實(shí)驗(yàn)中,這篇論文也確實(shí)證明了 sequential models(multi-step)生成的圖像比 single step 的要好。只不過,generative models 的 evaluation 還比較模糊,所以實(shí)驗(yàn)結(jié)果上并不能很好地和以前的 GAN 或者相關(guān)方法做比較。接下來另一個重點(diǎn)來了,這篇論文的一個創(chuàng)新便是提出了一種 GAN 這種特殊 generative models 的評價(jià)方法。過去用于評價(jià) generated image 的 Parzen Windows 或者 manual evaluation 等方法都各有各的缺點(diǎn)。這篇論文提出,既然本來就是競爭模型,可以讓兩組 GAN 互相“競爭”評價(jià)。互為評委,互為選手。下面這個配圖也是挺萌的……

最后說說缺點(diǎn)吧,現(xiàn)階段來看這個模型的可擴(kuò)展性還不是那么好,盡管說是 step by step 的,在最后的實(shí)驗(yàn)中也只用了幾個 discrete step 做實(shí)驗(yàn),[1,3,5] 這樣。

上面說的都是通過變成 sequential versions 來減弱 GAN 的自由性。但是還有一篇工作[6],是“反其道而行之”,將 GAN 中學(xué)出來的 feature 重新運(yùn)用在 VAE 的 reconstruction objective 中,從而結(jié)合了 GAN 和 VAE 的優(yōu)點(diǎn)。于是,這個工作被稱為VAEGAN

具體的,因?yàn)樵谝郧暗?reconstruction objective 中,都用到的是 element-wise distance metrics。這種 metrics 其實(shí)對于很多 hidden feature/space 的學(xué)習(xí)并不好。這篇論文的根本 idea 就是利用 GAN 中 Discriminator D,使其當(dāng)做 learned similarity measure,來替代/彌補(bǔ) reconstruction objective 中的這種 similarity measure component。D 學(xué)習(xí)到的 similarity measure 便可以被認(rèn)為是一種 high-level representation 中的 measurement。可以看出,這個思想還是很有可擴(kuò)展性的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,362評論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,577評論 3 429
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,486評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,852評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,600評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,944評論 1 328
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,944評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,108評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,652評論 1 336
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,385評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,616評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,111評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,798評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,205評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,537評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,334評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,570評論 2 379

推薦閱讀更多精彩內(nèi)容