keras 激活函數(shù) Keras還是TensorFlow,程序員該如何選擇深度學(xué)習(xí)框架?
Keras還是TensorFlow,程序員該如何選擇深度學(xué)習(xí)框架?如果您想用少量的代碼盡快地構(gòu)建和測(cè)試神經(jīng)網(wǎng)絡(luò),keras是最快的,而且sequential API和model非常強(qiáng)大。而且keras
Keras還是TensorFlow,程序員該如何選擇深度學(xué)習(xí)框架?
如果您想用少量的代碼盡快地構(gòu)建和測(cè)試神經(jīng)網(wǎng)絡(luò),keras是最快的,而且sequential API和model非常強(qiáng)大。而且keras的設(shè)計(jì)非常人性化。以數(shù)據(jù)輸入和輸出為例,與keras的簡(jiǎn)單操作相比,tensorflow編譯碼的構(gòu)造過(guò)程非常復(fù)雜(尤其對(duì)于初學(xué)者來(lái)說(shuō),大量的記憶過(guò)程非常痛苦)。此外,keras將模塊化作為設(shè)計(jì)原則之一,用戶可以根據(jù)自己的需求進(jìn)行組合。如果你只是想快速建立通用模型來(lái)實(shí)現(xiàn)你的想法,keras可以是第一選擇。
但是,包裝后,keras將變得非常不靈活,其速度相對(duì)較慢。如果高度包裝,上述缺點(diǎn)將更加明顯。除了一些對(duì)速度要求較低的工業(yè)應(yīng)用外,由于tensorflow的速度較高,因此會(huì)選擇tensorflow
如果您在驗(yàn)證您的想法時(shí),想定義損失函數(shù)而不是使用現(xiàn)有的設(shè)置,與keras相比,tensorflow提供了更大的個(gè)性空間。此外,對(duì)神經(jīng)網(wǎng)絡(luò)的控制程度將在很大程度上決定對(duì)網(wǎng)絡(luò)的理解和優(yōu)化,而keras提供的權(quán)限很少。相反,tensorflow提供了更多的控制權(quán),比如是否訓(xùn)練其中一個(gè)變量、操作梯度(以獲得訓(xùn)練進(jìn)度)等等。
盡管它們都提供了深度學(xué)習(xí)模型通常需要的功能,但如果用戶仍然追求一些高階功能選擇,例如研究特殊類型的模型,則需要tensorflow。例如,如果您想加快計(jì)算速度,可以使用tensorflow的thread函數(shù)來(lái)實(shí)現(xiàn)與多個(gè)線程的相同會(huì)話。此外,它還提供了調(diào)試器功能,有助于推斷錯(cuò)誤和加快操作速度。
請(qǐng)問(wèn)神經(jīng)網(wǎng)絡(luò)有多個(gè)輸出的回歸問(wèn)題,損失函數(shù)如何定義比較合理?
在我看來(lái),多重輸出和損失函數(shù)的類型選擇沒(méi)有直接關(guān)系。一般來(lái)說(shuō),使用交叉熵是沒(méi)有問(wèn)題的,即使是最小均方誤差也不會(huì)產(chǎn)生顯著的影響。但是,最好添加一個(gè)帶有范數(shù)的正則化因子(計(jì)算量較少)。然而,輸出有多大是影響算法收斂性的關(guān)鍵因素,因?yàn)槿绻敵鎏啵ɡ绯^(guò)一千個(gè))需要合并,可以嘗試使用分層softmax。有關(guān)代碼,請(qǐng)參閱word2vec。我希望它能幫助你
~]。
具體來(lái)說(shuō),當(dāng)前主流的神經(jīng)網(wǎng)絡(luò)模型使用梯度下降算法進(jìn)行訓(xùn)練,或?qū)W習(xí)參數(shù)。學(xué)習(xí)速率決定權(quán)重在梯度方向上成批移動(dòng)的距離。理論上,學(xué)習(xí)率越高,神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)速度越快。但是,如果學(xué)習(xí)速率過(guò)高,可能會(huì)“穿越”損失函數(shù)的最小值,導(dǎo)致收斂失敗。
上圖左邊是高學(xué)習(xí)率,右邊是低學(xué)習(xí)率,來(lái)源:mikkel Duif(quora)
那么,如何找到最佳學(xué)習(xí)率?
方法。但是,這種方法的初始學(xué)習(xí)率(上例中為0.1)不應(yīng)該太高。如果初始學(xué)習(xí)率太高,可能會(huì)“穿越”最優(yōu)值。
另外,還有另外一種思路,就是逆向操作,從學(xué)習(xí)率很低開(kāi)始,每批之后再提高學(xué)習(xí)率。例如,從0.00001到0.0001,再到0.001,再到0.01,再到0.1。這個(gè)想法背后的直覺(jué)是,如果我們總是以很低的學(xué)習(xí)率學(xué)習(xí),我們總是可以學(xué)習(xí)到最好的權(quán)重(除非整個(gè)網(wǎng)絡(luò)架構(gòu)有問(wèn)題),但它將非常緩慢。因此,從一個(gè)很低的學(xué)習(xí)率開(kāi)始,我們可以肯定地觀察到損失函數(shù)的下降。然后逐漸加大學(xué)習(xí)率,直到學(xué)習(xí)率過(guò)高,導(dǎo)致發(fā)散。該方法還避免了上述方法初始學(xué)習(xí)率過(guò)高,一次“穿越”最優(yōu)值的隱患。這是Leslie n.Smith在2015年的論文《訓(xùn)練神經(jīng)網(wǎng)絡(luò)的循環(huán)學(xué)習(xí)率》中提出的方法。
如何估算神經(jīng)網(wǎng)絡(luò)的最優(yōu)學(xué)習(xí)率?
這兩種方法都是常用的分類算法。從目標(biāo)函數(shù)的角度看,不同之處在于logistic回歸采用logistic損失,支持向量機(jī)采用鉸鏈損失。這兩個(gè)損失函數(shù)的目的是增加對(duì)分類影響較大的數(shù)據(jù)點(diǎn)的權(quán)重,減少與分類關(guān)系較小的數(shù)據(jù)點(diǎn)的權(quán)重。支持向量機(jī)的處理方法只考慮了支持向量機(jī)。